私は、私の素朴さから、gitサブモジュールを設定し、それをSubversionの外部モジュールのように扱ってきました。
サブモジュールの変更を上流のリポジトリにコミット/プッシュする簡単な方法はありますか?そして、このようにして別々の(しかしリンクされた)リポジトリで同時開発を行うためにGitで推奨される手法は何ですか?
サブモジュールは独自のリポジトリ/作業領域で、独自の.git
ディレクトリがあります。
それで、最初にあなたのサブモジュールの変更をコミット/プッシュしてください:
$ cd path/to/submodule
$ git add <stuff>
$ git commit -m "comment"
$ git Push
それからあなたのメインプロジェクトに更新されたバージョンを追跡するように伝えます:
$ cd /main/project
$ git add path/to/submodule
$ git commit -m "updated my submodule"
$ git Push
さまざまなサブモジュールでたくさんの変更をコミットした場合は、(またはすぐにできるようになるでしょう)すべてを一度にプッシュする(つまりone親リポジトリからプッシュします。
git Push --recurse-submodules=on-demand
git1.7.11( [ANNOUNCE] Git 1.7.11.rc1 )の言及:
"
git Push --recurse-submodules
"は、スーパープロジェクトにバインドされたサブモジュールの履歴を任意に調べ、それらを押し出すことを学びました。
このパッチ と--on-demand
オプションの後におそらく行われます。
--recurse-submodules=<check|on-demand|no>::
プッシュされるリビジョンによって使用されるすべてのサブモジュールコミットがリモートトラッキングブランチで利用可能であることを確認してください。
check
が使用されている場合、プッシュされるリビジョンで変更されたすべてのサブモジュールコミットがリモートで利用可能であることがチェックされます。
そうでない場合、プッシュは中止され、ゼロ以外のステータスで終了します。on-demand
が使用されている場合、プッシュされるリビジョンで変更されたすべてのサブモジュールがプッシュされます。
オンデマンドで必要なすべてのリビジョンをプッシュできなかった場合も、中止され、ゼロ以外のステータスで終了します。
このオプションは1レベルのネストに対してのみ機能します。別のサブモジュール内のサブモジュールに対する変更はプッシュされません。
$ git submodule status --recursive
このような状況でも命の恩人です。あなたのsha1を追跡し、あなたのサブモジュールがあなたが彼らが思っているものを指していることを確かめるためにそれとgitk --all
を使うことができます。
サブモジュールは通常のリポジトリとまったく同じように扱うことができます。変更を上流に伝播するには、通常そのディレクトリ内でコミットするようにコミットしてプッシュするだけです。
コミットしてプッシュする前に、サブモジュールの作業用リポジトリツリーを起動する必要があります。私はカメを使っていて、次のことをしています:
まず、(ディレクトリではなく).gitファイルが存在するかどうかを確認してください。
.gitファイルがあれば、ローカルツリーを追跡する.gitディレクトリがあったはずです。あなたはまだブランチ(あなたはそれを作成することができます)またはマスターに切り替える(時にはうまくいかない)必要があります。最善の方法は - git fetch - git pullです。取得を省略しないでください。
今すぐあなたのコミットとプルはあなたのオリジン/マスターと同期されます