Comment vérifier la date et l'heure de la dernière git pull
exécution? J'ai souvent besoin de savoir quand le code a changé sur un serveur en cas de problème.
Comment vérifier la date et l'heure de la dernière git pull
exécution? J'ai souvent besoin de savoir quand le code a changé sur un serveur en cas de problème.
Réponses:
La git show
commande affiche la date du dernier commit. Ce n'est pas la date à laquelle le commit a été tiré vers le référentiel local, mais Git ne conserve pas ces informations d'extraction.
Vous pourrez peut-être trouver l'heure de la dernière extraction en utilisant le ctime (heure de création) des fichiers sur le serveur. Par exemple:
ls -lct
affiche le ctime de chaque fichier, trié par le plus récent en premier.
git show
affiche la date du commit tip de la branche actuelle, qui n'est pas nécessaire le commit le plus récent dans le repo, et encore moins la date de la dernière extraction / extraction. Je recommande également de vérifier la réponse de smoove.
git show
vous indique à quel commit se trouve votre clone local. (Je sais que c'est vieux, mais je me suis retrouvé ici via une recherche.)
stat -c %Y .git/FETCH_HEAD
Vous donnera un horodatage unix de la dernière modification de ce fichier. Git écrit le fichier FETCH_HEAD à chaque fois que vous tirez ou récupérez, même s'il n'y avait rien à extraire.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
quel horodatage changera lorsque des changements seront git pull
apportés à partir de la master
branche distante , mais l'horodatage ne changera pas si git pull
aucun changement n'a été signalé.
Sur une intuition, j'ai essayé "stat -c% y .git / FETCH_HEAD", et j'ai obtenu une impression lisible par l'homme de l'heure:
> 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 [alias]
section dans votre fichier ~ / .gitconfig (il est plus sûr de le faire automatiquement en exécutant la ligne de commande suivante dans n'importe quel dépôt git)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
et ensuite vous pouvez trouver cette information avec votre nouvelle "commande", à tout moment:
> git when
2015-02-23 15:07:53.086254218 -0500
[Puis il m'est venu à l'esprit de faire "man stat", et j'ai trouvé qu'il y avait un tas d'autres paramètres% disponibles pour le programme "stat". YMMV.]
-c
n'est pas une option valide stat
pour Mac.
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 conseils de branche et à l'idée de branche actuelle dans "reflogs", dans .git/logs
. Vous pouvez les visualiser en utilisant git log -g
.
Cependant, bien que les fichiers journaux aient des horodatages, il ne semble pas qu'ils git log -g
les imprimeront. Cependant, si vous regardez .git/logs/HEAD
par exemple, vous verrez que le format est assez simple à analyser - il se compose de ce que la référence (ou HEAD) a changé, changé en, qui l'a changé, quand et un message d'activité.
Utilisez python: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
Fortement inspiré par la @smooves
réponse: https://stackoverflow.com/a/9229377/622276 et commentaires.
Mais je maintiens ma propre intégration git prompt bash
Avec la source ici: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
La version de Git Bash pour Windows fonctionne de la même manière que la version Linux.
Je compile les options multiplateformes dans une déclaration de cas. Ainsi, il lancera un processus d'extraction sur tout dépôt git dans lequel je navigue et qui date de plus de quinze minutes depuis la dernière extraction, de sorte que le reste de mon script d'invite sait si j'ai des choses à extraire.
Le radar Git avait l' habitude de le faire, mais il fallait enregistrer un fichier avec l'horodatage du dernier appel. Cela n'écrit aucun fichier temporaire.
git rev-parse --show-toplevel
signifie simplement que si je suis n'importe où dans un repo git, il obtiendra la racine du repo afin que nous puissions référencer le .git
chemin du dossier.
# 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
Voici un petit wrapper git. Installez-le avec le nom git
et avec les droits chmod a+x git
. Puis ajoutez last_successful_fetch
à .git/info/exclude
.
Lorsque vous voulez voir le résultat, utilisez stat last_successful_fetch
.
#!/bin/sh
# This script just invokes git as expected, plus one additional action:
# If there stands last_successful_fetch in .git/info/exclude, then
# this file will be touched in top dir.
"`which --all git | uniq | head -n 2 | tail -n 1`" "$@"
status=$?
if [ _"$1" = _pull -o _"$1" = _fetch ]; then
if grep last_successful_fetch "`git rev-parse --git-dir`/info/exclude" >/dev/null 2>&1; then
[ $status = 0 ] && touch last_successful_fetch
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]
Comme suggéré par l'utilisateur: https://stackoverflow.com/users/83646/smoove , vous pouvez trouver quand git pull a été appelé pour la dernière fois sur le dépôt en vérifiant l'horodatage de modification de: .git / FETCH_HEAD comme: git écrit le .git / FETCH_HEAD chaque fois que vous tirez ou récupérez, même s'il n'y avait rien à extraire.
Exemple: {master} vinegupt @ bhling69 (/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ stat -c% y .git / FETCH_HEAD
12/02/2018 02: 01: 50.487160386 +0530
stat -f %Sm .git/FETCH_HEAD
mais semble bien fonctionner pour moi.