Убедитесь, что патч состоит только из ходов - PullRequest
2 голосов
/ 25 ноября 2011

Я реорганизовал некоторый код и хотел бы использовать программу для проверки того, что diff состоит только из совпадающих пар добавлений и удалений. Я использую git в качестве контроля исходного кода, так что, надеюсь, есть что-то встроенное в git, которое может сделать это для меня? Также было бы очень полезно, если бы можно было суммировать строки, которые либо появились, либо исчезли


Кто-нибудь знает, есть ли такой инструмент?

Ответы [ 4 ]

1 голос
/ 04 сентября 2017

Другой подход был бы визуальным, возможен с Git 2.14.x / 2.15 (3 квартал 2017 г.), так как "git diff" научили необязательно рисовать новые линии, которые так же, как удаленные строки в другом месте, в отличие от действительно нового линии .

Другими словами: выделенный цвет для перемещено линий

См. коммит 61e89ea , коммит 86b452e , коммит 176841f , коммит 2e2d5ac , коммит e6e045f , commit 146fdb0 , commit 30b7e1e , commit bd03329 , commit 0911c47 , commit 4eed0eb , commit f359713 , commit 5af6ea9 , commit 4acaaa7 , commit a29b0a1 , commit 3ee8b7b , commit f2bb121 , commit ff95867 , commit 091f8e2 , commit b9cbfde , commit 68abc6f (30 июня 2017) Stefan Beller (stefanbeller) .
(Объединено с Junio ​​C Hamano - gitster - в коммит b6c4058 , 27 августа 2017 г.)

Документация git config теперь включает :

diff.colorMoved

Если задано допустимое значение <mode> или истинное значение, перемещенные линии в разнице окрашиваются по-разному, подробности о действительных режимах см. В --color-moved в git-diff.
Если просто установить true, будет использоваться цветовой режим по умолчанию.
Если установлено значение false, перемещенные линии не окрашиваются.

Подробнее см. commit 2e2d5ac .

1 голос
/ 25 ноября 2011

Как говорит Пруссван - я не думаю, что инструмент существует в настоящее время. Но git может обнаруживать переименования, и не должно быть сложно обнаружить изменения в файле. Опция -M также предназначена для обнаружения переименований, а не просто для удаления / добавления различий.

git diff -M 18b5850a07bb
diff --git a/G b/G
index e69de29..d0a432b 100644
--- a/G
+++ b/G
@@ -0,0 +1 @@
+This is a change
diff --git a/A b/H
similarity index 100%
rename from A
rename to H
diff --git a/B b/I
similarity index 100%
rename from B
rename to I
diff --git a/C b/J
similarity index 100%
rename from C
rename to J
diff --git a/D b/K
similarity index 100%
rename from D
rename to K
diff --git a/E b/L
similarity index 100%
rename from E
rename to L
diff --git a/F b/M
similarity index 100%
rename from F
rename to M
1 голос
/ 26 ноября 2011

Вы не сказали, на каком языке (ах) вы работали.

Наше SmartDifferencer семейство инструментов может помочь. Эти инструменты сравнивают синтаксис языка программирования для определения различий в терминах, объясняемых действиями программиста (копирование, перемещение, переименование идентификатора в блоке), а не действиями по редактированию строки.

Если правки в ваших файлах на самом деле представляют собой просто движения целых программных конструкций, SmartDifferencer, скорее всего, скажет вам именно это.

1 голос
/ 25 ноября 2011

Не знаю о таком инструменте, хотя это действительно полезная функция. На окнах вы можете использовать WinMerge , который обнаружил перемещение линий. В противном случае этот связанный вопрос может оказаться полезным.

...