如果没有安装git,我的客户该如何应用由git diff
创建的补丁呢?
我已经尝试使用patch
命令,但它总是要求提供要打补丁的文件名。
git diff > patchfile
并且
patch -p1 < patchfile
虽然许多人在评论和其他答案中指出补丁不理解添加,删除和重命名,但是以下操作可以工作:git apply patchfile
。如果需要处理文件的添加、删除和重命名,则没有其他选项。
编辑 2015年12月
patch
命令的最新版本(2.7,于2012年9月发布)支持“diff --git”格式的大多数特性,包括重命名、复制、权限更改和符号链接差异(尚不支持二进制差异)(发布公告)。
因此,只要使用当前/最新版本的 patch
,就不需要使用 git
就能将其差异应用为补丁。
git diff > patchfile
,但是执行 patch -p1 < patchfile
。 - Jakub Narębskirelative
选项,例如:git diff --no-prefix --relative=my/relative/path > patchfile
。 - Koen.patch -p1 < patchfile
命令不需要安装 Git。第一个命令是生成 diff 的命令,而不是应用 diff 的命令。您好,请问还有其他需要翻译的内容吗? - Andrey Kuznetsov试试这个:
patch -p1 < patchfile
git diff
命令的输出中包含a/
和b/
前缀,因此使用patch -p1
命令可以忽略这些前缀来应用补丁文件。 - wberry使用
git apply patchfile
如有可能。
patch -p1 < patchfile
可能有副作用。
git apply
还可以处理文件添加、删除和重命名,只要它们在 git diff
格式中描述,而这是 patch
无法做到的。最后,git apply
是一个“全部应用或全部中止”模型,即要么全部应用要么什么都不做,而 patch 可以部分地应用补丁文件,导致你的工作目录处于一种奇怪的状态。
--dry-run --verbose
对于确定是否会产生任何副作用非常有用。(使用补丁 v2.5.8) - spylegit apply patchfile -
... the only sane answer..." - 这几乎是可笑的。每次 OpenSSL 开发人员发送补丁给我测试时,Git 都无法应用它。这是每一次都出现的问题。我还没有看到过这个愚蠢的工具成功应用一个补丁。 - jww我使用
patch -p1 --merge < patchfile
试试这个:
$ git apply file.diff
patch
并不完全支持这种格式。 - Aryeh Leib Taurog