如何在没有安装Git的情况下应用`git diff`补丁?

And*_*sov 278 git diff patch

我的客户端如何应用git diff未安装git 创建的补丁?我试图使用patch命令,但它总是要求文件名修补.

And*_*sov 419

git diff > patchfile
Run Code Online (Sandbox Code Playgroud)

patch -p1 < patchfile
Run Code Online (Sandbox Code Playgroud)

工作,但很多人注意到评论和其他答案补丁不理解添加,删除和重命名.没有选项,但git apply patchfile如果您需要处理文件添加,删除和重命名.


编辑 2015年12月

最新版本的patch命令(2.7,2012年9月发布)支持"diff --git"格式的大多数功能,包括重命名和副本,权限更改和符号链接差异(但尚未发布二进制差异)(发布公告).

因此,如果使用当前/最新版本,patch则无需使用git能够将其差异应用为补丁.

  • 或者使用`git diff> patchfile`,但是`patch -p1 <patchfile` (97认同)
  • 如果要创建存储库子路径的补丁文件,可以使用`relative`选项,如:`git diff --no-prefix --relative = my/relative/path> patchfile` (11认同)
  • `patch -p1 <patchfile`不需要安装git.第一个命令演示了生成diff的命令,而不是应用它. (2认同)

sup*_*pie 73

试试这个:

patch -p1 < patchfile
Run Code Online (Sandbox Code Playgroud)

  • @chrisjlee`git diff`会在输出中放入`a /`和`b /`前缀,因此`patch -p1`忽略了应用补丁文件的那些. (15认同)
  • 在开始时剥离斜线.见[man patch](http://unixhelp.ed.ac.uk/CGI/man-cgi?patch+1) (8认同)
  • -p1参数有什么作用? (4认同)

Sol*_*ang 49

使用

git apply patchfile
Run Code Online (Sandbox Code Playgroud)

如果可能的话.

patch -p1 < patchfile 
Run Code Online (Sandbox Code Playgroud)

有潜在的副作用.

git apply如果以git diff格式描述文件,也会处理文件添加,删除和重命名,这是不可行的patch.最后,git apply是"全部应用或全部中止"模型,其中应用了所有内容或者没有任何内容,而补丁可以部分应用补丁文件,使您的工作目录处于奇怪的状态.

  • 是的,`git apply`是最好的方法,但是这个问题特别询问如何在没有安装Git*的情况下应用补丁*. (10认同)

den*_*lin 7

我用

patch -p1 --merge < patchfile
Run Code Online (Sandbox Code Playgroud)

这样,冲突可以照常解决.