5

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

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

为了快速了解输出是否已更改(当我修改工具的源代码时),我想检查节点的内容是否OutputFingerprint已更改(对输出文件相关部分的内容进行简单散列) .

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

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

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

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

git diff -GOutputFingerprint

但这是错误的:

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

接下来的想法是将正则表达式放在斜杠中,这也没有成功:

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

-G此外,简单地在and之间放置一个空格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正确使用的例子?

4

1 回答 1

5
git diff -Garegex

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

diff如果正则表达式匹配从暂存版本中添加删除的行,它将显示。
添加删除未更改
在你的情况下意味着,它行不通

OP eckes报告它有效(仅适用于 msysgit1.7.4+),并补充说选项的diff手册页包括-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

请注意,对于 Git 2.33(2021 年第三季度),使用--pickaxe-regex(通常为 保留-S)将无法使用-G(反正已经使用正则表达式)。

See commit 5d93460 , commit 22233d4 , commit f97fe35 , commit fa59e7b , commit 9e20442 , commit a8d5eb6 , commit 5b0672a , commit 5d35a95 , commit 52e011c , commit 2e197a7 , commit 03c1f14 , commit d90d441 , commit 102fdd2 , commit a47fcbe , commit d26ec88 , commit 188e9e2 , commit 7cd5d5b提交 064952f提交 69ae930提交 c960939提交 6d0a401提交 ecbff14(2021 年 4 月 12 日),作者: Ævar Arnfjörð Bjarmason ( avar)
(由Junio C Hamano 合并gitster——提交 4da281e中,2021 年 7 月 13 日)

pickaxe-G: 当和--pickaxe-regex结合时死亡

签字人:Ævar Arnfjörð Bjarmason

-G--pickaxe-regex选项组合时,我们只是忽略该--pickaxe-regex选项。
让我们按照我们的文档的建议去死吧,因为-G它始终是一个正则表达式。

d01d8c6--pickaxe-regex中添加时(“支持镐匹配正则表达式”,2006-03-29,Git v1.3.0-rc4 -- merge)仅存在该选项。 然后当被添加到f506b8e ("git log/diff: add -G that greps in the patch text", 2010-08-23 , Git v1.7.4-rc0 -- merge )添加了类似这样的断言。-S
-G--pickaxe-regex

5bc3f0b(“diffcore-pickaxe doc: document -S and -G proper”,2013-05-31,Git v1.8.4-rc0 -- merge)以来,我们声称--pickaxe-regex应该只与 一起使用-S,但默默地容忍组合它与-G,让我们死吧。

于 2011-02-23T12:49:40.237 回答