如何从Git存储库中提取提交补丁

4
我想从git仓库中提取所有补丁,或至少从选定的标签或提交中提取所有祖先。
我需要将每个提交作为单独的补丁。每个补丁应该被放入自己的文件中。该命令可以创建一个目录或tar归档文件。
最接近的我能找到的是git-format-patch,但它会将所有内容���出为单个补丁。

你是如何运行 format-patch 的?默认情况下,它应该为每个提交创建一个补丁文件。 - kfb
你是对的。由于某些原因,在以前的测试中,补丁要么会被打印到标准输出,要么在输出目录时根本不会生成。 然而,现在我得到了正确的结果,有一个补丁列表... - Cyan
2个回答

3
您可以使用git-format-patch来实现这一点:
git format-patch -o patches --root HEAD

它将会把补丁写入到patches目录中。当然,你可以用特定提交的SHA或某个标签替换HEAD

0

警告: 使用 git format-patch -o path/to/folder,其中中间目录 path/to 尚未创建,这意味着命令将失败。

"git format-patch -o <outdir>" 相当于 "mkdir <outdir>",而不是 "mkdir -p <outdir>",这已在 Git 2.24 (Q4 2019) 中得到纠正。

请查看 提交 edefc31(2019年10月11日),作者为Bert Wesarg (bertwesarg)
(由Junio C Hamano -- gitster --提交 f1afbb0中合并,日期为2019年10月18日)

format-patch:创建输出目录的前导组件

签名:Bert Wesarg

'git format-patch -o <outdir>' 相当于 'mkdir <outdir>',而不是 'mkdir -p <outdir>'。

避免在可能存在安全隐患的前导目录上使用 'adjust_shared_perm'。
通过暂时禁用 'config.sharedRepository'(就像 'git init' 一样)来实现。

并且(仍然适用于 Git 2.24,2019 年第四季度):

请查看 19c29e5 提交记录(2019年10月21日),提交者为Bert Wesarg (bertwesarg)
(合并于c555caa 提交记录,由Junio C Hamano -- gitster --执行,于2019年10月24日)

t4014:使输出目录测试自包含

签名作者:Bert Wesarg

正如Gábor所指出的那样, edefc31873中的新测试("format-patch: create leading components of output directory",2019-10-11,Git v2.24.0-rc0 -- merge listed in batch #0)无法独立运行。
修复此问题。


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