【问题标题】:How to apply a patch to git including new files and commit message?如何将补丁应用于 git,包括新文件和提交消息?
【发布时间】:2015-08-10 18:13:42
【问题描述】:

我正在寻找一种通用的方法来以最好的方式在提交中转换由git show、git 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 规范文件中应用以下格式的补丁时:

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 这可能是真的,但无助于回答问题,请参阅我的评论以回答 Andreas。有什么办法可以让问题更清楚吗?

标签: git version-control diff patch


【解决方案1】:

我知道你在询问 diff、git format-patch 和 git show,但所有这些都将转移更改,而不是提交。

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

基本上,您将创建一个至少包含新提交的捆绑文件,然后发送该文件。接收者会将文件克隆到一个存储库中,您可以从该存储库中进行合并、拉取、变基或任何操作。

【讨论】:

  • 我的问题是由包管理引起的,您无法选择创建补丁的工具,而是需要使用野外使用的任何格式。
猜你喜欢
  • 2019-12-11
  • 2012-09-05
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多