Git – ¿el recolector de basura puede correr en paralelo?

Tengo un progtwig C enhebrado que inicia git gc via popen en un submenu junto a la aplicación principal. El hilo principal lanza otros commands git.

No hay problemas para la mayoría de los otros commands de git, excepto cuando confirmo a través de git commit -m "msg" .

Por alguna razón, mientras se está confirmando y luego el otro subprocess intenta ejecutar el recolector de elementos no utilizados en paralelo, la aplicación se bloquea.

Sin embargo, hacer un commit de git y un git gc en la terminal al mismo time a través de git gc &! git commit -m "msg" & git gc &! git commit -m "msg" & parece funcionar la mayor parte del time, pero algunas veces el process de confirmación sale con el código de salida 128.

¿Tal vez éste es el problema? ¿Cómo me aseguro de que el recolector de basura se ejecute correctamente en paralelo? ¿Está previsto que el recolector de basura funcione en paralelo?

Encontré este hilo de la list de correo también, pero no parece ser demasiado informativo: https://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02138.html

A less que estés haciendo git commit --amend manipulaciones de git como git commit --amend o git rebase o crear muchos objects, lanzar git gc tanta frecuencia es inútil. Por favor, eche un vistazo al git gc NOTAS :

Por otro lado, cuando git gc ejecuta simultáneamente con otro process, existe el riesgo de que elimine un object que el otro process está utilizando pero no ha creado una reference. Esto puede provocar que el otro process falle o corrompa el repository si el otro process agrega una reference posterior al object eliminado.

¿Tal vez en lugar de lanzar git gc en paralelo, debería ajustarlo a sus necesidades? La configuration se realiza con git config gc.* , En particular gc.auto .