问题标签 [git-apply]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
53 浏览

git - 如果没有删除行,git apply 可以应用多次

我有以下补丁

当我第二次使用 git apply 时,补丁并没有失败,而是将其附加在同一行。有什么办法可以防止这种情况发生吗?

此外,当我使用 git apply -R 时,它会删除添加的实例之一。

0 投票
1 回答
108 浏览

bash - Git应用忽略失败的补丁

我有一个 bash 脚本,它应用了一个目录中的所有 git 补丁(脚本见底部)。每次我在服务器上部署网站时都会运行此脚本。

我现在遇到了一个问题,几周后补丁抛出错误并退出脚本并出现错误“补丁不适用”。有谁知道是否有一种方法可以忽略损坏的/旧的补丁,并且可能只是显示脚本不再工作的错误,而不是完全退出导致我的网站部署失败的脚本?

0 投票
1 回答
530 浏览

git-merge - 不能将 `git mergetool` 与 `git am` 或 `git apply` 或 `patch` 一起使用

git mergetool很棒(在我的情况下,我使用 kdiff3)。但是,不可能使用它来解决来自git amor git apply(甚至是patch命令)的冲突。事实上,mergetool 需要 3 个文件才能工作(基础版本和两个修改版本),同时git am使用修改版本和补丁。

你知道一种git mergetool用于产生冲突的方法git am吗?

我认为有必要从修改后的版本和补丁中猜测基本文件。如果您分别考虑每个块,它看起来很棘手,但并非不可能。

0 投票
1 回答
1197 浏览

git - 使用在线工具应用 git-diff 补丁

有没有办法在没有 Linux(没有工作权限)或 Windows 工具(如 WinMerge)或(再次没有安装权限)的情况下应用差异。唯一的方法似乎是拥有一个在线工具:(

0 投票
3 回答
4629 浏览

git - 执行 git apply 时出现错误“删除 1 个前导路径名组件时 git diff 标头缺少文件名信息”

我通过命令创建了一个差异文件:

git --no-pager diff --no-index --stat pathA pathB >\diff.log

接下来,我执行了一个命令:

git apply --index --ignore-space-change --ignore-whitespace \diff.log

在执行过程中我遇到了一个错误:

错误:删除 1 个前导路径名组件时,git diff 标头缺少文件名信息(第 2138 行)

第 2138 行导致:

第2136章

2137 新文件模式 100644

2138 索引 0000000000000000000000000000000000000000..e69de...

第2139章

我尝试了一个命令“git apply --reject ...”,但它也没有用。我还添加了忽略 chmod 更改的配置(git config core.fileMode false)并且没有任何更改。

0 投票
1 回答
1749 浏览

git - 如何“git-am”应用使用“git-format-patch --no-prefix”创建的补丁?

--no-prefix我有理由使用带有选项的 git-format-patch 将我的 git 提交创建为补丁文件。

此选项将补丁输出更改为不在补丁文件的文件路径中添加特定于 git-diff 的前缀a// 。b/它允许工具喜欢patch应用补丁文件而无需-p1作为参数传递。

到目前为止一切都很酷。但是,似乎我不能再用 Git 本身(git-am)实际应用它们了:

我现在如何应用它们git-am,同时保持简单的patch兼容性?

¹它允许我将它用作 Bazel 中的补丁文件,而无需自定义补丁命令,因为您需要使用patch -p1 [...].

0 投票
1 回答
585 浏览

git-diff - 如何 git-apply 一个 git word diff

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

我想将其用作git apply.

然而,vanillagit apply words.diff失败了fatal: corrupt patch at line 6——一个正常的差异文件会以那个不受影响的行中的一个空格开头——而且我没有看到任何可以git apply在其联机帮助页中接受 word-diff 文件的内容。

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

0 投票
1 回答
2261 浏览

git - 当先前的应用跳过大块时,“git apply”会给出错误“不匹配索引”

git 版本 2.19.0

我对文件“myfile”有两个提交,我正在从一个分支挑选到另一个分支。在最后一个补丁应用期间,我收到“错误:mydir/myfile:与索引不匹配”。

1)我生成两个补丁文件commit1.patch(最旧)和commit2.patch(最新):

2)我应用补丁#1:

...它按预期失败,因为补丁中的两个大块修改了在提交 #1 之前的提交中添加的代码块。我没有应用那个较旧的提交,因为这是我不希望在目标分支中进行的修复。

3) 我使用 --reject 而不是 -3 重新应用补丁 1 以跳过应用两个不适用的大块:

...它不记录任何错误并记录它按预期跳过的两个补丁块,并应用补丁的其余部分。

4)我应用补丁#2:

为什么错误“与索引不匹配”? 'git status' 显示暂存为空,'git fsck' 没有报告错误,'git diff --cached' 没有报告任何内容。

我找到了一个解决方法:新鲜克隆目标分支,编辑掉无法从commit1.patch应用的两个大块,然后执行:

......没有错误

除了首先手动从 commit1.patch 中删除两个大块之外,如何解决“不匹配索引”错误 commit2.patch 输出?

0 投票
2 回答
1305 浏览

git - git am:补丁格式检测失败。git apply 也失败了

我正在尝试学习 git 补丁,所以我设置了一个测试仓库并进行了一些提交。

然后我创建了一个补丁:git format-patch -1 HEAD --stdout > changes.patch

接下来,我检查了一个新分支并尝试使用 changes.patch: git am .\changes.patch。它给了我错误Patch format detection failed.

我在这里搜索,发现了这个相关的问题

所以我尝试了git apply .\changes.patch。它给了我error: unrecognized input

补丁文件对我未经训练的眼睛来说似乎很好:

我认为可能是补丁与 repo 位于同一目录中,因此我将其移至另一个目录。结果是一样的。

我也注意到很多人<在命令中有一个,所以我试了一下:git am < ..\changes.patch. 显然这不是有效的语法。

这是在带有 PowerShell 的 Windows 上使用 64 位 git。

有任何想法吗?

0 投票
1 回答
5259 浏览

bash - git apply 错误没有这样的文件或目录

我有两个单独的 git 存储库:A 和 B。一些存储库 B 文件已经存在于项目 A 的子文件夹中。我的目标是为存储库 B 创建补丁,然后将它们应用到存储库 A 中的子文件夹以保存存储库 B 的历史记录在合并它们时。问题是补丁无法创建新文件。例如:

假设这个文件夹结构: /home/user/B/..bunch 目录和 /home/user/A/ext/lib/B/..bunch 目录

cd /home/user/B

git format-patch "xx..xx" -o /home/user/A/ (创建补丁文件)

cd /home/user/A

git apply -v --directory=ext/lib/B/0001-foo-12345.patch

工作正常,因为补丁没有创建任何新文件或尝试访问 B 中存在但 A 中不存在的文件夹

cd /home/user/A

git apply -v --directory=ext/lib/B/0002-foo2-6789.patch

不起作用并抛出此错误:检查补丁 ext/lib/B/xyz/test.c... 错误:ext/lib/B/xyz/test.c:没有这样的文件或目录。

到目前为止,我已经尝试了以下命令:

git apply -v --directory=/home/user/A/lib/B/ --include=bb/cc --exclude=cc/ --exclude=bb/ --include=* 0002-foo2-6789.patch

git apply -v --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch

git am --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch