2011-02-23 200 views
5

我正在写一个测试套件,运行要在一堆输入文件中进行测试的工具。对于每个输入文件,该工具正在创建相应的输出文件(均为XML格式)。输入和输出文件在Git仓库中签入。如何使用git diff -G?

输出文件包含编译工具的时间,所以输出文件在被测试工具重新创建后肯定会被修改。

如果输出已经改变(当我修改工具的源代码时),我想要检查节点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和之间加一个空格210不起作用:

> 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的例子吗?

+0

尝试添加'G'和正则表达式之间的空间? – sarnold 2011-02-23 09:17:49

+1

嘿,我的git 1.7.1没有'-G'选项 - 我想知道你的是否支持'-G'?您可能需要更新的版本来支持您想要做的事情。 – sarnold 2011-02-23 09:30:07

+0

只是为了确认,是否有实际的变化来报告?如果没有未提交的更改,即使没有'-G',我也会得到“未知版本”的错误...只要确保在尝试过滤之前获得了_some_种类的差异即可。 – sarnold 2011-02-23 09:44:33

回答

5
git diff -Garegex 

运行正常与msysgit 1.7.4,但只在bash命令(在DO​​S会话,它没有返回值)

它会显示diff如果正则表达式匹配的行添加从分阶段版本中删除
增加删除没有改变
意义在你的情况,它不会工作

的OP eckes报告它的工作原理(与msysgit1.7.4 +只),并补充说,diff man page-G选项包括:

“寻找添加的删除的行与给定的正则表达式匹配的差异”,
,其涉及差异输出其中更改的行将打印为一个已添加的行和一个已删除的行


例子:我添加一个新行 '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 
+0

@eckes:我已经通过澄清和示例更新了我的答案。对于更改,相信一个简单的''git diff | grep ...''就够了) – VonC 2011-02-23 12:59:13

+0

指点我msysgit 1.7.4是正确的方法! 'git diff -GOutputFingerprint'现在向我显示'OutputFingerprint'被**改变了**。正是我需要的。谢谢! – eckes 2011-02-23 13:01:23

+0

@VonC:如果我无法单独使用git方法,回落到'grep'会成为我的选择。但现在,没有必要...... – eckes 2011-02-23 13:02:43