2011-02-02 72 views
5

私はgit repoをレシピdescribed in this questionで分割しようとしていますが、問題のgitリポジトリは膨大で、何千ものコミットがあるため、説明したようにコマンドを実行しようとするとコマンドラインの制限が入りますコミットフィルターは失敗します。 (インデックスフィルタを最初に適用してからフィルタをコミットする)段階でそれをやろうとすると、インデックスフィルタはうまく動作しますが、コミットフィルタがスタックして大量のメモリ(3G +)を使い始めます。どのようにこれを行うにはどのようなアイデア?多分私はここで何か間違っているのでしょうか?巨大なgitリポジトリを分割する

他の質問を読んでいない人にとっては、非常に大きなgitリポジトリからいくつかのディレクトリを別のリポジトリに分割し、これらのディレクトリに関連する履歴を保存することです。

答えて

4

私は答えていることを書いたので、これは追加されていることを考える:

--prune-empty

フィルタのいくつかの種類が手つかずの木を残した空のコミットを、生成されます。このスイッチは、git-filter-branchがそのようなコミットを無視できるようにします。ただし、このスイッチは、親が1つしかないコミットにのみ適用されます。したがって、マージポイントを維持します。また、このオプションは--commit-filterの使用と互換性がありません。コミットフィルタでgit commit-tree "$ @"イディオムの代わりに関数git_commit_non_empty_tree "$ @"を使用するだけで、それを実現できます。

それはあなたに問題を与えていた私の他の答えのちょうどコミットフィルターなので、git filter-branch --index-filter '...' --prune-emptyでそれを与えてください。

+0

このように見えますが、トリック、ありがとう! – StasM

関連する問題