2012-06-13 11 views

risposta

15

Edit: Naturalmente, la semplice, ovvia e più -engineering free answer è git status, come kostixnotes. Lo svantaggio di questo è che git status controlla lo stato dell'indice rispetto alla copia di lavoro, che è lenta, mentre il sotto controlla solo l'indice, un'operazione molto più veloce.

Per ottenere i nomi dei file in conflitto, utilizzare git ls-files --unmerged.

$ git ls-files --unmerged 
100755 f50c20668c7221fa6f8beea26b7a8eb9c0ae36e4 1  path/to/conflicted_file 
100755 d0f6000e67d81ad1909500a4abca6138d18139fa 2  path/to/conflicted_file 
100755 4cb5ada73fbe1c314f68c905a62180c8e93af3ba 3  path/to/conflicted_file 

Per facilità, ho il seguente nel mio file ~/.gitconfig (Non posso affermare di credito, ma non riesco a ricordare la fonte originale):

[alias] 
    conflicts = !git ls-files --unmerged | cut -f2 | sort -u 

Questo mi dà:

$ git conflicts 
path/to/conflicted_file 

per calcolare il numero di conflitti in un unico file, mi basta usare grep per la ======= parte del marcatore conflitto:

$ grep -c '^=======$' path/to/conflicted_file 
2 

Si potrebbe aggiungere il seguente al vostro ~/.gitconfig così come la linea conflicts sopra:

[alias] 
    count-conflicts = !grep -c '^=======$' 
    count-all-conflicts = !grep -c '^=======$' $(git conflicts) 

Questo vi darà:

$ git conflicts 
path/to/a/conflicted_file 
path/to/another/different_conflicted_file 

$ git count-conflicts path/to/a/conflicted_file 
2 

$ git count-all-conflicts 
5 
1

git status mostra i file che sono non sono riusciti a essere uniti automaticamente e hanno conflitti, con il suggerimento di come registrare lo stato risolto di tali file.

+0

Sì, ma ... c'è qualche opzione per mostrare * solo * file in conflitto? – shytikov

+0

@AlexeyShytikov, non so a priori, ma dal manuale sembra che 'git status --short' sia in grado di codificare lo stato di ogni file elencato usando due caratteri - guarda la sezione" Short Format ". Penso che sia possibile racchiudere una chiamata a 'git status --short' in uno script di shell che renderebbe' sed' o 'grep' solo i bit di output rilevanti. – kostix

+1

D'altra parte, la risposta @me_and ha richiesto lo scripting in ogni caso, quindi potrebbe essere più logico prendere il suo approccio (e quindi implementare il proprio comando di porcellana). – kostix

0

Ecco qualcosa di utile che funziona su bash 4. È possibile aggiungere tutti i tipi di statistiche di file singoli a questo, ad es. il numero di righe di codice che rappresentano il numero di conflitti.

#!/usr/bin/env bash 

shopt -s globstar 
for theFile in ./**/*; do 
    if [ -f "$theFile" ] 
    then 
     conflicts=`grep -c '^=======$' "$theFile"` 
     if [ "$conflicts" != "0" ] 
      then 
      echo "$theFile $conflicts" 
     fi 
    fi 
done 
Problemi correlati