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.
91
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).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.
źródło
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ą, gdygit pull
spowoduje to zmiany przychodzące ze zdalnejmaster
gałęzi, ale sygnatura czasowa nie zmieni się, gdy wgit 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:
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)a następnie możesz znaleźć te informacje za pomocą nowego „polecenia” w dowolnym momencie:
[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.]
źródło
-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.źródło
źródło
Użyj Pythona:
python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
źródło
lub
źródło
Rozwiązanie Bash dla wielu platform (OSX / Linux)
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
źródło
Oto małe opakowanie gita. Zainstaluj go z nazwą
git
i uprawnieniamichmod a+x git
. Następnie dodajlast_successful_fetch
do.git/info/exclude
.Jeśli chcesz zobaczyć wynik, użyj
stat last_successful_fetch
.źródło
źródło
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
źródło
stat -f %Sm .git/FETCH_HEAD
ale wydaje mi się, że działa dobrze.