サブモジュールを変更した場合、コミットをサブモジュールのオリジンにプッシュバックできますか、それともクローンが必要ですか?クローンの場合、別のリポジトリ内にクローンを保存できますか?
サブモジュールは、追加のメタデータ(gitlinkツリーエントリ、.gitmodulesファイル)を含む別のリポジトリ内のgitリポジトリのクローンにすぎません
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git Push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
Git1.7.11( [ANNOUNCE] Git 1.7.11.rc1 および release note 、2012年6月)が言及していることに注意してください。
「
git Push --recurse-submodules
」は、スーパープロジェクトにバインドされたサブモジュールの履歴をオプションで調べ、それらをプッシュすることを学びました。
this patch および--on-demand
オプションの後に行われた可能性があります。
recurse-submodules=<check|on-demand>::
プッシュされるリビジョンで使用されるすべてのサブモジュールコミットがリモートトラッキングブランチで利用可能であることを確認してください。
check
が使用されている場合、プッシュされるリビジョンで変更されたすべてのサブモジュールコミットがリモートで利用可能かどうかがチェックされます。
それ以外の場合、プッシュは中止され、ゼロ以外のステータスで終了します。on-demand
が使用される場合、プッシュされるリビジョンで変更されたすべてのサブモジュールがプッシュされます。
オンデマンドが必要なすべてのリビジョンをプッシュできなかった場合、それも中止され、ゼロ以外のステータスで終了します。
だから、あなたはすべてを一度に(親リポジトリから)プッシュすることができます:
git Push --recurse-submodules=on-demand
このオプションは、1レベルのネストに対してのみ機能します。別のサブモジュール内のサブモジュールへの変更はプッシュされません。
Git 2.7(2016年1月)では、単純なgit Pushで、親リポジトリをプッシュし、allそのサブモジュールをプッシュできます。
commit d34141c 、 commit f5c7cd9 (2015年12月3日)、 commit f5c7cd9 (03 Dec 2015)、および commit b33a15b (2015年11月17日)by Mike Crowe(mikecrowe
) 。
( Jumio C Hamano-gitster
- in commit 5d35d72 、2015年12月21日)
Push
:recurseSubmodules
configオプションを追加
--recurse-submodules
コマンドラインパラメーターはしばらく存在していましたが、同等の構成ファイルはありません。
git fetch
の対応するパラメーターのスタイルに従って、このパラメーターのデフォルトを提供するPush.recurseSubmodules
を発明しましょう。
これには、必要に応じてコマンドラインで設定を上書きできるようにするために、--recurse-submodules=no
を追加する必要もあります。これを実装する最も簡単な方法は、
Push
をfetch
と同様の方法でsubmodule-config
のコードを使用することです。
git config
docにinclude が追加されました。
Push.recurseSubmodules
:プッシュされるリビジョンで使用されるすべてのサブモジュールコミットがリモートトラッキングブランチで利用可能であることを確認してください。
- 値が「
check
」の場合、Gitは、プッシュされるリビジョンで変更されたすべてのサブモジュールコミットが、サブモジュールの少なくとも1つのリモートで利用可能であることを確認します。コミットが欠落している場合、プッシュは中止され、ゼロ以外のステータスで終了します。- 値が '
on-demand
'の場合、プッシュされるリビジョンで変更されたすべてのサブモジュールがプッシュされます。オンデマンドが必要なすべてのリビジョンをプッシュできなかった場合、それも中止され、ゼロ以外のステータスで終了します。 -- 値が「
no
」の場合、プッシュ時にサブモジュールを無視するデフォルトの動作が保持されます。「
--recurse-submodules=check|on-demand|no
」を指定することにより、プッシュ時にこの設定をオーバーライドできます。
そう:
git config Push.recurseSubmodules on-demand
git Push
Git 2.12(2017年第1四半期)
git Push --dry-run --recurse-submodules=on-demand
は実際に動作します。
commit 0301c82 、 commit 1aa7365 (2016年11月17日)by Brandon Williams(mbrandonw
) 。
( C浜野順夫-gitster
- in commit 12cf113 、2016年12月16日)
Push run with --dry-run
は、Pushがサブモジュールをオンデマンドでプッシュするように構成されている場合、実際には(Git 2.11 2016年12月以前およびそれ以前)ドライドライを実行しません。
代わりに、プッシュする必要があるすべてのサブモジュールは実際にリモートにプッシュされますが、スーパープロジェクトの更新はドライランとして実行されます。
これはバグであり、ドライランの意図した動作ではありません。サブモジュールを「オンデマンド」でプッシュするように構成されている場合は、
Push
が--dry-run
オプションを尊重するように指示します。
これは、--dry-run
フラグを子プロセスに渡すことで実行されます。子プロセスは、ドライランを実行するときにサブモジュールのプッシュを実行します。
また、Git 2.12では、「--recurse-submodules=only
」オプションtoがあり、最上位のスーパープロジェクトをプッシュせずにサブモジュールをプッシュします。
commit 225e8bf 、 commit 6c656c3 、 commit 14c01bd (2016年12月19日)を ブランドンウィリアムズ(mbrandonw
) 。
( Jumio C Hamano-gitster
- in commit 792e22e 、2017年1月31日)