Zastanawiam się, czy istnieje sposób, aby wyświetlić datę wypychania związaną z każdym zatwierdzeniem w dzienniku git. Jeśli nie jest to możliwe, czy istnieje sposób, aby zobaczyć wszystkie zatwierdzenia pod pewnym naciskiem.
Piszę program, który musi śledzić zmiany w momencie ich wypychania. Ponieważ dziennik git jest uporządkowany według daty zatwierdzenia, a nie daty wypychania, nie mogę zobaczyć najnowszych zatwierdzeń, które są wypychane. Na przykład, jeśli użytkownik zatwierdza swoje lokalne repozytorium 2 dni przed wypchnięciem do głównego, to zatwierdzenie zostanie umieszczone za 2 dniami innych zatwierdzeń w dzienniku głównego repozytorium.
git reflog --date=local origin/master
(uwagaorigin/
), aby zobaczyć listę wypchnięć. W przeciwnym razie na liście znajdowały się tylko commits, checkouts i pulls (co też jest przydatne). Właściwie wskazała na to odpowiedź @ JonathanDay .Git jest rozproszonym systemem kontroli wersji, więc musisz dokładnie zdefiniować, co rozumiesz przez „datę wypychania”. Na przykład załóżmy, że użytkownik A wypycha niektóre zatwierdzenia do repozytorium użytkownika B. Jakiś czas później użytkownik B wypycha te same zatwierdzenia do trzeciego repozytorium. Która data Cię interesuje?
Spekuluję, że masz współdzielone repozytorium i chcesz, aby użytkownicy tego współużytkowanego repozytorium mogli określić, kiedy coś zostało opublikowane w repozytorium. Jeśli to prawda, musisz zebrać te informacje w udostępnionym repozytorium.
Złe wiadomości
Niestety, nie ma możliwości dodania daty do komunikatów o zmianach. To zmieniłoby identyfikator zatwierdzenia (który jest skrótem SHA1 zawartości), powodując różnego rodzaju problemy.
Dobre wieści
Na szczęście Git ma (stosunkowo nową) funkcję o nazwie notatki . Ta funkcja umożliwia dołączanie dowolnego tekstu do zatwierdzeń, które
git log
mogą być wyświetlane. Notatki można edytować i udostępniać innym.Możesz użyć funkcji notatek, aby dołączyć wiadomość „to zatwierdzenie otrzymano w dniu [data]” do każdego zatwierdzenia otrzymanego przez współdzielone repozytorium.
Zobacz
git help notes
szczegóły.Jak zapisać datę
Oto podejście, które polecam:
post-receive
zaczepienia we współdzielonym repozytorium, aby przechodzić przez każde nowo osiągalne zatwierdzenie dla każdego zaktualizowanego odniesienia.Dla każdego zatwierdzenia dodaj coś w rodzaju „[użytkownik] z [repository_url] dodał to zatwierdzenie do [ref] dnia [data]” do notatki dotyczącej zatwierdzenia.
Możesz użyć przypisu przypisanego do tego celu (np.
refs/notes/received-on
) Zamiast domyślnegorefs/notes/commits
. Zapobiegnie to konfliktom z notatkami utworzonymi do innych celów.receive
haczyk, aby odmówić aktualizacji odniesienia do notatek (aby uniemożliwić użytkownikom przypadkowe lub celowe manipulowanie notatkami).Powiedz wszystkim użytkownikom, aby uruchomili następujące polecenia z poziomu ich drzewa roboczego:
Ten krok jest konieczny, ponieważ Git domyślnie ignoruje niezwiązane z odgałęzieniami odniesienia bez tagów w nadrzędnych repozytoriach.
Powyższe zakłada, że odniesienia są tylko zaawansowane, nigdy nie są usuwane ani aktualizowane na siłę. Prawdopodobnie będziesz chciał, aby
post-receive
hak dołączył również notatki „usunięto dnia [data]”, aby obsłużyć te przypadki.źródło
Wydaje mi się, że to działa całkiem nieźle. Data inicjatora (% cd) jest myląca, ponieważ niekoniecznie jest taka sama jak data wypychania. Jednak opcja --date = iso wyświetli datę wypychania / pobierania .
Uwaga, jeśli pobrałeś z pochodzenia / wzorca, wydrukuje datę pobrania; NIE data, kiedy ktoś inny wprowadził zobowiązanie.
Bonus: możesz oczywiście zrobić ładniejsze formatowanie. Jak dotąd podoba mi się to kodowanie kolorami. Jednak jest to trochę za dużo do pisania. Spowoduje to wyjście SHA na kolor czerwony, selektor reflog na cyjan i reflog na kolor zielony.
źródło
Spójrz na
git reflog show master
. Prawdopodobnie nie jest to dokładny format, który chcesz, ale powinien wskazywać właściwy kierunek.Innym pomysłem jest uruchomienie skryptu wewnątrz haka push.
źródło
git reflog show master
? Chcę mieć możliwość przeglądania dat wypychania poszczególnych zatwierdzeń każdego użytkownika..git/logs/refs/heads/master
pokazuje on znacznik czasu.git reflog
tej sprawy.Ta odpowiedź dotycząca sprawdzenia reflogu na pilocie może pomóc ( https://stackoverflow.com/a/8791295/336905 ), podając informacje o tym, która gałąź została przepchnięta nawet przez nią, nie pokazuje, które zatwierdzenia zostały wysłane, ale ty może przeprowadzić korelację krzyżową, znajdując następne wypychanie po dacie lokalnego zatwierdzenia. Nie jest niezawodny, ale przydatny, jeśli nie wdrożyłeś jeszcze doskonałej sugestii dotyczącej notatek z @RichardHansen opublikowanej wcześniej
źródło
origin/branch
pokaże tylko zmiany dokonane na bieżącej maszynie, jest to niezwykle przydatne! Do codziennego użytku nie chcę wprowadzać żadnych haczyków, więc dla prostego pytania „Hmmm, kiedy w zeszłym tygodniu naciskałem na to zatwierdzenie?” - działa świetnie.Możesz również spojrzeć na czas modyfikacji pliku obiektu zatwierdzania w katalogu "objects" w repozytorium git na samym serwerze.
źródło
Dlaczego git AuthorDate różni się od CommitDate?
AuthorDate
to moment, w którym zatwierdzenie zostało utworzone po raz pierwszy.CommitDate
to data ostatniej modyfikacji zatwierdzenia (np. rebase).Możesz je uzyskać z
--pretty
opcjami formatowania:Tak więc, jeśli ty i inni programiści robiliście to
git rebase
wcześniejgit push
, w końcu data zatwierdzenia będzie późniejsza niż data autora .To polecenie pokazuje datę zatwierdzenia:
git log --pretty=fuller
źródło
Myślę, że możesz użyć następnej notacji, aby uzyskać datę wypychania: git log -g --date = local
źródło