如何将补丁应用于git,包括新文件和提交消息?

时间:2015-05-28 09:54:40

标签: git version-control diff patch

我正在寻找一种通用的方式来尽可能地在提交中转换由git showgit format-patch甚至diff生成的补丁文件。

我希望以下功能:

  1. 应修改现有文件,并为新提交暂停修改。
  2. 应为新提交创建和暂存新文件。
  3. 也应该为新提交暂存文件删除。
  4. 如果补丁是使用git format-patch创建的,则应解析提交消息并将其用于新提交。
  5. 如果补丁是使用git show创建的,则应解析提交消息并将其用于新提交。
  6. 如果补丁不是由上述两个工具创建的,则仍应处理它。
  7. CLI应该能够接受多个补丁,从而创建多个提交。
  8. 在考虑创建新工具之前,我对现有解决方案最感兴趣。

    以前的研究:

    最接近的工具是git am,但是#5和#6失败,因此它没有用处。另一方面,git apply不会自己创建提交,至少会失败#2和#5。我不知道哪些工具比那两个更成功。

    以下列格式应用RPM specfile中的补丁时:

    Patch0: abc.patch
    Patch1: xyz.patch
    

    我目前正在使用以下sed命令构建脚本:

    sed -re 's/.*: *(.*)/git apply \1 \&\& git add . \&\& git commit -am \1/'
    

    这当然不会做#4和#5,因为它总是使用补丁文件名作为提交消息,并且#7可以解决。

1 个答案:

答案 0 :(得分:0)

我知道您在询问diffgit format-patchgit show,但所有这些都会转移更改,而不是提交。

有一个名为git bundle的命令将转移提交,包括作者,时间和所有内容。您可以阅读docs

基本上你将创建一个至少包含新提交的包文件,然后发送该文件。接收方将文件克隆到一个存储库,您可以合并,提取,重组或其他任何东西。