2011-02-02 19 views
5

Estoy tratando de dividir un git repo usando la receta described in this question, pero el git repo en cuestión es enorme y tiene miles de confirmaciones, por lo que el límite de línea de comando entra cuando intento ejecutar el comando como se describe y el filtro de confirmación falla. Si trato de hacerlo en etapas (primero aplicando filtro de índice, luego confirmo el filtro), el filtro de índice funciona bien, pero el filtro de compromiso se atasca y comienza a usar grandes cantidades de memoria (3G +), así que tengo que matarlo. ¿Alguna idea de cómo hacer esto? Tal vez estoy haciendo algo mal aquí?Dividir enorme repo git

Para aquellos que no leen la otra pregunta, la tarea es dividir dos directorios de un repositorio git muy grande en otro repositorio, conservando el historial que pertenece a estos directorios.

Respuesta

4

creo que esto se ha añadido desde que escribí esa respuesta:

--prune-empty

Algún tipo de filtros generarán confirmaciones vacías, que dejó el árbol sin tocar. Este interruptor permite a git-filter-branch ignorar tales commits. Sin embargo, este cambio solo se aplica a las confirmaciones que tienen uno y solo uno de los padres, por lo tanto, mantendrá los puntos de fusión. Además, esta opción no es compatible con el uso de --commit-filter. Aunque solo necesitas usar la función git_commit_non_empty_tree "$ @" en lugar de la expresión git commit-tree "$ @" en tu filtro de commit para que eso suceda.

Así que pruébalo con git filter-branch --index-filter '...' --prune-empty, ya que es solo el filtro de compromiso de mi otra respuesta que te estaba causando problemas.

+0

parece que esto hizo el truco, gracias! – StasM