2016-07-10 12 views
5

Ho notato .git/log durante la ricerca in cui git salva lo stash commit. Ha rilevato che:Qual è lo scopo di .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 

Significato stash - è l'unico file univoco sotto logs. Ma non fa luce sulla logica di questa cartella. Quindi qual è lo scopo di .git/log e perché git duplica i riferimenti?

risposta

1

tronchi registrazioni delle modifiche apportate al arbitri sono memorizzati in questa directory. Vedere git-update-ref 1 per ulteriori informazioni. Questa directory viene ignorata se $ GIT_COMMON_DIR è impostato e verrà utilizzato "$ GIT_COMMON_DIR/logs".

Riferimento: gitrepository-layout

1

Sono i "reflog" che registrano la cronologia di dove vari riferimenti nel repository hanno indicato in passato.

Vedere git help reflog e la documentazione per -g, --walk-reflogs in git help log.

Se aveste eseguito diff -r vedreste molte più differenze dato che i file refs/ contengono tutti un singolo commit e logs/refs contengono un file di cronologia.

Nota che cercare la directory refs/, in generale, non è un buon modo per cercare i riferimenti nel tuo repository. Oltre ad essere "libero", i ref possono anche esistere solo in packed-refs e non hanno una voce corrispondente nella directory refs/.

1

La directory logs è dove Git memorizza reflogs. I Reflog indicano a cosa si riferivano i tuoi ref in qualche momento precedente. I Reflog memorizzano il commit originale anche dopo un git commit --amend, git rebase, ecc. I Reflog memorizzano un singolo commit anche dopo un prelievo di git pull in dozzine di commit. I Reflog facilitano l'annullamento di determinate operazioni.

È normale che i reflog esistano per tutti i refs che hai e tutti gli arbitri che hai avuto nel recente passato. Hai avuto un ref stash in qualche momento, tramite l'uso del comando git stash. Anche se ora non hai più questo riferimento, ricorda il reflog. Questo ti consente di annullare una cancellazione accidentale del ramo, ad esempio, anche.