【发布时间】:2015-08-10 18:13:42
【问题描述】:
我正在寻找一种通用的方法来以最好的方式在提交中转换由git show、git format-patch 甚至diff 生成的补丁文件。
我希望有以下功能:
- 应修改现有文件,并为新提交暂存修改。
- 应为新提交创建和暂存新文件。
- 也应该为新的提交分阶段删除文件。
- 如果补丁是使用
git format-patch创建的,则应解析提交消息并将其用于新提交。 - 如果补丁是使用
git show创建的,则应解析提交消息并将其用于新提交。 - 如果补丁不是由上述两个工具创建的,它仍然应该被处理。
- 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