我如何使用git diff -G?

时间:2011-02-23 09:14:35

标签: git msysgit git-diff

我正在编写一个小测试套件,运行要在一堆输入文件上进行测试的工具。对于每个输入文件,该工具正在创建相应的输出文件(两者都是XML格式)。输入和输出文件在Git仓库中签入。

输出文件带有编译工具的时间,因此输出文件在被测试工具重新创建后肯定会被修改。

如果输出已经改变(当我修改工具的源代码时)快速一瞥,我想检查节点OutputFingerprint的内容是否已经改变(对内容的简单哈希)输出文件的相关部分)。

阅读git-diff手册,我发现有一个-G选项:

  

-G<正则表达式>
  查找添加或删除的行与给定的< regex>匹配的差异。

不幸的是,他们没有提供如何使用-G选项的示例。

我的第一个想法是简单地写

git diff -GOutputFingerprint

但那是错的:

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

接下来的想法是将正则表达式放入斜杠,这也是不成功的:

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

此外,只需在-GOutputFingerprint之间添加空格即可:

> 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 个答案:

答案 0 :(得分:5)

git diff -Garegex

使用msysgit 1.7.4正常运行,但仅在bash会话中(在DOS会话中,它不返回任何内容)

如果正则表达式与分阶段版本中已添加已删除的行匹配,则会显示diff
已添加已删除未更改 在您的情况下, 它将无法正常工作

OP eckes报告其有效(仅限msysgit1.7.4 +),并补充说-G git add选项包括:

  

“查找添加已删除行与给定正则表达式匹配的差异”,
  这与diff输出有关,其中更改的行打印为一个添加的行和一个删除的行


示例:我添加了一个新行'aaa'(没有$ 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 :只是一个简单的编辑)

{{1}}