it-swarm.com.de

Wie überprüfe ich Datum und Uhrzeit des zuletzt ausgeführten "git pull"?

Wie kann ich das Datum und die Uhrzeit des zuletzt ausgeführten git pull überprüfen? Ich muss häufig wissen, wann sich der Code auf einem Server geändert hat, wenn etwas schief geht.

77
Chirag Patel

Der Befehl git show zeigt das Datum des letzten Commits an. Dies ist nicht das Datum, an dem das Commit in das lokale Repository gezogen wurde, aber Git behält diese Pull-Informationen nicht.

Möglicherweise können Sie den Zeitpunkt des letzten Abrufs anhand der ctime (Erstellungszeit) der Dateien auf dem Server ermitteln. Zum Beispiel:

ls -lct

zeigt die ctime jeder Datei an, sortiert nach der neuesten zuerst.

20
Greg Hewgill
stat -c %Y .git/FETCH_HEAD

Gibt Ihnen einen Unix-Zeitstempel der letzten Änderung dieser Datei. Git schreibt die Datei FETCH_HEAD jedes Mal, wenn Sie ziehen oder abrufen, auch wenn nichts zu ziehen war.

121
smoove

Zum ersten Mal habe ich "stat -c% y .git/FETCH_HEAD" ausprobiert und einen menschenlesbaren Ausdruck der Zeit erhalten:

> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500

Darüber hinaus können Sie dem Abschnitt when = !stat -c %y .git/FETCH_HEAD in Ihrer Datei ~/.gitconfig __[alias] hinzufügen. (Dies ist am sichersten, wenn Sie die folgende Befehlszeile in einem beliebigen git repo ausführen) 

git config --global alias.when '!stat -c %y .git/FETCH_HEAD'

und dann können Sie diese Informationen jederzeit mit Ihrem neuen "Befehl" finden:

> git when
2015-02-23 15:07:53.086254218 -0500

[Dann kam es mir vor, "man stat" zu machen, und ich stellte fest, dass eine Reihe anderer% -Parameter für das "stat" -Programm verfügbar sind. YMMV.]

27
Paul McMullin

In einem nicht-leeren Repository (und ein blankes Repository ist für git pull nicht sinnvoll), protokolliert git alle Änderungen an Zweigspitzen und die aktuelle Zweigidee in "reflogs" in .git/logs. Sie können diese mit git log -g anzeigen.

Obwohl die Protokolldateien über Zeitstempel verfügen, scheint git log -g sie nicht zu drucken. Wenn Sie sich zum Beispiel .git/logs/HEAD ansehen, werden Sie feststellen, dass das Format sehr einfach zu parsen ist - es besteht aus dem, was der ref (oder der HEAD) geändert hat, und in, wer es geändert hat, wann und eine Aktivitätsnachricht .

9
araqnid
git show -1 --stat  

Dieser git-Befehl zeigt die letzten Änderungen der Uhrzeit und des Datums mit der Nachricht an 

2
sachin_ur
python -c "import os, datetime ;print datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime)"

oder 

python3 -c "import os, datetime ;print(datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime))"
1
RedEyed

Verwenden Sie Python: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"

1
widerin
$ # for the latest pull even if there's nothing new
$ stat -c %y .git/FETCH_HEAD
2017-12-15 11:24:25.000000000 +0100
$ 
$ # for records of updated references
$ git reflog --date=iso
db2bba84 (HEAD -> master, Origin/master, Origin/HEAD) [email protected]{2017-12-14 11:28:39 +0100}: pull: Fast-forward
37fe73ad [email protected]{2017-12-03 17:09:32 +0100}: pull: Fast-forward
c4107fcd [email protected]{2017-11-27 18:53:40 +0100}: clone: from https://github.com/macports/macports-base
$ 
$ # for a more detailed view of the latter
$ git log -g
commit db2bba84d5e8cd82ec94a19129deb91ef62287bb (HEAD -> master, Origin/master, Origin/HEAD)
Reflog: [email protected]{0} (me <[email protected]>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <[email protected]>
Date:   Wed Dec 13 10:23:47 2017 -0600

    portutil.tcl: Fix renames that supply the -force option

    Treat $options as a list not as a string.

    See: https://trac.macports.org/ticket/55492

[snip]
0
1.61803

Plattformübergreifende (OSX/Linux) Bash-Lösung

Stark inspiriert von @smooves answer: https://stackoverflow.com/a/9229377/622276 und Kommentaren.

Aber ich halte meine eigene bash Prompt git integration

Mit der Quelle hier: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_Prompt.sh

Die msys-Version in Git Bash für Windows funktioniert identisch mit der Linux-Version.

Ich kompiliere die plattformübergreifenden Optionen in einer Case-Anweisung. Es wird also ein Abrufprozess für jedes Git-Repo aktiviert, in das ich navigiere. Das ist älter als eine Viertelstunde seit dem letzten Abruf, sodass der Rest meines Prompt-Skripts weiß, ob ich etwas zu ziehen habe.

Git-Radar verwendete dies, es musste jedoch eine Datei mit Zeitstempel des Zeitpunkts gespeichert werden, zu dem der letzte Abruf aufgerufen wurde. Dies schreibt keine temporären Dateien.

git rev-parse --show-toplevel bedeutet nur, wenn ich irgendwo in einem Git-Repo bin, wird es das Repo-Stammverzeichnis erhalten, sodass wir auf den .git-Ordnerpfad verweisen können.

# No repo == no more work 
local REPO_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
if [[ -n $REPO_ROOT && -e "$REPO_ROOT/.git/FETCH_HEAD" ]]; then

    case $OSTYPE in
      darwin*)
        local LAST_FETCH="$(stat -f '%m' $REPO_ROOT/.git/FETCH_HEAD)" 
        local FETCH_THRESHOLD="$(date -v-15m +%s)"  
      ;;
      *)
        local LAST_FETCH="$(stat -c %Y $REPO_ROOT/.git/FETCH_HEAD)" 
        local FETCH_THRESHOLD="$(date -d'15 minutes ago' +%s)"  
      ;;
    esac

    # Fork fetch process in background
    if [[ $LAST_FETCH -lt $FETCH_THRESHOLD ]]; then
      git fetch --all --quiet --Prune 2> /dev/null &
    fi

fi
0
Josh Peak