2012-06-13 16 views

Odpowiedz

15

Edytuj: Oczywiście, proste, oczywiste i ponad - bezpłatna odpowiedź inżynieryjna to git status, jako kostixnotes. Wadą tego jest to, że git status sprawdza stan indeksu w porównaniu z kopią roboczą, która jest wolna, podczas gdy poniżej sprawdza tylko indeks, znacznie szybszą operację.

Aby uzyskać nazwy plików, które są w konflikcie, należy użyć 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 

Dla ułatwienia, mam następujących w moim pliku ~/.gitconfig (I nie może twierdzić, kredyt, ale nie pamiętam oryginalnego źródła):

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

To daje mi:

$ git conflicts 
path/to/conflicted_file 

Aby wypracować liczby konfliktów w jednym pliku, to bym po prostu użyć grep dla ======= części markera konfliktu:

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

Można dodać następujące wpisy do ~/.gitconfig jak również linii conflicts powyżej:

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

To daje:

$ 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 pokazuje pliki, które udało się zostać połączone automatycznie i mają konflikty, z podpowiedziami, jak zarejestrować stan rozstrzygnięcia takich plików.

+0

Tak, ale ... czy istnieje przełącznik powodujący wyświetlanie tylko * konfliktowych plików? – shytikov

+0

@AlexeyShytikov, nie wiem od ręki, ale z instrukcji, wygląda na to, że 'git status --short' jest w stanie zakodować status każdego pliku wymienionego za pomocą dwóch znaków - spójrz na sekcję" Krótki format ". Myślę, że możliwe jest zawinięcie wywołania do 'git status --short' w skrypcie powłoki, który 'sed' lub' grep' tylko odpowiednie bity wyjścia. – kostix

+1

Z drugiej strony, odpowiedź @me_anddodała i tak wymaga skryptowania, więc może być bardziej logiczne, aby przyjąć jego podejście (i tym samym zaimplementować własne polecenie porcelany). – kostix

0

Oto coś użytecznego, które działa na bash 4. Możesz do tego dodać wszystkie rodzaje statystyk pojedynczego pliku, np. liczba linii kodu reprezentujących liczbę konfliktów.

#!/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