我如何使用git diff -G? [英] How do I use git diff -G?

查看:149
本文介绍了我如何使用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 / 
错误:无效选项:-GC:/ Program Files / Git / OutputFingerprint /

另外,简单地在 -G OutputFingerprint 之间放置空格不起作用:

 > git diff -G OutputFingerprint 
致命的:模棱两可的参数'OutputFingerprint':未知版本或路径不在工作树中。
使用' - '将路径与修订分开

当我调用<$ c $

   - < OutputFingerprint> e45807ca76fc5bb78e9e928c6fb7eed6< c> git diff 没有任何params,我得到了修改: ; / OutputFingerprint> 
+< OutputFingerprint> d0846851bc9d52b37f7919def78660a2< / OutputFingerprint>

另一个想法是使用 git diff -S。* OutputFingerprint。* --pickaxe-regex ,但这也不成功。

git --version 给我 git版本1.7.3.1.msysgit.0 ,如果这是相关的。



当我询问 git diff --help 时,所提供的手册显示 - G 选项。



那么,有谁能提供一个例子来说明如何使用 git diff -G 正确?

解决方案

  git diff -Garegex 

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

它将显示 diff ,如果正则表达式匹配已添加的 删除的版本。

已添加已删除未更改

含义在您的案例中,

eckes 报告它的工作原理(仅限于msysgit1.7.4 +),并补充说: diff 手册页 -G 选项包括:


寻找添加了 的行与给定的正则表达式匹配的区别,

它涉及变化的线在哪里的差异输出打印为已添加和已删除的一行






示例:I添加一个新行'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-sdsfwkOwner=for ...
+ aaa


I'm writing a little test suite that runs the tool to be tested over a bunch of input files. For each input file, a corresponding output file is being created by the tool (both are in XML). Input and output files are checked in on a Git repo.

The output files carry the time when the tool was compiled, so the output files are surely modified after they were re-created by the tool being tested.

To have a quick glimpse if the output has changed (when I modified the sources of the tool), I'd like to check whether the content of the node OutputFingerprint has changed (simple hash over the contents of the relevant parts of the output file).

Reading the manual for git-diff, I found that there's a -G option:

-G<regex>
Look for differences whose added or removed line matches the given <regex>.

Unfortunately, they provide no example for how to use the -G option.

My first thought was to simply write

git diff -GOutputFingerprint

but that's wrong:

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

Next thought was to put the regex in slashes, which is also not successful:

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

Also, simply putting a space between -G and OutputFingerprint doesn't work:

> git diff -G OutputFingerprint
fatal: ambiguous argument 'OutputFingerprint': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

When I call git diff without any params, I get the modification:

-    <OutputFingerprint>e45807ca76fc5bb78e9e928c6fb7eed6</OutputFingerprint>
+    <OutputFingerprint>d0846851bc9d52b37f7919def78660a2</OutputFingerprint>

Another thought was to use git diff -S".*OutputFingerprint.*" --pickaxe-regex, but this is also not successful.

git --version gives me git version 1.7.3.1.msysgit.0 if that is relevant.

When I ask git diff --help, the provided manual shows me the -G option.

So, could anyone provide me an example for how to use git diff -G correctly?

解决方案

git diff -Garegex

runs fine with msysgit 1.7.4, but only in a bash session (in a DOS session, it returns nothing)

It will display the diff if the regex matches a line added or removed from the staged version.
added or removed: not changed.
Meaning in your case, it won't work

The OP eckes reports it works (with msysgit1.7.4+ only), adding that the diff man page for -G option includes:

"Look for differences whose added or removed line matches the given regex",
which relates to the diff output where a changed line is printed as one added and one removed line.


Example: I add a new line 'aaa' (without git add: just a simple edit)

$ 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 diff -G?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆