Git diff: игнорировать строки, начинающиеся со слова - PullRequest
0 голосов
/ 23 ноября 2018

Как я узнал здесь , мы можем сказать git diff игнорировать строки, начинающиеся с *, используя:

git diff -G '^[[:space:]]*[^[:space:]*]'

Как мне сказать git игнорировать строки, начинающиеся ссо словом или более (например: * Generated at), а не просто символом?

Этот файл должен игнорироваться, он содержит только тривиальные изменения:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23

Этот файл долженНЕ игнорируется, содержит НЕ только тривиальные изменения:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23
+ * This line is important! Although it starts with a * 

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Git использует POSIX регулярные выражения, которые, кажется, не поддерживают lookarounds .Вот почему @ Myys 3 подход не работает.Не очень элегантный обходной путь может выглядеть примерно так:

git diff -G '^\s*([^\s*]|\*\s*[^\sG]|\*\sG[^e]|\*\sGe[^n]|\*\sGen[^e]|\*\sGene[^r]|\*\sGener[^a]|\*\sGenera[^t]|\*\sGenerat[^e]|\*\sGenerate[^d]).*'

Это отфильтрует все изменения, начиная с "* Generated".

Тест: https://regex101.com/r/kdv4V0/3

0 голосов
/ 09 июля 2019

TL; DR: git diff -G не может исключать изменения только для включения изменений, соответствующих регулярному выражению.

Посмотрите на git diff: игнорировать удаление или вставку определенного регулярного выражения Там Торек объясняет, как git log и git diff работают и как работает параметр -G.

0 голосов
/ 23 ноября 2018

Учитывая, что вы игнорируете изменения, которые НЕ соответствуют вашему регулярному выражению, вам просто нужно поместить слова, которые вы хотите, в выражение в пределах группы захвата просмотра, например:

git diff -G '^(?=.*Generated at)[[:space:]]*[^[:space:]*]'

Обратите внимание, что если вы хотите продолжать добавлять слова, чтобы игнорировать, просто продолжайте добавлять эти группы (не забудьте .*): Однако, если строка содержит «Сгенерировано в» в любом месте в целом, это должно быть проигнорировано.Если вы хотите точно определить, как это должно начаться, замените . на [^[:word:]].

git diff -G '^(?=[^[:word:]]*Generated at)[[:space:]]*[^[:space:]*]'

Вы можете посмотреть на его поведение на

Версия 1: .*

https://regex101.com/r/kdv4V0/1

Версия 2: [^[:word:]]*

https://regex101.com/r/kdv4V0/2

...