2013-05-17 7 views
6

はのは、その中のいくつかのファイルを持つ2つのgitリポジトリを想定してみましょう:サブディレクトリからサブツリーマージを実行できますか?

ProjectA 
+ a 
+ b 

ProjectB 
+ foo/x 
+ foo/y 
+ bar/z 

今私はPROJECTAにProjectBのからディレクトリfooを含めたいです。

私の知る限りgit subtree addprefixを行うとき、私は理解して、それが受信リポジトリに持つべきパスがあるので、私は

git subtree add --prefix=project_b --squash URL_of_ProjectB 

を行うとき、私はで終わるでしょう

ProjectA 
+ a 
+ b 
+ project_b 
    + foo/x 
    + foo/y 
    + bar/z 

このレイアウトを取得するためにfooを取得したいだけと具体的に指定することはできますか?

ProjectA 
+ a 
+ b 
+ project_b 
    + x 
    + y 

答えて

5

これは、git subtreeで実現できないと思います。たぶんgit filter-branchは何が必要です:

git remote add b <URL_TO_B> 
git fetch b 
git checkout -b b_master b/master 
foo含む bの歴史書き換え

git filter-branch --prune-empty --subdirectory-filter foo b_master 

またはgit subtree split

git subtree split -P foo --branch foo 

を使用すると、サブツリー

git subtree add --prefix=project_b --squash b_master or foo 
などとして追加します
+0

これは、ProjectBのさらなる変更をProjectAにマージするプロセスを変更しますか?私は自分のシナリオがまさに 'git subtree 'の目的だと思っていましたが、もしそうでなければ何を*達成することができますか?たぶん私はそれに合わせて自分のファイルレイアウトを変更することができます。 – AndreKR

+0

はい、ProjectBからProjectAへの変更をマージするたびに、フィルタ分岐ステップをやり直す必要があります。 'git subtree 'のmanページは' git split'コマンドについて説明しています。これは 'filter-branch'コマンドと似ています。しかし、レイアウトを変更できるのであれば、 'foo'の内容を別のリポジトリに抽出して、両方のプロジェクトにサブツリーとして追加するほうが良いかもしれません。おそらく 'b'はある種のlibなのでこれは良いでしょうか? – gregor

+0

それは問題です、それは本当ではありません。そうだったら、私はそれをサブモジュールにします。それはむしろ2つのプロジェクト間で共有されるいくつかのコードです...国、いくつかのテンプレートのリスト – AndreKR

関連する問題