2016-12-20 12 views
1

私は次のような構造を持つgitリポジトリを持っている:Gitのブランチ

repo - /folder1 
    - /folder2 
    ... 

このレポは2つのブランチがあります。

repo ┌--------- master 
    | 
    └--------- branch1 

私はこれにサブモジュールとして支社追加しますレポ、私は次のような構造があるように:

repo - /folder1 - /branch1 (submodule) 
    - /folder2 
    ... 

を、私はブラジャーを追跡サブモジュールを追加することが可能です知っていますNCHだけではなく、特定のコミットが、私は、私は結果をコミットすることはできません独自のサブモジュールとしてレポを追加しようとしたとき、私は次のエラーを取得する:gitの-、fsckを実行

fatal: git cat-file :0:folder1/branch1: bad file 
Unable to checkout folder1/branch1 

はダングリングの大きなリストを返します。斑点。

私の知る限り、これをやろうとしている誰も見つかりませんでした。私はまた、これは不可能であると書かれている文書には何も見つかりませんでした。

git内部の知識が豊富な人は、なぜこれが不可能であるか、動作していないのか説明できますか?

答えて

1

サブモジュールが要件を満たせない場合は、サブツリーを代わりに使用できます。

サブモジュールを追加すると、サブモジュールレポの全ブランチがメインリポジトリによって追跡されます。したがって、branch1をサブモジュールで追跡できるだけではありません。

はサブツリーのために、それがである経路への分岐を追加することができます。

git subtree add --prefix=folder1/branch1 <repo URL> branch1

+0

オーケー、ありがとうございました。なぜこれがうまくいかないのか説明してもらえますか?同じレポに重複したオブジェクトがあるためですか? –

+0

'git submodule add folder1/branch1'と' cd folder1/branch1'を使うと 'git branch -a'ですべてのブランチがサブモジュールに追加されています。現在のブランチがmain repoのブランチ1であれば、 'cd folder1/branch1'を使った後、' git checkout master'を使い 'cd ..'と' cd..'を使うことができます。メインリポジトリの現在のブランチがまだbranch1であることがわかります。サブモジュールのレポをマスターブランチに切り替えるだけです。 –

+0

しかし、実際には、それ自身のレポのためにサブモジュールまたはサブツリーを追加する必要はありません。主にサブモジュールとサブツリーを使用して、現在のレポに別のレポを追加します。したがって、すべてのものが1つのレポにしかないので、必要に応じてレポの構造を直接整理することもできます。 –