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.
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.
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.
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.]
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é .
git show -1 --stat
Cette commande git affiche les dernières modifications, valide l'heure et la date avec le message
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))"
Utilisez python: python -c "import os;print 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 <[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]
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