18

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

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

git clone git@github.com: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 ファイルは問題ないようです

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

デタッチされたヘッドではなく、デフォルトで MY_BRANCH ブランチをチェックアウトする必要があります。どうすればそれを達成できますか?

4

3 に答える 3

22

サブモジュールは、常に切り離された HEAD モードでチェックアウトされます。

これは、サブモジュールが親 repo のインデックスの特別なエントリに格納されている SHA1 をチェックアウトするためです。

さらに、 に登録したブランチにサブモジュールをたどらせたい場合は、次のもの.gitmodulesが必要です。

git submodule update --init --remote

はに加えて、新しい のチェックアウトを行い--remoteます。 悲しいかな、そのチェックアウトでさえ、ブランチではなくコミットになります(デフォルトではサブモジュールにローカルブランチがないため)ので...分離モードに戻ります。 詳細については、「Git サブモジュール: ブランチ/タグを指定する」を参照してください。git fetchHEAD
HEAD

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

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 の場合は23d25e4 をコミット)...しかし、元に戻されました (コミット d851ffb、2014 年 4 月 2 日)!
すぐに来るかもしれませんが、現在の実装ではありません。

于 2013-11-16T09:26:13.917 に答える
1

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

于 2015-10-03T23:14:54.047 に答える