2016-07-10 9 views
5

Ich habe bemerkt, .git/log bei der Suche, wo Git Stash Commits speichert. Fanden heraus, dass:Was ist der Zweck von .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 

Bedeutung stash - die einzige eindeutige Datei unter logs ist. Aber es erklärt nicht die Gründe für diese Mappe. Also, was ist der Zweck von .git/log und warum Git Duplikate Referenzen?

Antwort

1

Protokolle Aufzeichnungen von Änderungen an Refs gemacht werden in diesem Verzeichnis gespeichert. Weitere Informationen finden Sie unter git-update-ref 1. Dieses Verzeichnis wird ignoriert, wenn $ GIT_COMMON_DIR gesetzt ist und stattdessen "$ GIT_COMMON_DIR/logs" verwendet wird.

Referenz: gitrepository-layout

1

Sie sind die "Reflogs", die die Geschichte von wo verschiedene Referenzen in Ihrem Repository in der Vergangenheit gezeigt haben, aufzeichnen.

Siehe git help reflog und die Dokumentation für -g, --walk-reflogs in git help log.

Wenn Sie diff -r ausgeführt hätten, würden Sie viele weitere Unterschiede sehen, da die Dateien alle ein einzelnes Festschreiben enthalten und logs/refs eine Verlaufsdatei enthalten.

Beachten Sie, dass das Verzeichnis refs/ im Allgemeinen keine gute Möglichkeit ist, nach Referenzen in Ihrem Repository zu suchen. Die Refs können nicht nur "loose" sein, sondern auch nur in packed-refs existieren und keinen entsprechenden Eintrag im Verzeichnis refs/ haben.

1

In dem Verzeichnis logs speichert Git die reflogs. Reflogs zeigen an, worauf Ihre Refs zu einem früheren Zeitpunkt hingewiesen haben. Reflogs speichern das Original-Commit auch nach einem git commit --amend, git rebase, etc. Reflogs speichern ein einzelnes Commit, auch nachdem ein git pull Dutzende von Commits zieht. Reflogs machen es leicht, bestimmte Operationen rückgängig zu machen.

Es ist normal, dass Reflogs für alle Refs, die Sie haben, und für alle Refs, die Sie in der Vergangenheit hatten, existieren. Sie haben eine stash Ref zu irgendeinem Zeitpunkt, unter Verwendung des Befehls git stash. Auch wenn Sie diese Ref nicht mehr haben, erinnert sich der Reflog. So können Sie beispielsweise auch eine versehentliche Löschung von Zweigen rückgängig machen.