Ho alcuni commit creati da git subtree
che voglio avere garbage collection (più che qualsiasi scopo pratico solo per capire cosa e perché può essere raccolto).Garbage Collect impegna in git
ho già verificato che questi si impegna a non fanno riferimento le seguenti modalità:
# In any reflog
> git reflog --all --no-abbrev-commit | grep <hash>
(no output)
# In any branch, local or remote
> git branch --contains <hash>
(no output)
> git branch -r --contains <hash>
(no output)
# In any tag
> git tag --contains <hash>
(no output)
# In the current index
> git rev-list HEAD | grep <hash>
(no output)
# In references from filter-branch
> ls .git/refs/original/
(the folder does not exist)
Questi sono il luogo che git gc documentation liste che potrebbero contenere riferimenti.
Ancora il commit specificato esiste ancora dopo git gc
.
Mi manca qualcosa? O c'è qualche comando di git plumbing che controlla tutti questi riferimenti?
Eccellente, quello che mancava era il reimballaggio. Anche gli oggetti non raggiungibili non saranno disposti se sono impacchettati con oggetti raggiungibili. Quindi il 'repack' li separa e quindi' git prune' o 'git gc' li eliminerà correttamente. – LopSae
Anche quando si utilizza 'git prune', il mio repository aveva ancora oggetti liberi. Se si verifica ciò, 'git gc' doc indica che prova * molto duramente * per essere sicuro e mantiene possibili riferimenti. Assicurati di pulire/refs,/logs, FETCH_HEAD e altra cache che potresti trovare nella tua cartella .git. Quindi rieseguire 'git gc --prune = now' farà il trucco. – jsgoupil