Cómo optimizar git update-index?

Tengo un repository bastante grande (11 GB, más de 900,000 files) y tengo problemas para iterar en un time razonable. Después de un poco de creación de perfiles, el verdadero cuello de botella parece ser git update-index:

$ time git update-index --replace $path > /dev/null real 0m5.766s user 0m1.984s sys 0m0.391s 

Eso hace que la cantidad de files sea insoportable. ¿Hay alguna manera de acelerar el funcionamiento del índice de actualización?

Por lo que vale, estoy ejecutando cygwin en Windows 7.

EDITAR: Para poner más context a la pregunta.

El repository grande proviene de una import SVN y contiene una cantidad de binarys que no deberían estar en el repository. Sin embargo, quiero mantener el historial de commit y los loggings de commit. Para hacer eso, estoy tratando de replace el contenido de los binarys con hash de files, lo que debería compactar el repository y permitirme conservar el historial.

Desea utilizar BFG Repo-Cleaner , una alternativa más rápida y sencilla a git-filter-branch específicamente diseñada para eliminar files grandes de repositorys Git.

Descargue el jar BFG (requiere Java 6 o superior) y ejecute este command:

 $ java -jar bfg.jar --strip-blobs-bigger-than 1MB my-repo.git 

Cualquier file de más de 1MB de tamaño (que no esté en su última confirmación) se eliminará del historial de su repository de Git y se replaceá por un file .git-id que contenga la antigua ID de hash Git del file original (que coincide con el replace el contenido de los binarys con el requisito de hashes de file de la pregunta).

A continuación, puede usar git gc para limpiar los datos muertos:

 $ git gc --prune=now --aggressive 

El BFG suele ser 10-50 veces más rápido que ejecutar git-filter-branch y las opciones se adaptan a estos dos casos de uso comunes:

  • Eliminando Crazy Big Files
  • Eliminar passwords, cnetworkingenciales y otros datos privados

Descripción completa: soy el autor de BFG Repo-Cleaner.

Intereting Posts