问题标签 [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.
git - 如果没有删除行,git apply 可以应用多次
我有以下补丁
当我第二次使用 git apply 时,补丁并没有失败,而是将其附加在同一行。有什么办法可以防止这种情况发生吗?
此外,当我使用 git apply -R 时,它会删除添加的实例之一。
bash - Git应用忽略失败的补丁
我有一个 bash 脚本,它应用了一个目录中的所有 git 补丁(脚本见底部)。每次我在服务器上部署网站时都会运行此脚本。
我现在遇到了一个问题,几周后补丁抛出错误并退出脚本并出现错误“补丁不适用”。有谁知道是否有一种方法可以忽略损坏的/旧的补丁,并且可能只是显示脚本不再工作的错误,而不是完全退出导致我的网站部署失败的脚本?
git-merge - 不能将 `git mergetool` 与 `git am` 或 `git apply` 或 `patch` 一起使用
git mergetool
很棒(在我的情况下,我使用 kdiff3)。但是,不可能使用它来解决来自git am
or git apply
(甚至是patch
命令)的冲突。事实上,mergetool 需要 3 个文件才能工作(基础版本和两个修改版本),同时git am
使用修改版本和补丁。
你知道一种git mergetool
用于产生冲突的方法git am
吗?
我认为有必要从修改后的版本和补丁中猜测基本文件。如果您分别考虑每个块,它看起来很棘手,但并非不可能。
git - 使用在线工具应用 git-diff 补丁
有没有办法在没有 Linux(没有工作权限)或 Windows 工具(如 WinMerge)或(再次没有安装权限)的情况下应用差异。唯一的方法似乎是拥有一个在线工具:(
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)并且没有任何更改。
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 [...]
.
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
将这种格式的文件作为补丁?或者我怎样才能轻松地将这个文件转换成一个有效的补丁?
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 输出?
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。
有任何想法吗?
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