Jak sprawdzić datę i godzinę ostatniego git pullwykonania? Często muszę wiedzieć, kiedy kod zmienił się na serwerze, gdy coś poszło nie tak.
Jak sprawdzić datę i godzinę ostatniego git pullwykonania? Często muszę wiedzieć, kiedy kod zmienił się na serwerze, gdy coś poszło nie tak.
Odpowiedzi:
Do git showpodaje 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 showpokazuje 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 showpowie 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/masterktóry z nich zmieni sygnaturę czasową, gdy git pullspowoduje to zmiany przychodzące ze zdalnej mastergałęzi, ale sygnatura czasowa nie zmieni się, gdy w git pullraportach 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_HEADdo [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.]
-cnie jest prawidłową opcją statdla 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 -gaby je wydrukować. Jeśli jednak spojrzysz na .git/logs/HEADprzykł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 @smoovesodpowiedzią: 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-topleveloznacza 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ą giti uprawnieniami chmod a+x git. Następnie dodaj last_successful_fetchdo .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_HEADale wydaje mi się, że działa dobrze.