32

私のgitリポジトリが次の構造を持っていると仮定します:

/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2

リポジトリにはかなりのコミットがあります。これで、サブプロジェクトの1つ(SubProject-0)がかなり大きくなり、SubProject-0を取り出して、スタンドアロンプ​​ロジェクトとしてセットアップしたいと思います。親gitリポジトリからSubProject-0に関連するすべてのコミット履歴を抽出し、それを新しいリポジトリに移動することは可能ですか?

4

2 に答える 2

37

http://git-scm.com/docs/git-filter-branchを参照してください

私はあなたがのようなものが必要だと思います

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all

リポジトリのクローン内。

于 2010-03-29T13:41:02.743 に答える
3

同様のことをする必要がありましたが、基本的に1つのサブプロジェクトをリポジトリから別のサブプロジェクトに移動したかったのです。代わりに、任意のソースからオブジェクトをフェッチできるため、fetchを使用しました。

したがって、基本的には、新しいブランチを作成し、そのブランチ内の不要なものを削除してから、gitfetchを使用してブランチをあるリポジトリから別のリポジトリにプルしました。オブジェクトを取得したら、mergeでうまくいきました。

例えば

元のものがあるリポジトリ:

    git checkout -b temp master
    git rm -r Unneeded_stuff
    git commit -m 'pruning'

次に、そのブランチを1つのリポジトリから完全に別のリポジトリ(無関係)にフェッチできます。

    cd /path/to/other/repository
    git fetch /path/to/source/repo temp:temp

ここで、temp:tempは、「ソースでtempをフェッチし、ここにtempとして保存する」ことを意味します。そこから、結果をマスターにマージできます。

    git merge temp

次に、一時ブランチを削除できます。これは、最初のケースでは元のリポジトリとマージしたいものではなく、2番目のケースではマージしたためです。

これらの手順は少し圧縮できると思いますが、このセットは素晴らしく明確に見えます。

于 2011-06-28T05:46:58.003 に答える