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.

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.


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.


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.]


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.


5
git show -1 --stat  

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


3

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


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))"

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

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 <me@machine.local>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <ryandesign@macports.org>
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]

-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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.