2016-07-10 1 views
5

J'ai remarqué .git/log lors de la recherche où git enregistre stash commits. A conclu que:Quel est le but de .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 

Signification stash - est le seul fichier unique sous logs. Mais cela ne fait pas la lumière sur la raison d'être de ce dossier. Alors, quel est le but de .git/log et pourquoi git duplique les références?

Répondre

1

journaux enregistrements des modifications apportées à refs sont stockés dans ce répertoire. Voir git-update-ref 1 pour plus d'informations. Ce répertoire est ignoré si $ GIT_COMMON_DIR est défini et "$ GIT_COMMON_DIR/logs" sera utilisé à la place.

Référence: gitrepository-layout

1

Ce sont les "reflogs" qui enregistrent l'historique des différentes références référencées dans votre dépôt par le passé.

Voir git help reflog et la documentation pour -g, --walk-reflogs dans git help log.

Si vous aviez exécuté diff -r vous verriez beaucoup plus de différences car les fichiers refs/ contiennent tous un seul commit et logs/refs contiennent un fichier historique.

Notez que l'affichage du répertoire refs/ n'est généralement pas un bon moyen de rechercher des références dans votre référentiel. En plus d'être "lâche", les références peuvent également exister seulement dans packed-refs et ne pas avoir une entrée correspondante dans le répertoire refs/.

1

Le répertoire logs est l'emplacement où Git stocke le reflogs. Les reflets indiquent ce que vos références indiquaient plus tôt. Reflogs stocke le commit original même après un git commit --amend, git rebase, etc. Reflogs stocke un seul commit même après qu'un git pull tire dans des dizaines de commits. Les Reflogs facilitent l'annulation de certaines opérations.

Il est normal que les reflogs existent pour toutes les références que vous avez, et toutes les références que vous avez eues dans un passé récent. Vous avez eu un stash ref à un moment donné, grâce à l'utilisation de la commande git stash. Même si vous n'avez plus cette référence maintenant, le reflet se souvient. Cela vous permet par exemple d'annuler une suppression de branche accidentelle.