2016-12-15 14 views
0

私は現在成長しているgitプロジェクトを持ち、いくつかの部分が独自のプロジェクトになり始めています。サブプロジェクトにgitプロジェクトを分割する

私はそれらのサブモジュールを作成したいが、ファイルの履歴を保存したい。そこ異なるフォルダ間の移動(例えば、partThatIsItsOwnProjectpartThatIsNotItsOwnProjectから、私は、あまりにもその移動のための歴史を持っているしたいと思います。)となりました

前に:私はしたいのですが

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/.git 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

だから、私はgit subtreeがそうするだろうと推測しましたが、オリジナルのgitリポジトリを保持し、その一部しか表示していないようです。 git submoduleはこの設定の対象と思われますが、どのように移行しますか?

答えて

1

リポジトリ全体の履歴を書き換えて、別のリポジトリに入れたいディレクトリに関係のないものをすべて除外する必要があります。 git filter-branchコマンドはそのために便利です。 [0]でそれを行うスクリプトの例を見つけることができます。必要に応じて調整する必要があるかもしれないことに注意してください。

一般にgit filter-branch [1]は、リポジトリ内のすべてのコミットにフィルタを順番に適用することで、gitの履歴を書き換えることができます。 --tree-filterを使用するのは、必要なものを実現する最も簡単な方法ですが、道に沿ってすべてのコミットのチェックアウトが非常に遅いため、--index-filterで直接インデックスを編集する方が良いことに注意してください。

[0] https://github.com/openstack/oslo.tools/blob/master/filter_git_history.sh

を[1] https://git-scm.com/docs/git-filter-branch

1

フォークあなたのメインのgitを、そして "partThatIsItsOwnProject" にフォークの名前を変更し、その "サブディレクトリ" の一部ではないすべてのものを削除します。 次に、メインgitにサブモジュールとしてforkしたgitを追加すると、すべての履歴が保存されます。

マスターgitから分割したいすべてのサブディレクトリについて、この手順を繰り返します。

関連する問題