working with upstream unable migrar information full from determine commands branches git git-svn git-gc

with - Git gc usa una memoria excesiva, no puede completar



migrate svn to git with branches (5)

Actualización final y solución : la solución aquí resultó ser una combinación de dos cosas: usar Windows Git en lugar de Cygwin Git como suggested Graham Borland , y la configuración de Git pack.threads = 1 y gc.aggressiveWindow = 150 .

Tengo un gran repositorio local de Git, un git svn clone de un repositorio SVN con aproximadamente 40,000 confirmaciones. Estoy tratando de ejecutar git gc sobre este repositorio, y llegar a ninguna parte:

$ git gc --auto Auto packing the repository for optimum performance. You may also run "git gc" manually. See "git help gc" for more information. Counting objects: 25966, done. Compressing objects: 100% (25249/25249), done. fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes) error: failed to run repack

Estoy ejecutando Git 1.7.5.1 dentro de Cygwin en una máquina Win7 de doble núcleo y 64 bits con 4 GB de RAM. El directorio .git actualmente tiene un poco más de 6.1GB.

He intentado ejecutar git gc --aggressive , para ver si el sistema más completo puede arreglarlo, pero no tuve suerte: recibí un mensaje similar al anterior, con el mismo tamaño que intenté malloc , pero un conteo de objetos considerablemente más alto (508,485 contados, 493,506 comprimidos).

También intenté, como lo sugirieron varios giros de Google, en la parte [pack] de mi archivo .gitconfig ; el ser más completo de otra pregunta de StackOverflow . Mi .gitconfig ahora tiene las siguientes líneas relevantes, pero su configuración parece no tener ninguna diferencia:

[pack] windowMemory = 16m threads = 1 window = 1 depth = 1 deltaCacheSize = 1

¿Alguna sugerencia sobre cómo puedo obtener git para gc mi repositorio?

Editar : Mark Longair suggested algunos cambios más en el archivo .gitconfig . Lo que hice, nuevas líneas a continuación. Pero los cambios no hicieron diferencia alguna.

[core] packedGitWindowSize = 1m packedGitLimit = 256m [pack] packSizeLimit = 128m

Editar 2 : Michael Krelin suggested aumentar el tamaño del archivo de intercambio / página (las instrucciones de WinXP here , y es similar para Win7). Intenté eso, pero no importó, y de hecho solo aumenté el tamaño máximo disponible, y parece que Windows nunca intentó aumentar el tamaño del archivo de página que estaba usando.

Ahora estoy viendo si esto fue causado por un límite de memoria dentro o impuesto a Cygwin. Para verificar "impuesta", intento ejecutar Cygwin con privilegios de administrador. Para marcar "dentro" (que parece más probable), estoy jugando con la configuración de memoria máxima de Cygwin .

Edición 3 : aunque prefiero usar Cygwin, resulta que el cliente de Windows Git maneja muy bien el problema de la memoria. Parece que voy a estar recurriendo a eso cada tanto cuando mi repositorio necesita una ordenada.


¿Tal vez la adición temporal de un archivo de intercambio más grande que la vida y el ir a tomar unas cuantas tazas de café a otra parte te ayudarán?


Algunas otras opciones de configuración que puede querer restringir a valores inferiores a los predeterminados incluyen:

  • pack.packSizeLimit
  • core.packedGitWindowSize
  • core.packedGitLimit

... todos los cuales están documentados en la documentación de git config . En particular, vale la pena comprobar en cada caso qué unidades se entienden, con lo que he cometido errores en el pasado.


Lo único que ayuda a evitar este error en el alojamiento compartido de Linux fue agregar

[pack] packSizeLimit = 64m threads = 1

a

.gitconfig

Lo más importante fue "hilos = 1"


Puede tener más suerte ejecutando un cliente nativo de Windows como msysGit , en lugar de intentar hacerlo dentro de Cygwin.


Tuve el mismo problema, intenté las soluciones mencionadas hasta ahora sin éxito. Pero mis problemas con git gc comenzaron después de que agregué archivos de imagen grandes al repositorio, así que creé el archivo .gitattributes y apagué la compresión delta para esos archivos grandes:

*.tga -delta *.psd -delta

Funcionó.