Подтвердить что ты не робот

Есть ли способ добавить 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)? Мне не все равно, чтобы различать строки, добавленные или удаленные.

4b9b3361

Ответ 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 показывает добавленные, удаленные и измененные строки, которые должны позволить вам получать нужные данные.