如何 git 应用 git word diff

2023-11-21

我需要编辑一个混乱的提交,该提交仅更改了后续几行中的一个单词,保留其中一些更改并删除其他更改。 这些变化很容易看出git diff --word-diff,并且以这种格式,我可以轻松地编辑帅哥来做我想做的事情,但现在我有一个像这样的文件

diff --git a/cldf/forms.csv b/cldf/forms.csv
index 46c12a4..0374ece 100644
--- a/cldf/forms.csv
+++ b/cldf/forms.csv
@@ -1783,8 +1783,8 @@ ID,Lect_ID,Concept_ID,Form_according_to_Source,Form,Local_Orthography,Segments,C
1782,adan1251-lawah,day,dilɛlɛ,dilɛlɛ,dilele,d i l ɛ l ɛ,Lit. 'all day'.,datasets_Adang_Lawahing_tsv
1783,adan1251-lawah,day,wɛd saha,wɛd_saha,wed saha,w ɛ d _ s a h a,midday' lit. 'hot sun',datasets_Adang_Lawahing_tsv
1784,adan1251-lawah,morning,lalami,lalami,lalami,l a l a m i,,datasets_Adang_Lawahing_tsv
1785,adan1251-lawah,yesterday,ʔu:mi,ʔuːmi,[-umi-]{+'umi+},ʔ uː m i,,datasets_Adang_Lawahing_tsv
1786,adan1251-lawah,day_before_yesterday,ʔotariŋ alumi,ʔotariŋ_alumi,[-otaring-]{+'otaring+} alumi,ʔ o t a r i ŋ _ a l u m i,,datasets_Adang_Lawahing_tsv
1787,adan1251-lawah,tomorrow,dilɛlɛ,dilɛlɛ,dilele,d i l ɛ l ɛ,,datasets_Adang_Lawahing_tsv
1788,adan1251-lawah,day_after_tomorrow,a:lu,aːlu,alu,aː l u,,datasets_Adang_Lawahing_tsv
1789,adan1251-lawah,twilight_dawn,lalami,lalami,lalami,l a l a m i,"(lit, 'early morning')",datasets_Adang_Lawahing_tsv

我想用它作为补丁git apply.

然而,香草git apply words.diff失败了fatal: corrupt patch at line 6– 普通的 diff 文件将以未受影响的行中的空格开头 – 我没有看到任何可能使git apply在其联机帮助页中接受 word-diff 文件。

我怎样才能说服git apply采取这种格式的文件作为补丁?或者我如何轻松地将这个文件转换为有效的补丁?


我找不到可行的解决方案,因此我编写了一个脚本,将 word-diff 转换为可以应用的常规 diff:

#!/usr/bin/env perl
# convert-word-diff.pl -- rev. 2, this script is licensed under WTFPLv2

my (@minus, @plus);

sub flush_diff {
  print join("", map { "-$_" } @minus);
  print join("", map { "+$_" } @plus);
  @minus = (); @plus = ();
}

while (my $line = <>) {
  if ($line =~ /^(?:index |diff |\+\+\+ |\-\-\- |@@ )/) {
    flush_diff();
    print $line;
    next;
  }

  my $is_diff_line;

  if ($line =~ /\[\-.*\-\]/ || $line =~ /\{\+.*?\+\}/) {
    my $copy = $line;
    $copy =~ s/\[\-(.*?)\-\]\{\+.*?\+\}/\1/g;
    $copy =~ s/\[\-(.*?)\-\] ( )?/ \1 /g;
    $copy =~ s/\{\+.*?\+\} ?//g;
    push(@minus, $copy);

    $copy = $line;
    $copy =~ s/\[\-.*?\-\]//g;
    $copy =~ s/\{\+(.*?)\+\}/\1/g;
    push(@plus, $copy);
    $is_diff_line = 1;
  }

  unless ($is_diff_line) {
    flush_diff();
    print " $line" ;
  }
}

flush_diff();

Usage:

cat word-diff.txt | perl convert-word-diff.pl | git apply

希望我没有搞砸任何事情,并且您使用的是 Linux/Mac 并且有 Perl。 :-)

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

如何 git 应用 git word diff 的相关文章

  • 是否可以“git diff”2 个字符串?

    我有 2 个字符串 我想要它们之间的 git diff 我可以创建 file1 并添加 string1 作为其内容 然后我可以创建 file2 并添加 string2 作为其内容 然后我可以 git diff file1 和 file2 但
  • 如何在 github 中比较/区分 master 和 fork 存储库的特定版本

    Github 上有两个存储库 Repo1 是一个有定期提交的master 尚未被我分叉 Repo2 是大约 2 年前 Repo1 的一个分叉 尚未由我分叉 我想根据 Repo1 中由 Repo2 分支的代码版本 大约 2 年前 在两个存储库
  • Git 从浅克隆中查找自 以来修改的文件

    我在 CI 盒子上运行测试 为了加快速度 我只是做了一个浅克隆 git clone depth 1 email protected JoshCheek some repo git 假设所有测试都通过 我想触发管道中的下一步 触发的内容取决于
  • git-diff:不考虑行顺序

    我的存储库中有一个由软件程序生成的文件 该程序有时会重新排序该文件上的行 这并不重要 因为行顺序并不重要 问题是 当执行 git diff 时 很难看出任何内容是否真正发生了变化 无论如何 是否有执行不考虑行顺序的差异 或者 如果 git
  • 如何区分提交与其父提交

    除了编写别名或脚本之外 是否有更短的命令来获取特定提交的差异 git diff 15dc8 15dc8 如果您只提供单个提交 IDgit diff 15dc8 它与针对 HEAD 的提交不同 Use git show COMMIT 它将向您
  • Git diff:忽略以单词开头的行

    据我所知here https stackoverflow com questions 53450186 git diff show only changes not matching a pattern 我们可以告诉git diff忽略以
  • git-diff 中有类似 diff --show-c-function 的东西吗?

    我一直在处理 git 存储库中的一个文件 如果我有该文件的原始 git 版本的副本 我可以运行 diff show c function 来比较这两个文件 其中 理论上 它显示了已被调用的任何函数的全部内容改变了 这对于弄清楚我专门对文件做
  • 在 Git 中生成特定提交的 diff 文件

    当 head 处于特定提交时 我想获取一个 diff 文件 以便可以将 head 降低到一个级别 然后在应用和不应用 diff 文件的情况下尝试测试功能 那么有没有办法生成特定提交的 diff 文件 尽管有一种方法可以在提交之前和之后更改头
  • 有没有办法逐句而不是逐行比较文件?

    只是想让 diff 更好地处理某些类型的文档 例如 使用 LaTeX 我可能有一个很长的段落 严格来说只有一行 但如果只更改一个句子 我不想看到整个段落 特别是如果我正在运行某种版本控制并且合著者与我编辑同一段落 但不是同一句子 我不希望这
  • 如何在 Git 中查看文件历史记录?

    通过 Subversion 我可以使用乌龟SVN https en wikipedia org wiki TortoiseSVN查看文件的历史记录 日志 我怎样才能用 Git 做到这一点 我只是寻找特定文件的历史记录 然后比较不同版本的能力
  • 如何告诉 git 显示我在上次提交中所做的更改的差异? [复制]

    这个问题在这里已经有答案了 With git 如何查看上次提交的更改 我的意思是我想看到我的最后一次提交和之前的提交之间的差异 我知道我可以在 Github 浏览器上看到它 但我想在终端上的本地提交历史记录中看到它 我知道我可以在提交之间进
  • Github/compare:如何比较两个不同的文件(不同的文件名,都在 HEAD 中)?

    我可以使用github吗 compare在HEAD中显示两个不同源文件之间的差异 这是我在命令行上执行此操作的方法git diff git diff HEAD docs tutorial 01 boxed function pointers
  • git show commit 无法比较

    我希望在 Beyond Compare 或任何其他单独的 diff 工具中查看特定提交 同时通过以下方式查看它git show 我尝试查看 git show difftool config 的帮助 但找不到任何内容 有谁知道如何做到这一点
  • 配置多个 git mergetool 和 difftool 以便根据扩展选择合适的工具

    当我执行 git difftool 时 它会递归地为所有文件运行默认 difftool 我编写了一个脚本来根据扩展名选择适当的 difftool 并在脚本中调用 git difftool t mytool difftool 将所有参数重定向
  • git:为什么 git diff 没有显示任何差异?

    如果我在我的存储库上运行 git status 它会给出 On branch master Changes to be committed use git reset HEAD
  • 如何获取 git diff 文件,并将其应用到作为同一存储库副本的本地分支?

    我有一个由同事创建的 diff 文件 并且希望将该 diff 文件中列出的更改应用到完全相同存储库的本地分支 我无权访问用于生成此差异文件的该工作人员的电脑或分支 显然 我可以逐行重新输入所有内容 但我不想让系统遭受人为错误 做到这一点最简
  • 如何将我的本地分叉存储库与可能对原始存储库所做的更改进行比较?

    我想将我分叉的存储库的本地克隆与原始 上游存储库进行比较 以查看是否进行了进一步的提交 需要我拉取 合并 我想从命令行执行此操作 我使用以下命令将原始存储库添加到我的遥控器列表中 git remote add upstream
  • 显示哪些与特定模式匹配的文件在 git 分支之间发生了更改

    我想合并两个分支 但在此之前 我想检查文件名以以下字符结尾的所有文件上两个分支之间的更改 twig 是否可能 或者我应该使用一些 bash magic 像git diff name only branch1 branch2 grep twi
  • 有什么方法可以有效地应用大型 git 补丁吗?

    我们收到了一个大补丁 修改了大约 17000 个文件 其大小为5 2G 应用补丁时git apply 3 12个小时后还没有完成 我们将每个文件的补丁分成更小的补丁 然后一一应用它们 这样至少我们可以看到进度 再次卡在一个文件补丁上 仍然有
  • `git add --patch` 和 `--word-diff`

    git add patch提供了一个很好的界面 用于检查未暂存的更改 然后仅暂存下一次提交中需要的更改 很好 除了一件事 没有明显的方法来选择哪个diff视图来使用 特别是 我希望能够配置git add patch以同样的方式向我呈现差异g

随机推荐

  • 重载超类的函数

    C 标准中是否有某些内容阻止我重载超类的函数 从这对类开始 class A super class int x public void foo int y x y original definition class B public A d
  • 我应该对 jQuery 插件的缩小版本进行版本控制吗?

    假设我编写了一个 jQuery 插件并将其添加到我的存储库 在我的例子中为 Mercurial 这是一个单一文件 比如说jquery plugin js 我使用 BitBucket 来管理此存储库 其功能之一是下载页面 所以 我补充一下jq
  • 如何找出touchmove javascript事件的实际event.target?

    我正在尝试在我的 Web 应用程序中开发一个简单的拖放 UI 可以用鼠标或手指拖动项目 然后将其放入多个放置区域之一 当一个项目被拖过放置区域 但尚未释放 时 该区域会突出显示 标记安全着陆位置 这对于鼠标事件来说工作得很好 但我在 iPh
  • PyInstaller 文件大小非常大

    我使用 wxPython 制作了简单的代码编辑器 文件大小 Python 文件 为 1 3 KB 但是当我使用 PyInstaller 创建可执行文件时 我得到30 MB 文件 有没有办法减小文件大小 顺便说一句 我没有导入整个wx库 只有
  • Discord Bot 无法按名称或 ID 找到频道

    我正在尝试使用 DiscordJS 制作一个不和谐机器人 我想获取特定频道 const Discord require discord js var bot new Discord Client var myToken NDQ2OTQ1 v
  • Font-face 在 IE、otf 字体中不起作用

    我知道这个问题被问过多次 但在尝试后我无法让它工作 这是我用来导入自定义字体的简单 CSS 另外 我将其与引导程序一起使用 font face font family Montserrat Black src url Montserrat
  • 在成员函数内的 lambda 捕获列表中使用数据成员

    以下代码可以使用 gcc 4 5 1 进行编译 但不能使用 VS2010 SP1 进行编译 include
  • 退出 Smarty 以手动执行

    我面临的问题是 我不太确定如何在没有框架或模板引擎的情况下进行开发 我开始以这种方式编码 现在我想学习基础知识 我曾经使用过这种 MVC 模式 使用 Codeigniter 和 Smarty 作为模板引擎 我现在想做的是使用原始 php 而
  • 从远程 ssh 存储库进行 Git 克隆 - 在执行克隆命令之前更改远程网络上的机器

    我想将 git 存储库从我公司的服务器克隆到我的个人计算机 从 外部 访问这些服务器的唯一方法是通过 ssh 登录到 machine1 ssh email protected 不幸的是 git 没有安装在该特定机器上 所以像这样的 git
  • 如何提取

    标签之间的文本

    我想从 HTML 页面中提取文本p and li标签 这样我就可以开始对页面进行标记 为每个页面构建倒排索引 以便回答搜索查询 我怎样才能得到p使用 jsoup 的标签 Elements e doc select 该参数中要写入的字符串是什
  • 传递数据帧以在函数内进行变异

    我想传递一个数据框及其列 以供函数内的 dplyr 的 mutate 处理 这是一个例子 multifun lt function dataf vari mutate dataf newvar vari 2 multifun mtcars
  • 在 Haskell 中设置 argv[0]?

    有没有办法设置argv 0 在 Haskell 程序中 例如 用 ghc 编译的程序 我找到了getProgName and withProgNameSystem Environment 中的函数 但它似乎没有改变什么ps报告 Ubuntu
  • QComboBox AbstractItemView::item

    有没有办法可以增加 QComboBox 控件中列出的项目的高度 我尝试按照此处的建议进行操作在 QTDevNet 论坛中但没有运气 QComboBox QAbstractItemView item margin top 3px 我也尝试过这
  • 将 numpy 类型转换为 python

    我有一个从 pandas 生成的以下形式的字典列表 我想把它转换成json格式 list val 1 0 685 2 0 8 output json dumps list val 但是 json dumps 抛出错误 TypeError 6
  • PHP:如何使用 smtp 设置发送带有附件的电子邮件?

    我使用以下代码成功发送电子邮件 但现在我想在电子邮件中附加一个文本文件 例如 test txt 任何想法 require once Mail php from Usman lt email protected gt to Naveed lt
  • 具有 byte[] 字段作为存储过程参数的 DataTable

    我一直在重复使用这种使用 DataTable 作为存储过程参数的方法 并且效果很好 这是简化的工作代码 using dbEntities dbe new dbEntities var dt new dataTable dt Columns
  • 使用 OpenCV fitEllipse() 进行圆拟合

    使用OpenCV是否有效拟合椭圆用于圆拟合 fitEllipse 返回cv RotatedRect如何平均宽度和高度来获得拟合的圆半径 我认为使用的 有效性 cv fitEllipse拟合圆取决于您所需的拟合精度 例如 您可以在测试集上运行
  • HTMLCanvasElement 上未解决的方法 captureStream

    我的画布元素和方法有奇怪的情况captureStream 根据文档 HTMLCanvasElement 有一个方法captureStream 然而我的 Angular6 应用程序声称没有这样的方法 所以这段代码将不起作用 let canva
  • ITextSharp 解析包含图像的 HTML:它解析正确,但不会显示图像

    我正在尝试使用 ITextSharp 库从 html 生成 pdf 我能够创建 pdf 并将 html 文本转换为 pdf 文本 段落 我的问题 pdf 不显示我的图像 我的imghtml 中的元素 我所有的img我的 html 中的 ht
  • 如何 git 应用 git word diff

    我需要编辑一个混乱的提交 该提交仅更改了后续几行中的一个单词 保留其中一些更改并删除其他更改 这些变化很容易看出git diff word diff 并且以这种格式 我可以轻松地编辑帅哥来做我想做的事情 但现在我有一个像这样的文件 diff