【问题标题】:How to apply git diff --binary patches without git installed?如何在未安装 git 的情况下应用 git diff --binary 补丁?
【发布时间】:2010-12-27 00:09:04
【问题描述】:

我使用 git diff 生成可应用于远程服务器以更新项目的补丁。

在本地,我运行:

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

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

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

如果试运行成功,我运行:

patch -p0 < example.patch

这很好用,除非 diff 包含二进制文件。今天,我发现我可以使用:

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

问题是生成的补丁文件不能使用patch应用。

如何在没有 git 安装服务器的情况下应用这些二进制补丁文件?

我想保持使用试运行的能力。

谢谢

【问题讨论】:

    标签: linux git deployment diff patch


    【解决方案1】:

    对于一个奇怪的答案,您可以做的是使用sshfs 将远程系统安装到您拥有 git 的位置,然后以这种方式运行您的命令。从不同的参考框架解决问题:与其想知道如何在没有工具的地方运行命令,不如创建一个数据进入工具的环境(通过 sshfs?)

    【讨论】:

    • 其实还不错。非常非常不错。我喜欢它
    • 唯一的担心是大补丁可能会有点慢(但如果你部署了很多小补丁,这不应该发生)另外,如果在你的过程中出现连接问题怎么办? '正在应用补丁?
    • @TarasMankovski 将 git binary delta 补丁应用于大二进制文件时存在更大的问题。
    【解决方案2】:

    在许多情况下,您也无法使用更高级的工具创建数据并使用不太高级的工具来使用它。 patch 适用于非二进制 git-diff 是一个令人高兴的巧合。 git diff 引入了标准差异的扩展。

    要实现目标,您可以:

    • 在目标系统上安装 git(这是最好的方法,真的)
    • 如 chiggsy 所说,将目标系统安装到本地
    • 只需scp/rsync 新文件。对小孩子来说还不错。

    【讨论】:

    • 嘿 Temoto,谢谢你的回答,但我正在寻找一个我还不知道的答案。
    【解决方案3】:

    使用这个

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

    您可以省略 --patch 标志,但您不会看到所有更改并检查修补过程。

    【讨论】:

    • 好吧,我一开始没弄明白。因此,如果您在远程服务器上没有 Git,唯一的方法就是复制修改后的二进制文件。据我所知,“补丁”不支持二进制差异。
    • 是的,标准补丁不支持二进制差异,但 git diff 可以生成二进制补丁。我想在没有在远程服务器上安装 git 的情况下应用它们。
    【解决方案4】:

    根据the change log,我们预计补丁版本 > 2.6.1 将支持 GIT 二进制差异。

    【讨论】:

    猜你喜欢
    • 2011-03-26
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多