如何将补丁应用到git中,包括新文件和提交信息?

5

我正在寻找一种通用的方法,以最佳方式将由git showgit format-patch甚至是diff在提交中生成的补丁文件转换。

我希望具备以下功能:

  1. 现有文件应被修改并为新提交进行修改。
  2. 应创建新文件并为新提交进行修改。
  3. 文件删除也应为新提交进行修改。
  4. 如果使用git format-patch创建了补丁,则应解析提交消息并用于新提交。
  5. 如果使用git show创建了补丁,则应解析提交消息并用于新提交。
  6. 如果补丁不是由上述两个工具创建的,则仍应进行处理。
  7. CLI应能够接受多个补丁,从而创建多个提交。

在考虑创建新工具之前,我主要关注现有的解决方案。

先前的研究:

最接近的工具是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已经解决了。

Diff、show 和 format-patch 用于不同的目的。 - jthill
@jthill 可能是真的,但这并没有帮助回答问题,请看我的评论,回答 Andreas 的答案。有什么我可以做来让问题更清晰吗? - Pavel Šimerda
1个回答

0

我知道你在询问 diffgit format-patchgit show,但这些命令都只会传输 更改,而不是提交。

有一个名为 git bundle 的命令可以传输提交,包括作者、时间和其他所有信息。你可以阅读 文档 了解更多信息。

基本上,你需要创建一个包含至少新提交的捆绑文件,然后将该文件发送给其他人。接收者将把文件克隆到一个仓库中,你可以从中合并、拉取、变基或执行其他任何操作。


我的问题源于软件包管理,其中您无法选择创建补丁的工具,而是必须使用在实际应用中使用的任何格式。 - Pavel Šimerda

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