繁体   English   中英

我如何使用 git diff -G?

[英]How do I use git diff -G?

我正在编写一个小测试套件,它运行要在一堆输入文件上测试的工具。 对于每个输入文件,该工具都会创建一个相应的输出文件(两者都是 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的示例?

git diff -Garegex

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

如果正则表达式与从暂存版本中添加删除的行匹配,它将显示diff
添加删除未更改
在你的情况下,意思是它不会工作

OP eckes报告它有效(仅适用于 msysgit1.7.4+),并补充说-G选项的diff手册页包括:

“查找添加删除的行与给定正则表达式匹配的差异”,
这与 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

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

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

pickaxe :模具时-G--pickaxe-regex被合并

签字人:Ævar Arnfjörð Bjarmason

-G--pickaxe-regex选项结合使用时,我们只需忽略--pickaxe-regex选项。
让我们按照我们的文档的建议去死吧,因为-G总是一个正则表达式。

d01d8c6 (“支持镐匹配正则表达式”,2006-03-29,Git v1.3.0-rc4 -- merge )中添加--pickaxe-regex时,仅存在-S选项。
然后当-G被添加到f506b8e (“git log/diff: add -G that grep in the patch text”, 2010-08-23, Git v1.7.4-rc0 -- merge )时, --pickaxe-regex的文档都没有--pickaxe-regex已相应更新,也未添加类似此断言的内容。

5bc3f0b (“diffcore-pickaxe doc:document -S 和 -G 正确”,2013 年 5 月 31 日,Git v1.8.4-rc0 -- merge--pickaxe-regex我们已经声称--pickaxe-regex应该只用于-S ,但默默容忍将它与-G结合,让我们死吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM