2011-08-31 26 views
6

Se eseguo il comando git grep n volte, ottengo errori circa 0,8 * n volte.git grep buggy - disabilita la ricerca parallela?

$ 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) 

Quello che ho provato

  1. corsa come superutente per escludere eventuali problemi con le protezioni di file
  2. git fsck rapporti nulla di male solo un paio di oggetti pendenti
  3. clonato il repo, nessun errore su clonazione, ma git grep mostra di nuovo lo stesso comportamento nel clone.
  4. sguardo ad alcune delle SHA1s riportati utilizzando git cat-file, sembrano essere tutti bene
  5. Googled un po

Il più interessante di Google ha colpito è stato:

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

Il messaggio era solo 3 ore di età. Bene, se hanno condizioni di gara nel git grep, questo potrebbe spiegare tutto. Quindi fanno ricerche in parallelo su diversi core? (Ne ho 4 qui.) Come potrei disattivarlo, a meno dell'avvio dell'intera macchina con solo 1 core?

$ git --version 
git version 1.7.3.4 

(Questo è quello che è venuto con OpenSUSE 11.4)

+0

(Oppure compilare l'aggiornamento proposto o ricompilare Git con NO_PTHREADS definito.) –

+0

Grazie, NO_PTHREADS sembra utile. Non sono sicuro quando la patch sulla mailing list apparirà nel loro repository (se non del tutto). Attualmente ho bisogno di concentrarmi un po 'sul mio lavoro e non ho intenzione di giocare con le patch per gli strumenti. –

+0

Sembra che la prossima versione 1.7.8 includa la patch. –

risposta

0

Se è possibile, compilando git con la patch proposta sembra per risolvere il problema gara. Sembra che non ci sia modo di disattivare la parallelizzazione.

+0

La parallelizzazione può essere disabilitata con -DNO_PTHREADS durante la compilazione come menzionato da Josh Lee. L'ho fatto semplicemente compilando il pacchetto sorgente dalla mia distribuzione (git-1.7.3.4) con questo flag aggiunto. Non ho avuto il tempo di provare la patch. –

1

Sembra che una delle seguenti condizioni consente di disattivare thread in git-grep:

  • -O è data per aprire i file corrispondenti a un cercapersone.
  • NO_PTHREADS è definito in fase di compilazione.
  • -p viene fornito per mostrare il nome della funzione come contesto.

Speriamo che l'ultimo di questi sarà discreto per il tuo flusso di lavoro.

+1

Grazie per la risposta. L'opzione 1 non funziona affatto, -O è consentito solo per la ricerca nell'area di lavoro. L'opzione 2 funziona. L'opzione 3 funziona, ma è un po 'invadente (output aggiuntivo, che è difficile da interpretare nel mio caso) –