我正在寻找一种通用的方法,以最佳方式将由git show
、git format-patch
甚至是diff
在提交中生成的补丁文件转换。
我希望具备以下功能:
- 现有文件应被修改并为新提交进行修改。
- 应创建新文件并为新提交进行修改。
- 文件删除也应为新提交进行修改。
- 如果使用
git format-patch
创建了补丁,则应解析提交消息并用于新提交。 - 如果使用
git show
创建了补丁,则应解析提交消息并用于新提交。 - 如果补丁不是由上述两个工具创建的,则仍应进行处理。
- 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已经解决了。