git diff игнорирует точку с запятой в конце строки - PullRequest
3 голосов
/ 26 мая 2019

Коллега создал коммит, в котором его редактор добавил точки с запятой в каждую строку (среди прочих изменений).

Я знаю, что могу использовать переключатель -w, чтобы игнорировать ошибки, связанные с пробелами.Будет ли какая-нибудь магия git, чтобы заставить git игнорировать ; в целом, или даже лучше, только когда на EOL?

Что-то вроде:

git diff --ignore=; -w

Ответы [ 2 ]

3 голосов
/ 26 мая 2019

Может быть, вы можете решить это с помощью опции --word-diff-regex. Вот что я сделал: я создал простой файл и зафиксировал его со следующим содержимым.

first line
second line
third line

Затем я изменил это так:

first line;
second; line;
third changed line;

Если я правильно понял, вам нужно показать только следующие отличия: второй -> второй; третья строка -> третья измененная строка

Вы можете частично сделать это, выполнив:

git diff  --word-diff-regex='[^ \\n;]+' HEAD..HEAD~1

И это вывод:

first line
second line
third[-changed-] line

Я сказал частично, потому что даже если я нашел регулярное выражение, чтобы обнаружить и первое изменение ('[^ \\n]+(?!\\n|$)'), git, похоже, не принимает его, по какой-то причине я не знаю (я все еще работаю над этим).

В любом случае, логика заключается в том, что эта опция «переопределяет» то, как git считает слово. Я знаю, что это неправильное регулярное выражение, поскольку оно не охватывает несколько случаев, измените его в зависимости от ваших потребностей (например, если вы считаете test1;test2 словом).

2 голосов
/ 26 мая 2019

Самый простой способ, который я могу придумать, это:

создать файл с версией вашего коллеги, где вы удалите точки с запятой в EOL, и сравните его с нужным файлом:

git show modifiedcommit:the/file | sed -e 's/;$//' > /tmp/theFile
git diff originalcommit:the/file /tmp/theFile 
...