我想列出complete history of Linux作爲一系列補丁(採用統一差異格式),我可以從第一個補丁自動處理到今天的主人。理論上,這將允許我從日誌中重建現代版本。對於這個我運行下面的命令:如何用git log獲得一系列可以自動應用的補丁?
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
產生一個diff該貼劑(1)不能在修改43acd296
適用於檢出系統。 (問題與使用連續日誌輸出時發生的問題相同。)相反,運行git diff -U0 43acd296 9b7855ca -- drivers/usb/auerswald.c
會生成一個diff,可以將其應用於版本43acd296
,而不會出現問題。
爲了獲得我想要的輸出,我是否應該給git log
提供其他選項? (我試過--full-history
,但問題依然存在。)
謝謝!你爲什麼認爲'git-format-patch'可以避免我用'git-log'看到的問題?另外,我想指定一個簡潔的機器可讀輸出格式,'git-format-patch'似乎沒有提供'--format'選項。 –
我建議使用'git-format-patch',因爲它似乎設計用來做你想做的事(產生一系列一次提交 - 每個補丁),而不像'git log'它明確地設計爲提供*輸入*回到混帳。我不知道如何調和「簡潔,機器可讀」和「生成補丁」,所以我不能在那裏提供任何建議。 – larsks
似乎'git format-patch'不足以導出整個存儲庫。當我用'(cd「$ 1」&& git --no-stat -M -C --stdout --root HEAD)複製repos時| (rm -rf「$ 2」&& mkdir「$ 2」&& cd「$ 2」&& git init && git am)'在Docker Git repo上出現錯誤'error:patch failed:filesystem.go:7 error:filesystem.go :補丁不適用補丁失敗0062' –