2011-02-02 21 views
5

Sto provando a dividere un repository git usando la ricetta described in this question, ma il repository git in questione è enorme e ha migliaia di commit, quindi il limite della riga di comando interviene quando provo a eseguire il comando come descritto e il filtro commit fallisce. Se provo a farlo a tappe (prima applicazione del filtro indice, poi del filtro commit), il filtro indice funziona bene, ma il filtro commit rimane bloccato e inizia a utilizzare enormi quantità di memoria (3G +), quindi devo ucciderlo. Qualche idea su come fare questo? Forse sto facendo qualcosa di sbagliato qui?Splitting enorme git repo

Per coloro che non leggono l'altra domanda, il compito è quello di dividere un paio di directory da un repo git molto grande in un altro repository, preservando la storia che riguarda queste directory.

risposta

4

Penso che questo è stato aggiunto da quando ho scritto quella risposta:

--prune-empty

Alcuni tipi di filtri genereranno commit vuote, che ha lasciato l'albero intatto. Questa opzione consente a git-filter-branch di ignorare tali commit. Tuttavia, questa opzione si applica solo ai commit che hanno uno e un solo genitore, quindi manterrà i punti di unione. Inoltre, questa opzione non è compatibile con l'uso di --commit-filter. Anche se hai solo bisogno di usare la funzione git_commit_non_empty_tree "$ @" al posto del git commit-tree "$ @" idiom nel tuo filtro commit per farlo accadere.

Quindi provatelo con git filter-branch --index-filter '...' --prune-empty, poiché è solo il filtro di commit nella mia altra risposta che vi stava dando problemi.

+0

sembra che questo ha fatto il trucco, grazie! – StasM