git word-diff-regex 可以处理多行更改吗?

2023-12-11

考虑一个像这样的简单文件:

承诺:

foo;

Edited:

bar;

现在,当我跑步时git diff --word-diff-regex="[a-z]+",它给了我

[-foo-]{+bar+};

所以,这表明这个词foo已被替换为bar。请注意,分号未标记为已更改。没关系。


现在,如果我向文件中添加另一行,如下所示:

bar;

qux;

上面的方法不再有效:

$ git diff --word-diff-regex="[a-z]+"

预期输出:

[-foo-]{+bar+};

{+qux;+}

实际输出:

[-foo-]{+bar;+}

{+qux+};

请注意,第一行中的分号现在被视为单词的一部分. The docs state

为了查找差异,这些匹配之间的任何内容都被视为空白并被忽略(!)。

那为什么它不忽略分号呢?这是一个错误吗?我可以使用更好的正则表达式来使其工作吗?

I actually use a more sophisticated regex in reality, but the problem is the same.


Edit

奇怪的是,当提交的文件包含额外的换行符时,它会起作用,如下所示:

foo;
 

可能与像我这样最终发表这篇文章的人相关。

由于我对与编程无关的文档使用 markdown,并且还使用 git 来跟踪更改,因此像我这样的其他人可能最终会在这里将“2022-09-12”之类的日期更改为“2022-09-13”相关的需要注意的。

因此,我从 git 本身的文档中找到了这个解决方案(最终在花费了大量时间进行修补之后)

git diff [commit hash] --word-diff-regex=. -U1000 -- [file name]

-U1000目前是一个硬编码的解决方案,有点令人厌烦,但现在就可以了。在我的上下文中,它显示整个文件(文件中只有大约 500 行)

and the --word-diff-regex=.是我从文档

我以前用过--word-diff-regex='(\w+|\s|\.|,|\d+)'捕获句点“.”、逗号“,”、空格和单词,但将其更改为文档中找到的内容,因为以下更改未突出显示

from

... # some other text
<h6>version 1</h6>
<h6>2022-09-20</h6>
... # some other text

into

... # some other text
<h6>version 1.1</h6>
<h6>2022-09-23</h6>
... # some other text

在 powershell 中运行 git:

PS C:...> git diff fbf86a6cfa240cb0a0e98fe8ebf80171d2b801fb --word-diff-regex='(\w+|\s|\.|,|\d+)' -- file.md
diff --git a/file.md b/file.md
index 6c0ce48..0d3b482 100644
--- a/file.md
+++ b/file.md
@@ -1,6 +1,6 @@
...
<h6>version 1{+.1+}</h6>
<h6>2022-09-23</h6>

但仅凭.作为正则表达式模式

PS C:...> git diff fbf86a6cfa240cb0a0e98fe8ebf80171d2b801fb --word-diff-regex=. -- file.md
diff --git a/file.md b/file.md
index 6c0ce48..0d3b482 100644
--- a/file.md
+++ b/file.md
@@ -1,6 +1,6 @@
...
<h6>version 1{+.1+}</h6>
<h6>2022-09-2[-0-]{+3+}</h6>

日期的更改现在突出显示。

希望这对某人有帮助。

编辑: 我添加了图案\d+,因为它实际上包含在我通常的用于寻求更改的正则表达式模式中,但即使添加了它,仍然没有检测到从“20”到“23”的更改。

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

git word-diff-regex 可以处理多行更改吗? 的相关文章

  • git 忽略行结尾

    我知道已经有人问过类似的问题 但我仍然无法让它发挥作用 我的项目在使用不同操作系统的人之间共享 而我使用的是 OSX 另外 并不是每个人都使用 git 有时我最终不得不提交其他人的更改 有时 git 会突然说有待处理的更改 查看文件 它们看
  • libgit2 返回:Refspec 'refs/heads/origin/HEAD' 在 TortoiseGit 中未找到错误

    启动 TortoiseGit 时出现此错误 无法获取所有参考文献 libgit2 返回 未找到 Refspec refs heads origin HEAD 虽然很烦人 但这并不妨碍我使用 TortoiseGit 然而 我想让它消失 因为它
  • 将更改从通用差异导入 git 存储库

    我正在尝试将更改从一个源代码控制系统 专有且复杂 导入到 git 存储库中 我目前正在通过运行一个脚本来执行此操作 该脚本只是按顺序同步到每个修订版并将其提交到 git 存储库 但由于各种原因 这已变得不可行 对于每个修订版 我都可以获得描
  • 禁止 Gerrit 推送到 refs/for/master

    我已经更新了所有项目昨天获得访问权限 人们说他们今天早上无法将更改推送到存储库 当我恢复访问权限后 他们仍然无法将更改推送到存储库 只能clone工作正常 在将更改推送到远程存储库时 它表示 remote rejected HEAD gt
  • ssh:连接到主机 bitbucket.org 端口 22:连接超时

    一切都工作得很好 做了一些git pushes 没有问题 今天我决定将我的框架更新到最新版本 因此它稍微改变了我项目的目录结构 因此 在 Bitbucket 中 我创建了一个新的存储库 dev1 project com 并将我的项目文件夹重
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • 我可以将我的heroku git repo导入bitbucket吗?如何?

    我的笔记本电脑坏了 我需要从另一台计算机上编码 我正在使用 Heroku 我想将最新版本的代码从 Heroku 获取到另一台机器 据我了解 强烈建议使用 GitHub 或 BitBucket 获取适当的远程存储库 我决定尝试一下 BitBu
  • 永久删除 git 提交历史记录

    我需要永久且完全删除 git 存储库的提交历史记录并继续使用文件的当前版本 旧版本 提交不得以任何方式访问 我尝试创建一个新的主分支 删除所有其他分支 但是当我在 git bash 中尝试 git show xxxx 时 旧的提交继续显示
  • 如何设置“阅读文档”以使 Sphinx autodoc 选项发挥作用?

    我的项目不是使用 autodoc 构建的 我遇到了关于我的项目未在 autodoc 中构建的常见问题 https read the docs readthedocs org en latest faq html my project isn
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • Windows 上的 git 忽略文件名大小写更改 [重复]

    这个问题在这里已经有答案了 我有一个reactjs应用程序 我正在将所有文件名标准化为小写以符合Nodejs 最佳实践 https devcenter heroku com articles node best practices stic
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • 如何列出未推送的 Git 提交(本地但不在源上)

    如何查看我所做的 尚未推送到远程存储库的任何本地提交 偶尔 git status将打印出我的分支是X提交之前origin master 但不总是 这是我安装的 Git 的错误 还是我遗漏了什么 这给出了 origin master 和 HE
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • 如何在没有本地存储库的情况下在远程运行 git 命令

    我有一个名为 git export 的脚本 它可以帮助我导出远程存储库 它是这样运行的 git export http host com git repo lt t tag or b branch or c commit gt local
  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • git tag --contains 如何工作?

    从几天前开始 我一直在尝试确定在哪个版本 由标签指定 中部署了特定修复 由提交指定 这里的一些帖子发布了这一点git tag contains是收集这些信息的方法 但是选项的文档 https git scm com docs git tag
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont

随机推荐

  • 将 @ManagedBean 切换到 @Named 后:javax.el.PropertyNotFoundException:目标无法访问,标识符“person”解析为 null [重复]

    这个问题在这里已经有答案了 我只是测试这个 JSF 页面 所以我没有设置action属性中的
  • Android 上的 Pygame

    我想知道是否有人可以给我详细解释如何在 Android 手机上运行使用 Pygame 开发的游戏 应用程序 我最近完成了 PacMan 的编程 它在我的电脑上运行得很好 但我认为如果我能让它在我的手机上运行那就太棒了 我尝试按照以下说明进行
  • 如何检查错误的日期时间条目(python/pandas)?

    我有一个 Excel 数据集 其中包含员工输入的工作时间的日期时间值 现在快到年底了 他们想报告一下 但里面充满了错误的条目 因此我需要清理它 以下是一些错误条目的示例 面对这样的数据集你会采取什么方法 我首先使用将日期列转换为日期时间df
  • 从车牌中删除额外的像素/线

    我正在使用基于 SVM 分类的 HOG 特征检测器 我可以成功提取车牌 但提取的车牌除了车牌号外还有一些不必要的像素 线 我的图像处理流程如下 在灰度图像上应用 HOG 检测器 裁剪检测到的区域 重新调整裁剪图像的大小 应用自适应阈值来突出
  • 反应中带有 Tailwind 的动态类名

    我正在制作简单的 todo 项目来提高我的反应技能 其中之一是选择任务卡的颜色 但我不明白为什么我的方法不起作用 这里的code import React from react const TaskCard React FC gt let
  • 对 Base::object 链接器错误 @ c++ w/ freeglut 的未定义引用

    我有这个代码 Gnome cpp 文件 include Living h class Gnome public Living private public Gnome void drawObjects Gnome Gnome spriteI
  • 以编程方式更改 GridView 中的 ImageView

    我已经设置了带有 TextView 叠加层的 ImageView 网格 我的ImageAdapter代码如下 public View getView int position View convertView ViewGroup paren
  • 文字肖像可视化[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我停了下来 看到了这个可视化 它被称为文字肖像 我的问题是 如何做这样的事情 有描述这个的教程或论文吗 我从来没有见过这个 但我过去做过位图到 ASCII 艺术转换器 这是类似的
  • Swift 函数在应用程序中有效,但在 override func viewDidLoad() 中无效

    在我的 iOS 应用程序中 我有两个与 Firebase 相关的函数 我想在 viewDidLoad 中调用它们 第一个随机选择一个孩子 queryOrderedByKey 并将孩子的密钥作为字符串输出 第二个使用该密钥并且observeE
  • 将 Powershell.exe 的输入和输出重定向到 C++ 中的管道

    我正在尝试在 C 中执行 powershell 命令并通过管道获取其输出 我的程序非常适合 cmd exe 但是 当我尝试使用 powershell exe 执行相同的操作时 我只得到 W 作为输出 我已经注释了下面代码中需要修改才能执行
  • 在 asp.net 中动态调整图像大小

    为简单起见 假设我有一个网页需要显示图像的缩略图 图像位置存储在数据库中 图像存储在 Amazon S3 上 是否可以让我的网络服务器在将大图像传送到客户端之前缩小其尺寸 这样我就不必存储每个图像的缩略图 并且客户端可以下载较小的文件 关于
  • 如何在JNI中将指针从java传递到C?

    我有一个本机方法int sum int int 我如何从java端传递这个方法的参数 编辑 我成功运行的示例方法是 双 gsl stats mean doubleArray int int 这个方法在 GSL 中可用 因为我已经创建了共享对
  • Unicode (utf-8) 与 git-bash

    我在让 unicode 适用于 git bash 在 Windows 7 上 时遇到一些麻烦 我尝试了很多事情但没有成功 虽然 我不太确定造成这种情况的原因 所以我可能在错误的方向上工作 看来这应该是可能的 因为 cmd exe 的编码可以
  • PropertyAccessException:访问字段时出错

    我有一个实体User Entity public class User implements Serializable Id GeneratedValue strategy GenerationType IDENTITY Column na
  • 从变量更新 pom 文件的 Shell 命令

    以前 我使用以下命令获取 pom xml 中的版本并将其从 1 递增 在增量快照版本之前 0 0 1 bin bash version grep ri
  • 如何读取 build.gradle 中 local.properties 中定义的属性

    我已经设定sdk dir and ndk dir in 本地属性 我如何读取值sdk dir and ndk dir in the 构建 gradle file 您可以通过以下方式做到这一点 Properties properties ne
  • Delphi、OLE 和 Microsoft Scheduler 的问题

    我有控制台 Delphi 应用程序 它可以通过 OLE 与 Excell 一起使用 代码示例非常简单 procedure SaveBaseRecordsToFile BaseName string PaymentRecords TPayme
  • 在 RCP 应用程序中添加包资源管理器会导致丢失一些图标

    在我的 eclispe rcp 应用程序中 我添加了一个包资源管理器 添加了 org eclipse jdt ui 当我使用 rcp app 时 当我通过 新建项目向导 创建一个新项目以添加 常规项目 时 该项目已正确创建 但包资源管理器视
  • 文档写入给出了奇怪的输出

    我正在编写一个脚本来检测 jQuery 如果它不存在 则插入 Google CDN 版本和本地后备 不要问为什么 这不是我的想法 问题是当我尝试执行文档时 write 我得到一个奇怪的输出 document write
  • git word-diff-regex 可以处理多行更改吗?

    考虑一个像这样的简单文件 承诺 foo Edited bar 现在 当我跑步时git diff word diff regex a z 它给了我 foo bar 所以 这表明这个词foo已被替换为bar 请注意 分号未标记为已更改 没关系