web-dev-qa-db-fra.com

Comment puis-je vérifier la date et l'heure du dernier `git pull` qui a été exécuté?

Comment vérifier la date et l'heure de la dernière git pull exécutée? J'ai souvent besoin de savoir quand le code change sur un serveur en cas de problème.

77
Chirag Patel

La commande git show indique la date de la dernière validation. Ce n'est pas la date à laquelle la validation a été extraite vers le référentiel local, mais Git ne conserve pas ces informations.

Vous pourrez peut-être trouver l'heure du dernier tirage à l'aide de l'heure ctime (heure de création) des fichiers sur le serveur. Par exemple:

ls -lct

affiche le temps de chaque fichier, trié par le plus récent en premier.

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

Vous donnera un timestamp unix de la dernière modification de ce fichier . Git écrit le fichier FETCH_HEAD à chaque fois que vous extrayez ou récupérez, même s'il n'y avait rien à extraire.

121
smoove

Sur un pressentiment, j'ai essayé "stat-c% y .git/FETCH_HEAD", et j'ai obtenu une impression du temps lisible par l'homme:

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

De plus, vous pouvez ajouter when = !stat -c %y .git/FETCH_HEAD à la section [alias] de votre fichier ~/.gitconfig (il est plus sûr de le faire automatiquement en exécutant la ligne de commande suivante dans tout dépôt Git). 

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

et puis vous êtes capable de trouver cette information avec votre nouvelle "commande", à tout moment:

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

[Ensuite, je me suis dit que je devais faire "man stat" et j'ai découvert qu'il y avait une foule d'autres paramètres% disponibles pour le programme 'stat'. YMMV.]

27
Paul McMullin

Dans un référentiel non-nu (et un référentiel nu n'a pas de sens pour git pull), git enregistre toutes les modifications apportées aux astuces de branche et à l'idée de branche actuelle dans "reflogs", dans .git/logs. Vous pouvez les voir en utilisant git log -g.

Cependant, bien que les fichiers journaux aient des horodatages, il semble que git log -g ne l’imprimera pas. Cependant, si vous jetez un coup d'œil à .git/logs/HEAD par exemple, vous verrez que le format est assez simple à analyser - il consiste en ce que le ref (ou le HEAD) a changé, est devenu, qui l'a changé, quand et un message d'activité .

9
araqnid
git show -1 --stat  

Cette commande git affiche les dernières modifications, valide l'heure et la date avec le message 

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

ou 

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

Utilisez 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) 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]
0
1.61803

Solution Bash inter-plateformes (OSX/Linux)

Fortement inspiré par @smooves answer: https://stackoverflow.com/a/9229377/622276 et des commentaires.

Mais je maintiens ma propre bash Prompt git integration

Avec la source ici: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_Prompt.sh

La version msys dans Git Bash pour Windows fonctionne de la même manière que la version linux.

Je compile les options multi-plateformes dans une déclaration de cas. Ainsi, il lancera un processus de récupération sur tout dépôt Git dans lequel je navigue qui date de plus de quinze minutes depuis la dernière récupération, de sorte que le reste de mon script Prompt sait si j'ai des éléments à extraire.

Git radar était habitué à cela, mais il fallait enregistrer un fichier avec l’horodatage de l’appel du dernier téléchargement. Cela n'écrit aucun fichier temporaire.

git rev-parse --show-toplevel signifie simplement que si je suis n'importe où dans un dépôt Git, il obtiendra la racine du dépôt afin que nous puissions référencer le chemin du dossier .git.

# 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