したがって、すべてのサブモジュールを更新するには、次を実行します。
git submodule foreach 'git pull Origin master'
他のサブモジュールを更新せずに、たとえばbundle/syntastic
にある特定のサブモジュールを更新するにはどうすればよいですか?
最終的には、特定のサブモジュールのみを更新する方法を検索します。つまり、サブモジュールをそのスーパーリポジトリが指す参照に更新します。これは質問でも答えでもありません。タイトルだけです。
私のような他の人を助けることを期待して、質問のタイトルへの答えは:
git submodule update <specific path to submodule>
このサブモジュールは、スーパーリポジトリでコミットされたrefの状態になります。
実際の正しい構文は次のとおりです。
$ git clone <remote.git>
$ cd <remote>
$ git submodule update --init -- <specific relative path to submodule>
サブモジュールを使用してリポジトリを複製したばかりの場合は、次を使用して特定のサブモジュールを複製できます。
git submodule update --init submoduleName
これにより、そのサブモジュールのマスターが複製され、そこからサブモジュールにcdして、必要なブランチをプルできます。
--remoteこのオプションは、updateコマンドでのみ有効です。スーパープロジェクトの記録されたSHA-1を使用してサブモジュールを更新する代わりに、サブモジュールのリモート追跡ブランチのステータスを使用します。使用されるリモートはブランチのリモート(ブランチ..リモート)で、デフォルトはOriginです。
特定のサブモジュールを更新するには、次を使用できます。
git submodule update --remote <path to the submodule>
あなたの場合、それは次のようになります:
git submodule update --remote bundle/syntastic
他のサブモジュールを更新せずに、たとえば
bundle/syntastic
にある特定のサブモジュールを更新するにはどうすればよいですか?
Git 2.13(および submodule.<name>.update
config setting のヘルプ):
git clone --recurse-submodules="bundle/syntastic"
git config submodule.syntastic.update "git pull Origin master"
clone --recurse-submodules[=<pathspec]
コマンドはクローンが終了した直後にgit submodule update --init --recursive <pathspec>
を実行することと同等であるため、2行目(1回だけ実行される)が必要です。
それは、最新のリモートOrigin/master
SHA1では、gitlinkで記録されたSHA1でのみサブモジュールをチェックアウトしますnot。submodule.<name>.update
config setting を追加することにより、サブモジュールの選択クローンの後に、そのサブモジュールのみの更新が確実に行われます。
Git 2.13(2017年第2四半期)の「アクティブなサブモジュール」機能の一部として(「 git submodule
の新しいコミットを無視」を参照)、これは commit bb62e0a from ブランドンウィリアムズ(bmwill
) :
clone
:オプションでpathspecを取るように--recurse-submodules
を教えるクローン
--recurse-submodules
を教えて、必要に応じて、再帰的に初期化およびクローン化されるサブモジュールを記述するpathspec引数を取ります。
pathspecが指定されていない場合、--recurse-submodules
は、デフォルトのpathspec ".
"を使用して、すべてのサブモジュールを再帰的に初期化および複製します。
より複雑なパス仕様を作成するために、--recurse-submodules
を複数回指定できます。また、これにより、 '
submodule.active
'構成オプションが指定されたpathspecになるように構成され、git submodule update
の今後の呼び出しがpathspecに対応します。さらに、サブモジュールのオプションを合理化するために、オプション配列で非表示としてマークされているだけでなく、スイッチ「
--recurse
」がドキュメントから削除されています。単純な '--recurse
'は、何が再帰されているかを伝えません。ディレクトリまたはツリーを意味する場合があります(c.f.ls-tree
)。
他の多くのコマンドには、サブモジュールへの再帰を意味する「--recurse-submodules
」が既にあるため、このスペルを本物のオプションとしてここに宣伝します。
したがって、 git clone --recursive
manページ は次のようになります。
--recurse-submodules[=<pathspec]:
クローンが作成された後、提供されたpathspecに基づいてサブモジュールを初期化およびクローンします。
Pathspecが指定されていない場合、すべてのサブモジュールが初期化され、複製されます。
サブモジュールは、デフォルト設定を使用して初期化および複製されます。
結果のクローンにはsubmodule.active
が指定されたpathspecに設定されます。pathspecが指定されていない場合は ".
"(すべてのサブモジュールを意味します)。
これは、クローンが終了した直後にgit submodule update --init --recursive
を実行するのと同じです。クローンリポジトリにワークツリー/チェックアウトがない場合(つまり、--no-checkout
/-n
、--bare
、または--mirror
のいずれかが指定されている場合)、このオプションは無視されます
t/t7400-submodule-basic.sh
test の例:
git clone --recurse-submodules="." \
--recurse-submodules=":(exclude)sub0" \
--recurse-submodules=":(exclude)sub2" \
multisuper multisuper_clone
これは、sub0
およびsub2
を除くすべてのサブモジュールを複製および更新します。
ボーナス、Git 2.22(2019年第2四半期)「git clone --recurs
」の方が優れています。
commit 5c38742 (2019年4月29日)by NguyễnTháiNgọcDuy(pclouds
) を参照してください。
( 浜野潤夫-gitster
- in commit 2cfab6 、2019年5月19日)
parse-options
:エイリアスに対して「あいまいなオプション」を発行しませんオプションの解析機構を変更して、たとえば「
clone --recurs ...
」は、「clone
」が「--recursive
」と「--recurse-submodules
」の両方を同じ意味であることを理解しているため、エラーになりません。最初に「clone」は、
--recurses-submodules
エイリアスがccdd3daに追加されるまで再帰的に理解されました( "clone
:--recurse-submodules
オプションを--recursive
のエイリアスとして追加、2010-11-04、Git v1.7.4-rc0)。
bb62e0a ( "clone
:オプションでpathspecを取るように--recurse-submodules
を教える"、2017-03-17、Git v2.13.0-rc0)より長い形式がプロモートされましたデフォルトに。しかし、オプション解析機構の動作方法により、これは次のようなかなり馬鹿げた状況になりました。
$ git clone --recurs [...] error: ambiguous option: recurs (could be --recursive or --recurse-submodules)
OPT_ALIAS()
を追加して、2つ以上のオプション間のこのリンクを表現し、git-cloneで使用します。