Wie überprüfe ich Datum und Uhrzeit der letzten git pull
Ausführung? Ich muss häufig wissen, wann sich der Code auf einem Server geändert hat, wenn etwas schief geht.
Wie überprüfe ich Datum und Uhrzeit der letzten git pull
Ausführung? Ich muss häufig wissen, wann sich der Code auf einem Server geändert hat, wenn etwas schief geht.
Antworten:
Der git show
Befehl 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.
git show
Zeigt 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.
git show
teilt Ihnen mit, bei welchem Commit sich Ihr lokaler Klon befindet. (Ich weiß, dass dies alt ist, aber ich bin hier über die Suche
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.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
welcher Zeitstempel sich ändert, wenn git pull
Änderungen vom Remote- master
Zweig eingehen. Der Zeitstempel ändert sich jedoch nicht, wenn gemeldet wird, dass keine Änderungen vorliegen git pull
.
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_HEAD
dem [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.]
-c
ist keine gültige Option stat
für Mac.
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 -g
gedruckt. Wenn Sie sich .git/logs/HEAD
zum 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.
Stark inspiriert von der @smooves
Antwort: 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-toplevel
bedeutet nur, wenn ich irgendwo in einem Git-Repo bin, wird das Repo-Stammverzeichnis abgerufen, 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
$ # 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]
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
stat -f %Sm .git/FETCH_HEAD
scheint aber für mich gut zu funktionieren.