サブモジュールを変更した場合、コミットをサブモジュールのオリジンにプッシュバックできますか、それともクローンが必要ですか?クローンの場合、別のリポジトリ内にクローンを保存できますか?
サブモジュールを変更した場合、コミットをサブモジュールのオリジンにプッシュバックできますか、それともクローンが必要ですか?クローンの場合、別のリポジトリ内にクローンを保存できますか?
回答:
サブモジュールは、追加のメタデータ(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"
gh-pages
githubリポジトリのドキュメントのブランチで作業する場合:)
git1.7.11([ANNOUNCE] Git 1.7.11.rc1 and release note、2012年6月)以降、次のように述べられています。
「
git push --recurse-submodules
」は、オプションでスーパープロジェクトにバインドされたサブモジュールの履歴を調べ、それらをプッシュすることを学びました。
おそらくこのパッチと--on-demand
オプションの後に行われます:
recurse-submodules=<check|on-demand>::
プッシュするリビジョンによって使用されるすべてのサブモジュールコミットがリモート追跡ブランチで利用可能であることを確認してください。
check
が使用されている場合、プッシュされるリビジョンで変更されたすべてのサブモジュールコミットがリモートで使用できるかどうかがチェックされます。
それ以外の場合、プッシュは中止され、ゼロ以外のステータスで終了します。- 場合
on-demand
に使用され、プッシュするリビジョンに変更されたすべてのサブモジュールがプッシュされます。
オンデマンドで必要なすべてのリビジョンをプッシュできなかった場合も、中止され、ゼロ以外のステータスで終了します。
したがって、(親のリポジトリから)aを使用してすべてを一度にプッシュできます:
git push --recurse-submodules=on-demand
このオプションは、1レベルのネストでのみ機能します。別のサブモジュール内のサブモジュールへの変更はプッシュされません。
git 2.7(2016年1月)では、単純なgit pushで親リポジトリとそのすべてのサブモジュールをpushできます。
参照d34141cをコミットし、f5c7cd9コミット、(2015年12月3日)をf5c7cd9をコミット(2015年12月3日)、およびb33a15bコミット(2015年11月17日)により、マイク・クロウ(mikecrowe
)。
(合併によりJunio C浜野- gitster
-で5d35d72コミットし、2015年12月21日)を
push
:recurseSubmodules
設定オプションを追加
--recurse-submodules
コマンドラインパラメータは、いくつかの時間のために存在しているが、それは何の設定ファイルと同等を持っていません。の対応するパラメーターのスタイルに従って、このパラメーターのデフォルトを提供するように
git fetch
発明push.recurseSubmodules
しましょう。
これには、--recurse-submodules=no
必要に応じてコマンドラインで設定を上書きできるようにするためのの追加も必要です。これを実装する最も簡単な方法は、と同様の方法で
push
コードを使用する ことです。submodule-config
fetch
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
実際に動作します。
Brandon Williams()によるコミット0301c82、コミット1aa7365(2016年11月17日)を参照してください。(合併によりJunio C浜野- -で12cf113コミットし、2016年12月16日)をmbrandonw
gitster
push run with --dry-run
プッシュがサブモジュールをオンデマンドでプッシュするように構成されている場合、実際には(Git 2.11 2016年12月以前およびそれ以前)予行演習を実行しません。
代わりに、スーパープロジェクトの更新が予行演習として実行されている間、プッシュする必要のあるすべてのサブモジュールが実際にリモートにプッシュされます。
これはバグであり、予行演習の意図した動作ではありません。サブモジュールを「オンデマンド」で再帰的にプッシュするように構成されている場合
push
、--dry-run
オプションを尊重するように教えます。
これは--dry-run
、予行演習を実行するときにサブモジュールのプッシュを実行する子プロセスにフラグを渡すことによって行われます。
そしてGit 2.12でも、トップレベルのスーパープロジェクトをプッシュせずにサブモジュールをプッシュする " --recurse-submodules=only
"オプションがあります。
Brandon Williams()によるcommit 225e8bf、commit 6c656c3、commit 14c01bd(2016年12月19日)を参照してください。(合併によりJunio C浜野- -で792e22eコミット 2017年1月31日)mbrandonw
gitster
git config push.recurseSubmodules on-demand
。その後、シンプルなものですべてgit push
をプッシュできます(メインのリポジトリとサブモジュール)。以下の私の編集した回答を参照してください。