我想将complete history of Linux列为一系列补丁(统一差异格式),我可以自动处理从第一个补丁到今天的补丁。从理论上讲,这将允许我从日志中重建现代版本。为此我运行以下命令:
git -c diff.renameLimit=30000 log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0
不幸的是,似乎git log
由于我提供的错误选项或由于错误而开始(在1280次提交之后)输出与前一状态不匹配的差异,因此无法应用自动(例如通过补丁)。
例如,运行git log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0 43acd296..9b7855ca -- drivers/usb/auerswald.c
生成 patch(1)不能应用于修订版43acd296
的签出系统的差异。 (问题与连续日志输出时出现的问题相同。)相反,运行git diff -U0 43acd296 9b7855ca -- drivers/usb/auerswald.c
会生成一个可以应用于修订版43acd296
的差异而没有问题。
我是否应该为git log
提供额外的选项以获得我想要的输出? (我尝试了--full-history
,但问题仍然存在。)
答案 0 :(得分:1)
您应该使用git format-patch
:
每次提交时,将每个提交及其补丁准备在一个文件中,格式化为类似于UNIX邮箱格式。此命令的输出便于电子邮件提交或与git am一起使用。
一般语法是:
git format-patch <revision range>
其中<revision range>
可以是一系列提交,例如88236e3..40bc760
。
每次提交时,您将获得一个文件的输出,按顺序命名。