2016-03-28 5 views
3

私は「木」と、このaritcleから「インデックス」を学ぶ:Learning Git Internals by Example"git filter-branch"の "--tree-filter"と "--index-filter"の違いは何ですか?

をしかし、それは「gitのフィルタ分岐」コマンドに来るとき、私は「--tree・フィルタの違いが何であるかを知りません"と" --index-filter "を指定します。

+0

[documentation](https://git-scm.com/docs/git-filter-branch)を読んだことがありますか? –

+1

@TimBiegeleisen私はそうですが、私はこれらのGitのコンセプトを理解するのは難しいと思っています... – GoTop

答えて

7

短いバージョンでは、--tree-filterは各コミットを一時ディレクトリにチェックアウトし、フィルタコマンドを実行し、現在の一時ディレクトリにある新しいコミットをビルドします。 --index-filterは各コミットをインデックスにコピーし、フィルタコマンドを実行し、現在インデックスにあるものから新しいコミットを作成します。

コミットをインデックスにコピーするのは、コミットをチェックアウトするよりも速く、です。ディレクトリからコミットを作成するよりも、インデックスからコミットを作成するほうが高速です。その結果、インデックスフィルタの使用は、ツリーフィルタを使用するよりもはるかに高速です。しかし、スクリプトを作成するのは簡単ではありません。


正確な速度差が一時ディレクトリに依存します:メモリ内のファイルシステムは、オンスピニングメディアよりも高速である上、SSDのファイルシステムよりも高速なので、あなたがより多くの場合は獲得しますツリーフィルタをメモリ内ファイルシステムに向けることができる場合よりもスピンメディアを使用しています。しかし、それでもインデックスフィルタはまだまだ高速です。

実際のディスクでは、100程度の要素があります(したがって、2分かかるインデックスフィルタは3時間以上かかるツリーフィルタに変換されます)。

関連する問題