Wie überprüfe ich Datum und Uhrzeit des letzten "Git Pull", der ausgeführt wurde?

90

Wie überprüfe ich Datum und Uhrzeit der letzten git pullAusführung? Ich muss häufig wissen, wann sich der Code auf einem Server geändert hat, wenn etwas schief geht.

Chirag Patel
quelle

Antworten:

27

Der git showBefehl zeigt das Datum des letzten Commits an. Dies ist nicht das Datum, an dem das Commit in das lokale Repository gezogen wurde, aber Git speichert solche Pull-Informationen nicht.

Möglicherweise können Sie die Zeit des letzten Abrufs anhand der ctime (Erstellungszeit) der Dateien auf dem Server ermitteln. Beispielsweise:

ls -lct

Zeigt die Uhrzeit jeder Datei an, sortiert nach der neuesten zuerst.

Greg Hewgill
quelle
18
Dies beantwortet die Frage nicht - siehe die Antwort von smoove unten.
Wilfred Hughes
1
git showZeigt das Datum des Tip-Commits des aktuellen Zweigs an, das nicht erforderlich ist, das letzte Commit im Repo, geschweige denn das Datum des letzten Abrufs / Pulls. Ich empfehle auch, die Antwort von smoove zu überprüfen.
Stefaan
3
Ich bin anderer Ansicht. Dies beantwortet die Frage. Es gibt Ihnen zwar nicht das Datum des letzten Pulls an, aber das Datum des Commits, das das letzte Mal war, als Sie das letzte Mal gezogen haben. Für den Anwendungsfall in der ursprünglichen Frage ist dies perfekt geeignet. Sie möchten wissen, wann Sie den Code auf einem Server zuletzt über Git Pull aktualisiert haben, dh welche Version des Codes sich derzeit auf dem Server befindet. git showteilt Ihnen mit, bei welchem ​​Commit sich Ihr lokaler Klon befindet. (Ich weiß, dass dies alt ist, aber ich bin hier über die Suche
Dietmar
149
stat -c %Y .git/FETCH_HEAD

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

smoove
quelle
17
Unix-Zeitstempel der geänderten Zeit unter OSX:stat -f '%m' .git/FETCH_HEAD
jpillora
18
Git schreibt FETCH_HEAD vor dem eigentlichen Abrufen / Ziehen ... Wenn also das Ziehen fehlschlug oder abgebrochen wurde, würde FETCH_HEAD nicht den tatsächlichen Repository-Status darstellen. Dies ist besonders problematisch, wenn die ursprüngliche Repo-URL nicht funktioniert, da jeder Pull fehlschlagen würde, FETCH_HEAD jedoch bei jedem Versuch aktualisiert wird.
Rustyx
9
Datum der geänderten Zeit unter OS X:stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
Colin vH
7
Sie können auch überprüfen, .git/refs/heads/masterwelcher Zeitstempel sich ändert, wenn git pullÄnderungen vom Remote- masterZweig eingehen. Der Zeitstempel ändert sich jedoch nicht, wenn gemeldet wird, dass keine Änderungen vorliegen git pull.
Malvineous
6
Für alle, die dies in einem Skript verwenden: Wenn noch kein Abruf oder Pull durchgeführt wurde, ist FETCH_HEAD noch nicht vorhanden und stat gibt den Exit-Code 1 zurück.
MajicBob
43

Aus Versehen habe ich "stat -c% y .git / FETCH_HEAD" ausprobiert und einen für Menschen lesbaren Ausdruck der Zeit erhalten:

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

Darüber hinaus können Sie when = !stat -c %y .git/FETCH_HEADdem [alias]Abschnitt in Ihrer ~ / .gitconfig-Datei etwas hinzufügen (dies ist am sichersten, wenn Sie die folgende Befehlszeile in einem beliebigen Git-Repo automatisch 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 mir der Gedanke, "man stat" zu machen, und ich stellte fest, dass für das 'stat'-Programm eine Reihe anderer% -Parameter verfügbar sind. YMMV.]

Paul McMullin
quelle
3
Dies ist die nützlichste Antwort!
Arun
Nur eine Notiz. -cist keine gültige Option statfür Mac.
Abel Callejo
10

In einem nicht nackten Repository (und ein nacktes Repository macht keinen Sinn für git pull) protokolliert git alle Änderungen an Verzweigungstipps und der aktuellen Verzweigungsidee in "Reflogs" in .git/logs. Sie können diese mit anzeigen git log -g.

Obwohl die Protokolldateien Zeitstempel haben, wird sie nicht git log -ggedruckt. Wenn Sie sich .git/logs/HEADzum Beispiel einen Blick darauf werfen , werden Sie feststellen, dass das Format recht einfach zu analysieren ist. Es besteht aus dem, was der Ref (oder HEAD) geändert hat, dem, dem, der es geändert hat, wann und einer Aktivitätsnachricht.

araqnid
quelle
5
git show -1 --stat  

Dieser git-Befehl zeigt die letzten Änderungen an, die Uhrzeit und Datum mit Nachricht festschreiben

sachin_ur
quelle
3

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

breiter
quelle
benötigt einige Formatierungen, aber eine vollständig gültige Antwort für freebsd, bei der stat nicht wie oben beschrieben funktioniert.
Endre
2
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))"
RedEyed
quelle
1

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

Stark inspiriert von der @smoovesAntwort: https://stackoverflow.com/a/9229377/622276 und Kommentaren.

Aber ich behalte meine eigene Bash-Prompt-Git-Integration bei

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

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

Ich kompiliere die plattformübergreifenden Optionen zu einer case-Anweisung. Es wird also einen Abrufprozess für jedes Git-Repo auslösen, in das ich navigiere, das älter als fünfzehn Minuten seit dem letzten Abruf ist, sodass der Rest meines Eingabeaufforderungsskripts weiß, ob ich etwas zum Abrufen habe.

Git Radar war daran gewöhnt, aber es erforderte das Speichern einer Datei mit dem Zeitstempel, wann der letzte Abruf aufgerufen wurde. Dies schreibt keine temporären Dateien.

git rev-parse --show-toplevelbedeutet nur, wenn ich irgendwo in einem Git-Repo bin, wird das Repo-Stammverzeichnis abgerufen, sodass wir auf den .gitOrdnerpfad 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
Josh Peak
quelle
0
$ # 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) HEAD@{2017-12-14 11:28:39 +0100}: pull: Fast-forward
37fe73ad HEAD@{2017-12-03 17:09:32 +0100}: pull: Fast-forward
c4107fcd HEAD@{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: HEAD@{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]
1,61803
quelle
-2

Wie vom Benutzer vorgeschlagen: https://stackoverflow.com/users/83646/smoove können Sie feststellen, wann Git Pull zuletzt im Repo aufgerufen wurde, indem Sie den Änderungszeitstempel von: .git / FETCH_HEAD überprüfen, indem: git die .git / schreibt FETCH_HEAD-Datei jedes Mal, wenn Sie ziehen oder abrufen, auch wenn nichts zu ziehen war.

Beispiel: {master} Vinegupt @ bhling69 (/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ stat -c% y .git / FETCH_HEAD

2018-02-12 02: 01: 50.487160386 +0530

Vineet Gupta
quelle
Für OSX 10.9.5 musste ich dies tun: stat -f %Sm .git/FETCH_HEADscheint aber für mich gut zu funktionieren.
Josh
Sie sollten die Antwort von @ smoove positiv bewerten, anstatt sie in Ihre eigene "Antwort" zu kopieren / einzufügen.
Bfontaine