2017-06-16 19 views
0

gitリポジトリをサブモジュールのチェックアウトでデフォルトのブランチでクローンするには?質問に

  1. How to correctly call a git submodule symlinked?

git clone --recursiveが行われ、デフォルトのブランチにgitのサブモジュールをチェックアウトする必要があり、それを考え出しましたが、どのようにそれを行うには?

は私が探してみました。この他の質問を見つけました:

  1. Easy way pull latest of all submodules

コマンドgit clone --recurse-submodulesを使用することを勧めるが、そのサブモジュールは、まだそれらのデフォルト枝にチェックアウトではないのリポジトリをクローンした後。

答えて

2

あなたは、各サブモジュールで任意のコマンドを実行するためにgit submodule foreachを使用することができます。 --recursiveフラグは、サブモジュールのサブモジュールを介して再帰します。 git remote show [name-of-remote]は現在どのブランチ[name-of-remote]がアクティブであるかを示します。出力はのgit remote showクリーンアップするために、いくつかの他のツールとそれらを組み合わせることで得られます。

git submodule foreach --recursive "git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //')" 

これは、もちろん、すでにサブモジュールをクローン化したに依存しています。

+0

ありがとう!私は 'git clone --recursive https ... 'コマンドを実行できると思います。 git submodule foreach ... 'を実行すると、すべてがクローンされ、マスターがチェックアウトされます。 – user

+0

ソリューションプラットフォームに依存しないのですか、それともWindows版ですか? Windowsでこのコマンドを実行すると、 'grep 'HEADブランチ'が使用できなくなります。 sedの/.*:// '部分。 – user

+1

@user 'grep'と' sed'は標準のGit for Windowsインストールに含まれていると思いますが、インストール時にどのオプションを選択したかによって、cmdではなくgit bashを使う必要があります。 – 8bittree

2

git submodule foreach git checkout master

+0

ありがとう、確かに役立ちますが、デフォルトブランチがマスターではないサブモジュールではどうなりますか? – user