2012-02-08 19 views
5

Ho un repository git con tre anni di file binari PowerBuilder. Il repository è abbastanza grande (poco meno di 10 GB), presumo dovuto al fatto che git può fare solo così tanto per i delta binari.Lanciare una vecchia storia su git repo pieno di binari

Mi piacerebbe avere questo repository a una dimensione gestibile, e sono disposto a buttare via un po 'di storia antica per farlo. Non riesco proprio a capire come ottenere git a farlo. Ho provato a schiacciare i commit con rebase interattivo, ma mi viene fuori un sacco di conflitti che non voglio affrontare.

C'è un modo per scegliere un commit e buttare via tutto prima? Mi rendo conto che riscriverà l'SHA-1 per i commit successivi, il che non è un problema.

+0

È sicuramente possibile compattare tutti i commit precedenti utilizzando un rebase e squash. Sto ancora pensando a un modo elegante/veloce per farlo se hai così tanti impegni. – TheBuzzSaw

risposta

0

È possibile rebase l'intero show in un singolo commit.

Qualcosa di simile

git rebase -i [some early commit] 

e quindi utilizzando la modalità blocco visivo in vim di schiacciare quasi tutti sarebbe più semplice, seguita da una corsa fsck e gc.

In alternativa, è possibile utilizzare git filter-branch per rimuovere completamente i commit dall'albero.

1

Questa è una (altra) modo:

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout) 

L'esempio di cui sopra avrà impegna nella gamma master~5..master e di crearne nuovi repo fuori di quella. Puoi anche usare lo stesso repo, ma quanto sopra sarà più sicuro.