2012-02-08 18 views
5

Tengo un git repo con tres años de archivos binarios de PowerBuilder. El repositorio es bastante grande (algo menos de 10 GB), supongo que debido al hecho de que git solo puede hacer mucho por los deltas binarios.Desechando la vieja historia en git repo lleno de binarios

Me gustaría obtener este repositorio a un tamaño manejable, y estoy dispuesto a descartar un montón de historia temprana para hacerlo. No puedo entender cómo hacer que Git lo haga. Traté de aplastar commits con rebase interactivo, pero aparece un montón de conflictos con los que no quiero lidiar.

¿Hay alguna manera de elegir un compromiso, y simplemente desechar todo antes de eso? Me doy cuenta de que reescribirá el SHA-1 para confirmaciones posteriores, lo cual no es problema.

+0

Definitivamente podría compactar todas las confirmaciones anteriores utilizando una rebase y aplasta. Todavía estoy pensando en una forma elegante/rápida de hacerlo si tienes tantos compromisos. – TheBuzzSaw

Respuesta

0

Puede volver a establecer la base de todo el espectáculo en una sola confirmación.

Algo así como

git rebase -i [some early commit] 

y luego usando el modo de bloque visual en vim para aplastar casi todos ellos sería más fácil, seguido de un fsck y gc plazo.

O bien, puede usar git filter-branch para eliminar por completo las confirmaciones del árbol.

1

Esta es una (otra) forma:

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

El ejemplo anterior se llevará comete en rango master~5..master y crear nueva operación de eso. Puede usar el mismo repositorio también, pero lo anterior será más seguro.