Есть ли способ добавить git строки отображения, строки изменены и удалены строки?
"git diff --stat" и "git log --stat" показывает такие вещи, как:
$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07
app/controllers/application_controller.rb | 34 +++-------------------------
1 files changed, 4 insertions(+), 30 deletions(-)
Но то, что на самом деле произошло в этом деле, было то, что было изменено 4 строки, и было удалено 26 строк, что отличается от добавления 4 строк и удаления 30.
Есть ли способ получить дельта LOC (в данном случае 26)? Мне не все равно, чтобы различать строки, добавленные или удаленные.
Ответы
Ответ 1
Вы можете использовать:
git diff --numstat
чтобы получить числовую информацию о diff.
Что касается разделения модификации пары добавления и удаления, может помочь --word-diff
. Вы можете попробовать что-то вроде этого:
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
Это немного затянуто, поэтому вы можете проанализировать его в своем собственном script.
Ответ 2
-
Если вы хотите узнать, что строки добавлены/изменены/удалены с помощью фиксации с помощью
id commit-id
, вы можете использовать
git show commit-id --stat
или
git diff commit-id-before commit-id --stat
-
Если вы хотите знать, что строки добавлены/изменены/удалены диапазоном
коммиты, вы можете использовать
git diff commit-id1 commit-id2 --stat
-
Если вы хотите знать строки, добавленные/измененные/удаленные каждым фиксацией,
вы можете использовать
git log --stat
Ответ 3
git использует "унифицированный" diff, который только добавил и удалил строки, как формат diff. Вы должны сделать что-то внешнее, чтобы получить diff, который показывает добавление, удаление и изменение информации.
https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git дает ссылки на script, который позволяет запускать обычный старый "diff" - и из этого вы можете сгенерировать a "context" diff. Context diff показывает добавленные, удаленные и измененные строки, которые должны позволить вам получать нужные данные.