2016-07-10 26 views
5

Zauważyłem, .git/log podczas wyszukiwania, gdzie git zapisuje skrytki zatwierdza. Stwierdzono, że:Jaki jest cel .git/log

$ ls .git/logs/ 
HEAD  refs 
$ diff .git/refs/ .git/logs/refs/ | head -n3 
Common subdirectories: .git/refs/heads and .git/logs/refs/heads 
Common subdirectories: .git/refs/remotes and .git/logs/refs/remotes 
diff .git/refs/stash .git/logs/refs/stash 

Znaczenie stash - to jedyny niepowtarzalny plik pod logs. Ale nie rzuca to światła na racjonalne uzasadnienie tego folderu. Więc jaki jest cel .git/log i dlaczego git duplikuje odniesienia?

Odpowiedz

1

kłody Ewidencja zmian dokonanych w odn są przechowywane w tym katalogu. Więcej informacji można znaleźć w git-update-ref 1. Ten katalog jest ignorowany, jeśli ustawiona jest opcja $ GIT_COMMON_DIR, a zamiast niej zostanie użyty "GIT_COMMON_DIR/logs".

referencyjny: gitrepository-layout

1

Są to "reflogi", które rejestrują historię, w której w przeszłości wskazywały różne odniesienia w repozytorium.

Zobacz git help reflog i dokumentację dla -g, --walk-reflogs w git help log.

Po uruchomieniu diff -r zobaczysz znacznie więcej różnic, ponieważ pliki refs/ zawierają tylko jeden commit, a logs/refs zawierają plik historii.

Należy zauważyć, że przeglądanie katalogu refs/ nie jest dobrym sposobem wyszukiwania informacji w repozytorium. Oprócz tego, że są "luźne", refs może istnieć tylko w packed-refs i nie ma odpowiedniego wpisu w katalogu refs/.

1

Katalog logs to miejsce, w którym Git przechowuje numer reflogs. Reflogs wskazują, na co wskazywał twój punkt odniesienia w jakimś wcześniejszym momencie. Reflogs przechowuje oryginalny commit nawet po git commit --amend, git rebase itd. Reflogs przechowuje jeden commit nawet po tym, jak git pull ściąga dziesiątki zatwierdzeń. Reflogi ułatwiają cofanie pewnych operacji.

To normalne, że reflogi istnieją dla wszystkich dokumentów, które posiadasz, i wszystkich dokumentów, które otrzymałeś w niedawnej przeszłości. Od pewnego czasu otrzymałeś referencję stash, korzystając z polecenia git stash. Nawet jeśli nie masz już tego ref, teraz pamiętasz reflog. Pozwala to na przykład cofnąć przypadkowe usunięcie gałęzi.