2009-04-02 12 views
8

sto usandocome posso rimuovere gli oggetti indesiderati dal mio repo dopo filtro-ramo --subdirectory-filtro

git filter-branch --subdirectory-filter dir/name -- --all 

per costruire un repo che ha solo la storia relativa a tale dir/nome. Prima di fare il filtro, clone il repository originale (che è molto più grande) in una directory tmp. Dopo il branch-branch, il repository appare esattamente come lo voglio io, con un'eccezione: sembra che contenga ancora tutti gli oggetti dal repository originale anche se non sono mostrati in "git log".

Come rimuovere completamente tutti gli oggetti indesiderati?

Ho provato cose come:

git reflog expire --expire=now --all 
git gc --aggressive --prune=now 

E 'chiaro per me che io non so perché sono ancora lì o che cosa significa per rimuoverli, ma mi piacerebbe certamente a. Un po 'di informazioni potenzialmente correlate che funzionano contro di me è che ho fatto un repack git -a sul mio repository sorgente qualche tempo fa e sembra che copi quel pacchetto nel nuovo repository. Sembra che dovrei essere ancora in grado di fare ciò che voglio però.

risposta

11

filtro-ramo mantiene anche arbitri di backup in .git/refs/originale, che dovrete anche per rimuovere prima di gc'ing

+2

Se è così semplice ho intenzione di essere un po 'seccata. Sono letteralmente rm .git/refs/originale? – jettero

+0

Beh, rm-ing funziona davvero (anche se c'è un modo migliore) e questo risponde totalmente alla mia domanda, grazie. – jettero

+2

'rm' funziona solo se GC non è stato eseguito, poiché GC sposta' refs' in 'packed-refs'. Il modo giusto per rimuovere i ref originali da git-filter-branch sarebbe 'git for-each-ref --format ="% (refname) "refs/original/| xargs -n 1 git update-ref -d', come indicato nella [documentazione di git-filter-branch] (http://git-scm.com/docs/git-filter-branch). @jettero – user

Problemi correlati