Wie überprüfe ich das Datum und die Uhrzeit des neuesten "Git Pull", das ausgeführt wurde?

StackOverflow https://stackoverflow.com/questions/2993902

  •  24-10-2019
  •  | 
  •  

Frage

Wie überprüfe ich das Datum und die Uhrzeit der neuesten git pull das wurde ausgeführt? Ich muss häufig wissen, wann sich der Code auf einem Server geändert hat, wenn etwas schief geht.

War es hilfreich?

Lösung

Das git show Der Befehl zeigt das Datum des neuesten Commits. Dies ist nicht das Datum, an dem das Commit in das lokale Repository gezogen wurde, aber Git hält solche Anziehungsinformationen nicht.

Möglicherweise finden Sie die Zeit des letzten Zuges mit der Cime (Erstellungszeit) der Dateien auf dem Server. Zum Beispiel:

ls -lct

Zeigt die CTime jeder Datei an, sortiert mit der neuesten ersten.

Andere Tipps

stat -c %Y .git/FETCH_HEAD

Sie erhalten einen Unix -Zeitstempel der letzten Änderung dieser Datei. Git schreibt jedes Mal, wenn Sie ziehen oder holen, die Fetch_head -Datei, auch wenn nichts zu ziehen war.

Bei einer Ahnung habe ich "STAT -c %y .git/fetch_head" ausprobiert und einen menschlich -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 hinzufügenwhen = !stat -c %y .git/FETCH_HEAD zum [alias] Abschnitt in Ihrer ~/.gitconfig -Datei (es ist am sichersten, dies automatisch zu tun, indem die folgende Befehlszeile in einem GIT -Repo ausgeführt wird)

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

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

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

Dann kam es mir in den Sinn, "Mann stat" zu machen, und ich stellte fest, dass es für das Programm 'STAT' eine Reihe anderer % Parameter zur Verfügung stellt. Ymmv.

In einem Nicht-starken Repository (und ein nacktes Repository macht keinen Sinn für git pull), Git protokolliert alle Änderungen an Zweigspitzen und der aktuellen Zweigidee in "Reflogs", in .git/logs. Sie können diese verwenden git log -g.

Obwohl die Protokolldateien Zeitstempel haben, wird dies nicht angezeigt git log -g wird es drucken. Wenn Sie sich jedoch ansehen .git/logs/HEAD Sie werden beispielsweise sehen, dass das Format recht einfach zu analysieren ist- es besteht aus dem, was der Schiedsrichter (oder der Kopf) geändert hat, der sich geändert hat, wer es geändert hat, wann und eine Aktivitätsnachricht.

git show -1 --stat  

Dieser Befehl git zeigt die neuesten Änderungen an

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

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))"
$ # 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]

Cross Platform (OSX/Linux) Bash -Lösung

Stark inspiriert von @smooves Antworten: https://stackoverflow.com/a/9229377/622276 und Kommentare.

Aber ich unterhalte meine eigenen Bash fordere Git -Integration

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

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

Ich kompile die Cross -Plattform -Optionen in eine Fallanweisung. Es wird also einen Abrufprozess für jedes Git -Repo geben, in das ich navigiere, das ist älter als fünfzehn Minuten seit dem letzten Abruf, sodass der Rest meines schnellen Skripts weiß, ob ich Dinge zum Ziehen habe.

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

git rev-parse --show-toplevel Ich bedeutet nur, wenn ich irgendwo in einem Git -Repo bin, bekommt es die Repo -Wurzel, damit wir uns auf die beziehen können .git Ordnerpfad.

# 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

Wie vom Benutzer vorgeschlagen: https://stackoverflow.com/users/83646/smoove, Sie können feststellen, wann Git Pull zuletzt auf das Repo aufgerufen wurde, indem Sie den Modifikationszeitstempel von: .git/fetch_head als: Git überprüft.

Beispiel: {Master} Esegupt@bhling69 (/imsgit_local/work/vinegupt/im

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top