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

13

我使用git diff生成补丁,然后将其应用到远程服务器上以更新项目。

在本地,我运行:

git diff --no-prefix HEAD~1 HEAD > example.patch

将 example.patch 上传到远程服务器并运行:

patch --dry-run -p0 < example.patch

如果干运行成功,我会运行:

patch -p0 < example.patch

这段代码很好用,但是在处理二进制文件时会出现问题。今天我发现可以使用:

git diff --no-prefix --binary HEAD~1 HEAD > example.patch

问题在于生成的补丁文件无法使用patch工具进行应用。

没有在服务器上安装git时,如何应用这些二进制补丁文件?

我希望能保留使用--dry-run的功能。

谢谢。

4个回答

6

如果你想要一个另类的答案,可以使用sshfs将远程系统挂载到你拥有git的地方,然后以这种方式运行命令。从不同的参考框架来解决问题:不要纠结于如何在工具不存在的地方运行命令,为什么不创建一个环境,在这个环境中数据通过sshfs传输到你的工具中呢?


其实很不错。非常非常不错。我喜欢它。 - Taras Mankovski
唯一的问题是,如果您部署了许多小补丁,则可能会有点慢。此外,如果在应用补丁时出现连接问题,该怎么办? - Taras Mankovski
@TarasMankovski 当对大型二进制文件应用git二进制增量补丁时,存在更大的问题。 - Roy

2
在许多情况下,包括这种情况,您不能使用更高级的工具创建数据并在不太先进的工具中使用它。令人高兴的是patch可以用于非二进制的git-diff。git diff引入了标准diff的扩展。
为了实现目标,您可以:
  • 在目标系统上安装git(这确实是最好的方法)
  • 像chiggsy所说的那样将目标系统挂载到本地
  • 只是使用scp/rsync传输新文件。对于小文件来说效果不错。

1
嘿Temoto,谢谢你的回答,但我正在寻找一个我还不知道的答案。 - Taras Mankovski

2
根据变更日志,我们可以期待版本号大于2.6.1的补丁支持GIT二进制差异。

1
补丁2.7.5仍然无法在我的系统上运行 :( - David Fraser
1
http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS 的变更日志似乎也没有提到这个问题... - David Fraser
1
实际上并没有。目前也没有其他patch(1)支持git二进制差异的迹象。 - Roy

-7

使用这个

git apply example.patch
git add --patch
git commit

您可以省略 --patch 标志,但您将无法看到每个更改和检查修补过程。

好的,我一开始没有完全理解。所以如果远程服务器上没有Git,唯一的方法就是复制修改后的二进制文件。据我所知,“补丁”不支持二进制差异。 - Zebooka
是的,标准补丁不支持二进制差异,但是git diff可以生成二进制补丁。我想在远程服务器上没有安装git的情况下应用它们。 - Taras Mankovski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接