2016-08-08 1 views
1

complete history of Linuxを一連のパッチ(統一されたdiff形式)としてリストしたいと思います。最初のものから今日のマスターまで自動的に処理することができます。理論的には、これはログから現代版を再構成することを可能にするでしょう。自動適用できる一連のパッチをgit logでどのように入手できますか?

git -c diff.renameLimit=30000 log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0

残念ながら、それが原因私はそれを与えるか、バグのため、(1280のコミット後)を開始し、誤ったオプションのいずれか、git logようですやるの違いを出力する。このために私は、次のコマンドを実行しています前の状態と一致しないため、自動的に適用することはできません(パッチなど)。

例として、git log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0 43acd296..9b7855ca -- drivers/usb/auerswald.c を実行するパッチ(1)リビジョン43acd296にチェックアウトシステムには適用できないという差分を生成します。 (問題は連続ログ出力で発生する問題と同じです)。対照的に、git diff -U0 43acd296 9b7855ca -- drivers/usb/auerswald.cを実行すると、改訂版43acd296に問題なく適用できるdiffが生成されます。

希望の出力を得るためにgit logに追加するオプションがありますか? (私は--full-historyを試してみましたが、問題が持続。)あなたは、おそらくgit format-patchを使用する必要があります

答えて

1

Prepare each commit with its patch in one file per commit, formatted to resemble UNIX mailbox format. The output of this command is convenient for e-mail submission or for use with git am.

一般的な構文は次のとおりです。<revision range>がある

git format-patch <revision range> 

はコミットの範囲かもしれませんたとえば、88236e3..40bc760です。

コミットごとに1つのファイルが出力され、名前は順番に付けられます。

+0

ありがとうございました!なぜ 'git-format-patch'が' git-log'で見た問題を避けると思いますか?また、機械可読な出力形式を簡潔に指定したいと思います。 'git-format-patch'は' --format'オプションを提供していないようです。 –

+1

'git-format-patch'は、あなたがやりたいことをするように設計されているので(1回のコミットごとに一連のパッチを作る)、' git log'とは違って* input * gitに戻ってください。どのように「機械可読」を「パッチを生成する」と調和させるかわからないので、そこに提案はできません。 – larsks

+0

'git format-patch'はリポジトリ全体をエクスポートするのに十分な堅牢性を持っているようには見えません。 '(cd" $ 1 "&& git --no-stat -M -C --stdout --root HEAD)でreposをコピーすると、 Docker Gitリポジトリで、「エラー:パッチが失敗しました:filesystem.go:7エラー:filesystem.go」というエラーが表示されました(「rm -rf "$ 2" && mkdir "$ 2" && cd "$ 2" && init)パッチは適用されません。0062でパッチが失敗しました。 ' –

関連する問題