如何使用 git diff -G?

2024-03-18

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

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

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

阅读手册git-diff http://git-scm.com/docs/git-diff,我发现有一个-G option:

-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 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 option.

那么,有人可以给我提供一个如何使用的例子吗git diff -G正确吗?


git diff -Garegex

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

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 https://stackoverflow.com/users/520162/eckes报告它可以工作(仅适用于 msysgit1.7.4+),并补充说diff手册页 http://git-scm.com/docs/git-diff for -G选项包括:

“寻找差异added or removed行与给定的正则表达式匹配”,
这与 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(无论如何它已经使用了正则表达式)。

See commit 5d93460 https://github.com/git/git/commit/5d93460024541909337d6b08a8bec10b71caaf73, commit 22233d4 https://github.com/git/git/commit/22233d43eb5479d1076e034eb5cdba973fa2b02a, commit f97fe35 https://github.com/git/git/commit/f97fe358576c81d995843644ab58de1ebeb7fee9, commit fa59e7b https://github.com/git/git/commit/fa59e7beb2a61d9cd1312b212075edf12935fdc6, commit 9e20442 https://github.com/git/git/commit/9e204422985a518ac700889d1ca4d521b3a7bfb2, commit a8d5eb6 https://github.com/git/git/commit/a8d5eb6dc0d61625667b0d8155c425d3629baa12, commit 5b0672a https://github.com/git/git/commit/5b0672a26e51387bc18adad89eaa3ebb131b2e33, commit 5d35a95 https://github.com/git/git/commit/5d35a9531cc9af717383bc11c2dfa4edc020ac56, commit 52e011c https://github.com/git/git/commit/52e011cd2b13e00fe40b1d59986948330b61e030, commit 2e197a7 https://github.com/git/git/commit/2e197a759221921d42c5e94ae3f4897cd456ebb4, commit 03c1f14 https://github.com/git/git/commit/03c1f14acf5169d8e6c06a60c28ee5a6cfb9fd54, commit d90d441 https://github.com/git/git/commit/d90d441c336cc120b47e025d14c3879864ce60c5, commit 102fdd2 https://github.com/git/git/commit/102fdd2e07f72919060224b3eb3560524d6cf1f9, commit a47fcbe https://github.com/git/git/commit/a47fcbe6e412df295f1f5ffb8eca6dbe86d2b7bb, commit d26ec88 https://github.com/git/git/commit/d26ec8800969ea1b692e0c87100dc4235cfa12e2, commit 188e9e2 https://github.com/git/git/commit/188e9e28c5287f3f160b5f14e3e551b1c55c7301, commit 7cd5d5b https://github.com/git/git/commit/7cd5d5b299497fb874897595c642144d7d894ee4, commit 064952f https://github.com/git/git/commit/064952fc34b9765282fec057b3af260eae7c75c6, commit 69ae930 https://github.com/git/git/commit/69ae93089cd892d70429f7f06371860d65cb1f1b, commit c960939 https://github.com/git/git/commit/c9609398580518dffaadaace17188c901a4a4522, commit 6d0a401 https://github.com/git/git/commit/6d0a40166e87a78ca17fddeee25228ded92a169e, commit ecbff14 https://github.com/git/git/commit/ecbff141a1c6e4a32a43f90db70cde2b2199b241 (12 Apr 2021) by Ævar Arnfjörð Bjarmason (avar) https://github.com/avar.
(Merged by Junio C Hamano -- gitster -- https://github.com/gitster in commit 4da281e https://github.com/git/git/commit/4da281e84d87b099ba8d0a255534dc1251be968e, 13 Jul 2021)

pickaxe https://github.com/git/git/commit/188e9e28c5287f3f160b5f14e3e551b1c55c7301: 死时-G and --pickaxe-regex被合并

Signed-off-by: Ævar Arnfjörð Bjarmason

当。。。的时候-G and --pickaxe-regex选项组合在一起我们只是忽略--pickaxe-regex option.
让我们按照我们的文档的建议去死吧,因为-G始终是正则表达式。

When --pickaxe-regex被添加到d01d8c6 https://github.com/git/git/commit/d01d8c6782850c18d62676dae3c72ad73be1e52e(“支持镐匹配正则表达式”,2006-03-29,Git v1.3.0-rc4 --merge https://github.com/git/git/commit/46e48c36043447b9739cdd7cae768dc53b5bc89d) 只有-S选项存在。
那么当-G被添加到f506b8e https://github.com/git/git/commit/f506b8e8b5fb231e63b69668b6b7516f12b32228(“git log/diff:在补丁文本中添加 grep 的 -G”,2010-08-23,Git v1.7.4-rc0 --merge https://github.com/git/git/commit/b3c16ee454effda5ec8033ab665249710f622699)既没有文档--pickaxe-regex进行了相应更新,也没有添加类似此断言的内容。

Since 5bc3f0b https://github.com/git/git/commit/5bc3f0b56779d189aaf7cab7e5d307aa4e7c0887(“diffcore-pickaxe 文档:文档 -S 和 -G 正确”,2013-05-31,Git v1.8.4-rc0 --merge https://github.com/git/git/commit/71e120202fe073bd2e4e9db59ca01ab7c5e72f7e)我们声称--pickaxe-regex应该只与使用-S,但默默地容忍将其与-G,我们还是去死吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 git diff -G? 的相关文章

  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • 是否可以在一次 git 调用中取消设置多个 git 配置值,而不是逐一取消设置?

    我需要自动取消全局 git 配置文件中的许多别名 diff difftool merge mergetool 设置 现在我正在打电话git config global unset对于他们每个人来说 这有点慢 嗯 相对而言 大约需要 3 秒
  • 如何在 git diff 中按标点符号拆分单词?

    我对以下命令有一些运气 git diff color words lt gt space lt gt 但它似乎没有在第一个字符类中正确地否定方括号 我试过这个 git diff color words lt gt space lt gt 为
  • git:如何查明某个分支是否有拉取请求?

    我在 git 分支上 有没有办法查看该分支是否有拉取请求 在这种特殊情况下 Atlassian Stash 用于管理拉取请求 当然我可以使用Stash的Web界面来搜索拉取请求 但我也可以仅使用 git 命令行工具从脚本执行此操作吗 Cor
  • 判断 Git 提交是否是合并/恢复提交

    我正在编写一个脚本 需要检查特定提交是否是合并 恢复提交 我想知道是否有 git 技巧 到目前为止我想到的 我绝对不想依赖这里的提交消息 是检查HASH 2看看我是否没有收到错误 是否有更好的方法 判断某个东西是否是合并很容易 这是不止一位
  • 克隆存储库而不将其设为原始远程存储库

    我正在从一台将被擦除的计算机上克隆一个 git 存储库 是否可以在不创建原始存储库的情况下克隆存储库origin master 或者我是否需要克隆它 然后删除远程分支 这是通过git remote rm origin Edit 存储库只有一
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal

随机推荐

  • 为什么 User.Identity 不包含 ClaimsTypes 的完整列表?

    我正在开发 ASP NET Core Web 应用程序 我的 dotnet 版本是 3 1 401 我使用的是 Visual Studio Community 2019 版本 16 7 2 我在没有 ASP NET Core Identit
  • HTML 电子邮件在 Google Apps/Gmail 中无法正确显示

    我的 Web 应用程序向用户发送基于 HTML 的电子邮件 我创建了一个 HTML 电子邮件模板 基于 MailChimp 提供的模板 据说该模板可以在任何浏览器 电子邮件客户端中使用 当我使用发送它时SendGrid 它到达并完美地显示在
  • “tsc --out ... --declaration”不包括自定义接口

    Setup假设我们有两个文件 A ts 和 B d ts 现在在 A 里面我们有 class A implements B 现在假设我想将所有打字稿文件合并到一个单一的定义文件中 我知道如何执行此操作的唯一方法是创建一个 js 文件 然后创
  • 错误:任务“:app:dexDebug”执行失败。使用 Facebook Fresco 以非零退出值 2 完成

    我在这里阅读了有关此问题的每一条线索 但找不到我的问题的任何答案 添加 Fresco 库后 我在构建应用程序时收到此错误 有问题的行是 compile com facebook fresco fresco 0 5 3 错误 错误 任务 ap
  • 8位到16位转换

    我有一张捕获 8 位的图像 我正在寻找将 8 位值转换为 16 位值 我用了以下 short temp16 short val i lt lt 8 where val是一个 8 位样本的数组 上面的说法引起了噪音 有人能建议一种8位到16位
  • 将短整型复制到 char 数组

    我有一个名为 s int 的短整型变量 它的值 2 unsighed short s int 2 我想将此数字复制到字符数组的第一个和第二个位置 假设我们有char buffer 10 我们想要两个字节s int复制于buffer 0 an
  • 登录我的帐户时,Telethon 不断将我注销。电报、Python

    该代码似乎运行完美 在我最终再次注销之前 我什至有时间用机器人对其进行了短暂的测试 此时我已经尝试了大约 10 次 但 Telethon 似乎出于某种原因将我从手机上的 Telegram 中删除了 我不知道为什么会发生这种情况 而且我也没有
  • 当我使用 Objective-C 中定义的宏时,Swift 条件编译无法正常工作

    我在 Objective C 头文件中定义了一个简单的宏 并通过项目桥接头文件将该头文件导入到 Swift 中 我能够在 Swift 中使用这个宏作为常量 但是当我使用它进行条件编译时 它无法正常工作 我在 Xcode 10 2 1 中创建
  • 如何在 gtk 中将小部件作为不同的线程加载? (瓦拉)

    我创建了这个类 出于效率原因 我想将缩略图作为不同的线程加载到图标视图中 因为如果我在同一个线程中执行此操作 GUI 加载速度会非常慢 但是当我创建线程时 它不起作用 它绘制了一些缩略图 然后它们就消失了 当我使用 join 时 它有效 这
  • 如何在 Mongoid 中更改文档的 _type?

    我在 Rails 应用程序中有以下模型 class User include Mongoid Document end class Admin lt User end 我得到一个用户 u User find some key 并尝试更改 t
  • 在 API 蓝图中表示文件上传

    我们有一个 API 端点 可以在其中上传图像文件以及文件名 字符串 和描述 字符串 养蜂场 API 蓝图不允许我拥有类似的东西 Request multipart form data Headers Authorization key At
  • Java 中最好的可调整大小的循环字节缓冲区是什么?

    我需要 Java 中的字节缓冲区类以供单线程使用 我应该能够在缓冲区后面插入数据并在前面读取数据 摊销成本为 O 1 缓冲区在满时应该调整大小 而不是抛出异常或其他东西 我可以自己写一个 但如果标准 Java 包中尚不存在这个 我会感到非常
  • 我可以覆盖 test_helper.rb 中的任务:环境来测试 rake 任务吗?

    我在 Rakefile 中有一系列 rake 任务 我想将其作为我的规范等的一部分进行测试 每个任务都以以下形式定义 task do somthing gt environment do Do something with the data
  • 在 Linux 上以编程方式获取准确的 CPU 缓存层次结构信息

    我试图获得 Linux 上当前 CPU 的数据缓存层次结构的准确描述 不仅是各个 L1 L2 L3 可能还有 L4 数据缓存的大小 还包括它们在不同系统之间分割或共享的方式核心 例如 在我的 CPU AMD Ryzen Threadripp
  • data.table 的“i”表达式中不存在(可能的错误)[重复]

    这个问题在这里已经有答案了 When i包含NA 不会返回该特定行 我不确定这是预期的行为还是真的 require data table x data table a c NA 1 3 NA x a gt 0 a 1 1 2 2 3 3 x
  • 如何更改android studio操作语言

    我是中国人 不太习惯android studio的默认语言 我知道这个问题的关键是resources en jar 文件 我已经解压了包裹 但我不知道下一步该做什么 如何更改语言 要更改语言 请按照下列步骤操作 解压Android Stud
  • 当实例变量呈现为数组列表时类的不变性

    我有一个不可变的类 假设我有一个 ArrayList 类型的成员变量的 getter 方法 在这种情况下 当我获得对该变量的引用时 我可以从中添加或删除一个元素 在这种情况下 不变性似乎受到了侵犯 谁能详细解释一下这个概念 你确实是对的 违
  • Response.Redirect 在 Global.asax 中不起作用

    我创建了一个错误页面来显示所有未处理异常的一般消息 这是Global asax中的代码 HttpContext ctx HttpContext Current string e404 PAGE ctx Request AppRelative
  • 无法读取未定义的“xxx”属性

    我使用的是 Ionic 2 其中一个组件有两个组件 并且使用发射器共享数据 但是当我执行程序时 却出现了这个错误 未捕获的运行时错误 承诺中 TypeError 无法读取属性 未定义类型错误的 BillNo 无法读取属性 BillNo 在
  • 如何使用 git diff -G?

    我正在编写一个小测试套件 该套件运行要在一堆输入文件上进行测试的工具 对于每个输入文件 该工具都会创建相应的输出文件 两者都是 XML 格式 输入和输出文件在 Git 存储库上签入 输出文件带有工具编译时的时间 因此输出文件在被测试工具重新