[英]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/
此外,简单地在-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
的示例?
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.