2013-11-14 17 views
14

簡単な開発のために、10個以上のリポジトリを1つの構造に集約するためにgitサブモジュールを使用しようとしています。リモートブランチを追跡するためのGitサブモジュール

モジュールをクローンし、ブランチをチェックアウトすることになっています。 代わりに、モジュールは分離ヘッドモードでチェックアウトされます。

git clone [email protected]:org/global-repository.git 
git submodule update —init 
cd config-framework 
git status 

$git status 
#HEAD detached at b932ab5 
nothing to commit, working directory clean 

gitmodulesファイルには、我々はMY_BRANCH分岐はむしろ外れヘッドよりも、デフォルトでチェックアウトしたい大丈夫

$cat .gitmodules 
[submodule "config-framework"] 
     path = config-framework 
     url = [email protected]:org/config-framework.git 
     branch = MY_BRANCH 

のようです。 これはどのように達成するのですか?

+0

サブモジュールが動作する方法です。マスタープロジェクトはブランチではなく、特定のコミットを参照します。 – twalberg

答えて

18

サブモジュールは常にdetached HEAD modeにチェックアウトされています。

これは、サブモジュールがspecial entry in the index of the parent repoに格納されたSHA1をチェックアウトするためです。あなたはサブモジュールは、あなたが.gitmodulesに登録されているブランチをフォローしたい場合は

Plusは、次のものが必要です。

git submodule update --init --remote 

--remotegit fetchを行い、加えて新HEADのチェックアウトします。
ああ、そのチェックアウトはブランチではなくコミットになります(サブモジュールにはデフォルトでローカルブランチがないので)。これはデタッチされたHEADモードに戻ります。
Git submodules: Specify a branch/tag」でさらにご覧ください。

あなたは(テストしていません)試すことができますが:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)' 

私はgit submodule foreachは「$path」へのアクセス権を持っているという事実を利用し、親プロジェクトのサブモジュールディレクトリの相対名。


あり、自動的に(Gitの2.0用commit 23d25e4)でチェックアウトするサブモジュールのためのブランチを指定する試みでした....それは(commit d851ffb、4月の2D 2014)逆転してしまいました!
これは間もなく表示されるかもしれませんが、現在の実装では表示されません。

+0

ここで私の関連する質問に答えることができれば幸いです。http://stackoverflow.com/q/25799319/2872891ありがとうございました! –

1

あなたの計画がサブモジュールに寄与する場合、最善の方法は通常のgit repoとして個別にチェックアウトすることです。あなたは、異なるリモコンで支店で働いていますか?次に、テストのために使用したい単一のリモートにサブモジュールを向けます。

関連する問題