¿Cómo verifico la fecha y hora del último git pull
que se ejecutó? Con frecuencia necesito saber cuándo cambió el código en un servidor cuando algo sale mal.
91
El git show
comando muestra la fecha de la confirmación más reciente. Esta no es la fecha en la que se extrajo la confirmación al repositorio local, pero Git no guarda esa información de extracción.
Es posible que pueda encontrar la hora de la última extracción utilizando el ctime (hora de creación) de los archivos en el servidor. Por ejemplo:
ls -lct
muestra el ctime de cada archivo, ordenado con el más reciente primero.
git show
muestra la fecha de la confirmación de sugerencias de la rama actual, que no es necesaria la confirmación más reciente en el repositorio, y mucho menos la fecha de la última recuperación / extracción. También recomiendo verificar la respuesta de smoove.git show
le dice en qué confirmación se encuentra su clon local. (Sé que esto es antiguo, pero terminé aquí a través de la búsqueda)Le dará una marca de tiempo Unix de la última modificación de ese archivo. Git escribe el archivo FETCH_HEAD cada vez que extraes o recuperas, incluso si no había nada que extraer.
fuente
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
cuál tendrá su cambio de marca de tiempo cuando losgit pull
cambios provengan de lamaster
sucursal remota , pero la marca de tiempo no cambiará cuandogit pull
informe que no hay cambios.Por una corazonada, probé "stat -c% y .git / FETCH_HEAD" y obtuve una copia impresa legible por humanos de la época:
Además, puede agregar
when = !stat -c %y .git/FETCH_HEAD
a la[alias]
sección en su archivo ~ / .gitconfig (es más seguro hacerlo automáticamente ejecutando la siguiente línea de comando en cualquier repositorio de git)y luego podrá encontrar esta información con su nuevo "comando", en cualquier momento:
[Entonces se me ocurrió hacer "man stat", y descubrí que hay un montón de otros parámetros% disponibles para el programa "stat". YMMV.]
fuente
-c
no es una opción válida destat
para Mac.En un repositorio no simple (y un repositorio simple no tiene sentido para
git pull
), git registra todos los cambios en las sugerencias de rama y la idea de rama actual en "reflogs", en formato.git/logs
. Puede verlos usandogit log -g
.Sin embargo, aunque los archivos de registro tienen marcas de tiempo, no parece que
git log -g
lo imprima. Sin embargo, si echa un vistazo,.git/logs/HEAD
por ejemplo, verá que el formato es bastante simple de analizar: consiste en qué cambió la referencia (o HEAD), a quién cambió, cuándo y un mensaje de actividad.fuente
fuente
Utilice Python:
python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
fuente
o
fuente
Solución Bash multiplataforma (OSX / Linux)
Muy inspirado por la
@smooves
respuesta: https://stackoverflow.com/a/9229377/622276 y comentarios.Pero estoy manteniendo mi propia integración de git con el indicador de bash
Con la fuente aquí: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
La versión en Git Bash para Windows funciona de manera idéntica a la versión de Linux.Estoy compilando las opciones multiplataforma en una declaración de caso. Por lo tanto, bifurcará un proceso de búsqueda en cualquier repositorio de git en el que navegue y que tenga más de quince minutos desde la última búsqueda para que el resto de mi secuencia de comandos de solicitud sepa si tengo cosas que extraer.
El radar de Git solía hacer esto, pero requería guardar un archivo con la marca de tiempo de cuándo se llamó a la última búsqueda. Esto no escribe archivos temporales.
git rev-parse --show-toplevel
solo significa que si estoy en cualquier lugar de un repositorio de git, obtendrá la raíz del repositorio para que podamos hacer referencia a la.git
ruta de la carpeta.# 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
fuente
Aquí hay una pequeña envoltura de git. Instálelo con el nombre
git
y con derechoschmod a+x git
. Luego agreguelast_successful_fetch
a.git/info/exclude
.Cuando quieras ver el resultado, usa
stat last_successful_fetch
.fuente
fuente
Según lo sugerido por el usuario: https://stackoverflow.com/users/83646/smoove , puede encontrar cuándo se llamó a git pull por última vez en el repositorio al verificar la marca de tiempo de modificación de: .git / FETCH_HEAD como: git escribe el .git / FETCH_HEAD cada vez que extrae o recupera, incluso si no hay nada que extraer.
Ejemplo: {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
fuente
stat -f %Sm .git/FETCH_HEAD
pero parece funcionar bien para mí.