2012-03-29 10 views
42

„git diff --stat” i „log git --stat” pokazuje takie rzeczy jak:Czy istnieje sposób dodawania linii pokazu git, linii zmienionych i usuniętych linii?

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 
app/controllers/application_controller.rb | 34 +++------------------------- 
1 files changed, 4 insertions(+), 30 deletions(-) 

Ale to, co naprawdę wydarzyło się w commit że było to 4 linie zostały zmienione i 26 linie zostały usunięte, która jest inna niż dodanie 4 linii i usunięcie 30.

Czy istnieje sposób na uzyskanie LOC-ów delta (w tym przypadku 26)? Nie zależy mi na rozróżnianiu linii dodanych lub usuniętych.

Odpowiedz

45

Można użyć:

git diff --numstat 

uzyskać informację liczbową diff.

Jeśli chodzi o oddzielanie modyfikacji od pary dodawania i usuwania, pomocna może być --word-diff. Możesz wypróbować coś takiego:

MOD_PATTERN='^.+(\[-|\{\+).*$' 
ADD_PATTERN='^\{\+.*\+\}$' 
REM_PATTERN='^\[-.*-\]$' 
git diff --word-diff --unified=0 | sed -nr \ 
    -e "s/$MOD_PATTERN/modified/p" \ 
    -e "s/$ADD_PATTERN/added/p" \ 
    -e "s/$REM_PATTERN/removed/p" \ 
    | sort | uniq -c 

To trochę rozwlekły sposób, więc zamiast tego możesz go przetworzyć w swoim własnym skrypcie.

+0

Dzięki quornian ale numstat daje dokładnie takie same informacje jak stat, uzupełnień i skreśleń . –

+0

Zaktualizowałem moją odpowiedź, aby dołączyć przykład użycia '--word-diff'. To może być bardziej przydatne. – quornian

+0

Dzięki! Twoja edytowana odpowiedź jest świetna. Chciałem zobaczyć, ile linii zostało dodanych/zmodyfikowanych/usuniętych między dwoma określonymi zatwierdzeniami. Dla innych, którzy mogą chcieć zrobić to samo, po prostu umieść nazwy oddziałów w poleceniu, jak w: 'git diff commit1 commit2 - word-diff ...' gdzie commit1/2 to SHA1, gałęzie, tagi itp. –

1

git używa "ujednoliconego" pliku różnic, który tylko dodał i usunął wiersze, jako format różnicowy. Musisz zrobić coś zewnętrznego, aby uzyskać różnicę, która pokazuje dodawanie, usuwanie i zmienianie informacji.

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git podaje linki do skryptu, który pozwala na uruchamianie zwykłego starego "diff" - i z tego można wygenerować wyjście "context" diff. Różnica kontekstowa pokazuje dodane, usunięte i zmienione linie, co powinno umożliwić uzyskanie żądanych danych.

13
  1. Jeśli chcesz wiedzieć, wiersze dodane/zmienione/usunięte przez commit z id commit-id, można użyć

    git show commit-id --stat 
    

    lub

    git diff commit-id-before commit-id --stat 
    
  2. Jeśli wat znać linie dodane/zmienione/usunięte o zakresie zatwierdzenia, można użyć

    git diff commit-id1 commit-id2 --stat 
    
  3. Jeśli chcesz wiedzieć, wiersze dodane/zmienione/usunięte przez każdy popełnić, można użyć

    git log --stat 
    
Powiązane problemy