2011-08-31 13 views
6

Si ejecuto un comando git grep veces, obtengo errores de aproximadamente 0,8 * n veces.¿Tiene errores git grep? ¿Desactiva la búsqueda paralela?

$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (bc9e3369c6d6f027075e794fa11db02af3f8fb38) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (b917adbfffd1928c8f6ac0f746a4fdfcf2088029) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd) 

Lo que he tratado

  1. Ejecutar como superusuario para evitar posibles problemas con las protecciones de archivos
  2. git fsck informes nada malo sólo un par de objetos sueltos
  3. clona el repositorio, sin errores en la clonación, pero git grep muestra el mismo comportamiento en el clon de nuevo.
  4. vistazo a algunos de los SHA1s mencionados al usar git cat-file, parece ser todo muy bien
  5. buscado en Google un poco

Los más interesantes de Google golpeó fue:

http://www.spinics.net/lists/git/msg164520.html

El mensaje era sólo 3 horas de edad Bueno, si tienen condiciones de carrera en git grep, eso podría explicar todo. Entonces, ¿buscan en paralelo en varios núcleos? (Tengo 4 aquí.) ¿Cómo podría desactivar eso, excepto arrancar toda la máquina con solo 1 núcleo?

$ git --version 
git version 1.7.3.4 

(Eso es lo que vino con OpenSUSE 11.4)

+0

(O compilando la actualización propuesta, o recompilando Git con NO_PTHREADS definido.) –

+0

Gracias, NO_PTHREADS parece útil. No estoy seguro de cuándo aparecerá el parche en la lista de correo en su repositorio (si es que lo hace). Actualmente necesito concentrarme un poco en mi trabajo y no tengo la intención de jugar con parches para las herramientas. –

+0

Parece que la próxima versión 1.7.8 incluirá el parche. –

Respuesta

0

Si es posible, la compilación de git con el parche propuesto parece solucionar el problema de la raza. Parece que no hay forma de desactivar la paralelización.

+0

La paralelización se puede deshabilitar con -DNO_PTHREADS durante la compilación como menciona Josh Lee. Lo hice compilando el paquete fuente de mi distribución (git-1.7.3.4) con esta bandera añadida. No tuve tiempo de probar el parche. –

1

Parece que cualquiera de las siguientes condiciones inhabilitará hilos en git-grep:

  • -O se da para abrir los archivos coincidentes en un buscapersonas.
  • NO_PTHREADS se define en tiempo de compilación.
  • -p aparece para mostrar el nombre de la función como contexto.

Afortunadamente, el último de estos será discreto para su flujo de trabajo.

+1

Gracias por la respuesta. La opción 1 no funciona en absoluto, -O solo está permitida para buscar en el área de trabajo. La opción 2 funciona. La opción 3 funciona, pero es un poco intrusiva (salida adicional, que es difícil de interpretar en mi caso) –