Jak sprawdzić datę i godzinę ostatniego git pull
wykonania? Często muszę wiedzieć, kiedy kod zmienił się na serwerze, gdy coś poszło nie tak.
Jak sprawdzić datę i godzinę ostatniego git pull
wykonania? Często muszę wiedzieć, kiedy kod zmienił się na serwerze, gdy coś poszło nie tak.
Odpowiedzi:
Do git show
podaje komunikat daty najnowszego popełnić. To nie jest data ściągnięcia zatwierdzenia do lokalnego repozytorium, ale Git nie przechowuje takich informacji o ściągnięciu.
Możesz być w stanie znaleźć czas ostatniego ściągnięcia za pomocą ctime (czasu utworzenia) plików na serwerze. Na przykład:
ls -lct
pokazuje ctime każdego pliku, posortowane od najnowszych jako pierwsze.
git show
pokazuje datę zatwierdzenia końcówki bieżącej gałęzi, co nie jest konieczne, ostatnie zatwierdzenie w repozytorium, nie mówiąc już o dacie ostatniego pobrania / ściągnięcia. Polecam też sprawdzić odpowiedź Smoove.
git show
powie ci, w którym zatwierdzeniu znajduje się twój lokalny klon. (Wiem, że to jest stare, ale znalazłem się tutaj przez wyszukiwanie).
stat -c %Y .git/FETCH_HEAD
Poda uniksowy znacznik czasu ostatniej modyfikacji tego pliku. Git zapisuje plik FETCH_HEAD za każdym razem, gdy ściągasz lub pobierasz, nawet jeśli nie było nic do ściągnięcia.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
który z nich zmieni sygnaturę czasową, gdy git pull
spowoduje to zmiany przychodzące ze zdalnej master
gałęzi, ale sygnatura czasowa nie zmieni się, gdy w git pull
raportach nie będzie żadnych zmian.
W pewnym sensie wypróbowałem „stat -c% y .git / FETCH_HEAD” i otrzymałem czytelny dla człowieka wydruk czasu:
> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500
Ponadto możesz dodać
when = !stat -c %y .git/FETCH_HEAD
do [alias]
sekcji w swoim pliku ~ / .gitconfig (najbezpieczniej jest to zrobić automatycznie, uruchamiając następującą linię poleceń w dowolnym repozytorium git)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
a następnie możesz znaleźć te informacje za pomocą nowego „polecenia” w dowolnym momencie:
> git when
2015-02-23 15:07:53.086254218 -0500
[Potem przyszło mi do głowy, żeby zrobić "man stat" i odkryłem, że jest kilka innych parametrów% dostępnych dla programu "stat". YMMV.]
-c
nie jest prawidłową opcją stat
dla komputerów Mac.
W repozytorium non-bare (i repozytorium gołym nie ma sensu git pull
), git rejestruje wszystkie zmiany we wskazówkach dotyczących gałęzi i bieżącej idei gałęzi w "reflogs" w formacie .git/logs
. Możesz je przeglądać za pomocą git log -g
.
Jednak chociaż pliki dziennika mają sygnatury czasowe, nie wydaje się, git log -g
aby je wydrukować. Jeśli jednak spojrzysz na .git/logs/HEAD
przykład, zobaczysz, że format jest dość prosty do przeanalizowania - składa się z tego, z czego zmienił się ref (lub HEAD), zmienił się na, kto go zmienił, kiedy i komunikat o aktywności.
Mocno zainspirowana @smooves
odpowiedzią: https://stackoverflow.com/a/9229377/622276 i komentarzami.
Ale utrzymuję własną integrację git z szybkim bash
Ze źródłem tutaj: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
wersja w Git Bash dla Windows działa identycznie jak wersja dla Linuksa.
Kompiluję opcje międzyplatformowe w instrukcji case. Więc rozwidli proces pobierania w każdym repozytorium git, do którego się przechodzę, starszym niż piętnaście minut od ostatniego pobierania, więc reszta mojego skryptu zachęty wie, czy mam coś do ściągnięcia.
Radar Git kiedyś to robił, ale wymagał zapisania pliku z sygnaturą czasową, kiedy wywołano ostatnie pobieranie. To nie zapisuje plików tymczasowych.
git rev-parse --show-toplevel
oznacza tylko, że jeśli jestem w dowolnym miejscu w repozytorium git, otrzyma katalog główny repozytorium, abyśmy mogli odwołać się do .git
ścieżki folderu.
# 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
Oto małe opakowanie gita. Zainstaluj go z nazwą git
i uprawnieniami chmod a+x git
. Następnie dodaj last_successful_fetch
do .git/info/exclude
.
Jeśli chcesz zobaczyć wynik, użyj 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]
Zgodnie z sugestią użytkownika: https://stackoverflow.com/users/83646/smoove , możesz sprawdzić, kiedy git pull był ostatnio wywoływany w repozytorium, sprawdzając sygnaturę czasową modyfikacji: .git / FETCH_HEAD as: git zapisuje .git / Plik FETCH_HEAD za każdym razem, gdy ściągasz lub pobierasz, nawet jeśli nie było nic do ściągnięcia.
Przykład: {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
stat -f %Sm .git/FETCH_HEAD
ale wydaje mi się, że działa dobrze.