Как мне использовать git diff -G? - PullRequest
5 голосов
/ 23 февраля 2011

Я пишу небольшой набор тестов, который запускает инструмент для тестирования поверх множества входных файлов. Для каждого входного файла инструмент создает соответствующий выходной файл (оба в формате XML). Входные и выходные файлы регистрируются в репозитории Git.

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

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

Читая руководство для git-diff, я обнаружил, что есть опция -G:

-G
Ищите различия, чья добавленная или удаленная строка соответствует данному .

К сожалению, они не предоставляют пример того, как использовать опцию -G.

Моей первой мыслью было просто написать

git diff -GOutputFingerprint

но это не так:

> git diff -GOutputFingerprint
error: invalid option: -GOutputFingerprint

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

> git diff -G/OutputFingerprint/
error: invalid option: -GC:/Program Files/Git/OutputFingerprint/

Кроме того, просто поставить пробел между -G и OutputFingerprint не работает:

> git diff -G OutputFingerprint
fatal: ambiguous argument 'OutputFingerprint': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Когда я звоню git diff без каких-либо параметров, я получаю модификацию:

-    <OutputFingerprint>e45807ca76fc5bb78e9e928c6fb7eed6</OutputFingerprint>
+    <OutputFingerprint>d0846851bc9d52b37f7919def78660a2</OutputFingerprint>

Еще одна мысль состояла в том, чтобы использовать git diff -S".*OutputFingerprint.*" --pickaxe-regex, но это также не увенчалось успехом.

git --version дает мне git version 1.7.3.1.msysgit.0, если это актуально.

Когда я спрашиваю git diff --help, в прилагаемом руководстве отображается опция -G.

Итак, кто-нибудь может дать мне пример того, как правильно использовать git diff -G?

1 Ответ

5 голосов
/ 23 февраля 2011
git diff -Garegex

отлично работает с msysgit 1.7.4, но только в сеансе bash (в сеансе DOS ничего не возвращается)

Отображается diff, если регулярное выражение соответствует строке добавлено или удалено из промежуточной версии.
добавлено или удалено : не изменено .
Это означает, что в вашем случае не будет работать

OP eckes сообщает, что он работает (только с msysgit1.7.4 +), добавляя, что опция diff man page для -G включает:

«Ищите различия, для которых добавлено или удалено строка соответствует заданному регулярному выражению»,
который относится к выводу diff , где измененная строка печатается как добавленная и одна удаленная строка .


Пример: я добавляю новую строку 'aaa' (без git add: просто редактирование)

$ git diff -Gaaa

diff --git a/conf/fragments/xxx_repos.conf b/conf/fragments/xxx_repos.coindex 263fa85..3475f9b 100644
--- a/conf/fragments/xxx_repos.conf
+++ b/conf/fragments/xxx_repos.conf
@@ -10,3 +10,4 @@ repo xxx-sdsfwk
     RW+                                = vonc user1 user2
     RW                                 = @xxx_users
 xxx-sdsfwk "Owner" = "for..."
+aaa
...