同様の問題を解決しようとしているVisual Studioソリューションで外部プロジェクトを扱う人として私の経験を共有したいと思います。私はgitには比較的新しいので、誰かが建設的な批判を持っているなら、私はそれを感謝します。
Visual Studioを使用している場合は、Git Source Control Providerの拡張機能は無料(http://visualstudiogallery.msdn.microsoft.com/63a7e40d-4d71-4fbb-a23b-d262124b8f4c)で、テストしたときにサブモジュールを再帰的にコミットするようです。
私は開発のために自宅でVS Web Developer Expressを使用していますので、私は拡張機能に頼りたくありません(私はまた、何が起こっているのかを知っていると良いと思います)。したがって、私はコマンドを理解することを余儀なくされており、以下にいくつかの注釈を追加しました。
NOTES
あなたはまだ行っていない場合は、http://git-scm.com/book/en/Git-Tools-Submodulesを通じて徹底した読み取りを持っています。かなりの注意点がありますが、このページに戻って説明します。これを読まずにサブモジュールを使って作業しようとすると、頭痛が非常に早くなります。
私のアプローチは、いくつかの追加のエキストラと、このチュートリアルは、次のとおりです。http://blog.endpoint.com/2010/04/git-submodule-workflow.html
を、あなたの親プロジェクト初期化(例えばgit init
& & git remote add origin ...
)をしたら、そのようなあなたのサブモジュールの追加を開始:
git submodule add git://github.com/you/extension1.git extension
git submodule init
git submodule update
チェックあなたの.gitmodulesファイルには、この追加情報が反映されています。
[submodule "extension1"]
path = extension
url = git://github.com/you/extension1.git
サブモジュールディレクトリ(cd extension
)に切り替えます。実行します。
git fetch #I use fetch here - maybe you can use pull?
git checkout -b somebranchname #See the Git-Tools-Submodules link above for an explanation of why you need to branch
私はreadme.txtをここで変更したので、私はそれをコミットすることができ(また、私は、私は、このコミットでは何をやっていたの記録を持っているでしょう)、そして(ブランチを適用するためにモジュールをコミットまだサブモジュールディレクトリ内):
git add .
git commit -a -m "Branching for extension submodule"
は今親プロジェクト(すなわちcd ..
)に入ります。 (あなたは私が述べたgitのサブモジュールのページを見れば、これが必要な理由、それは説明する)また、ここでコミットする必要があります。
git status #will show you that your submodule has been modified
git commit -a -m "Commiting submodule changes from superproject"
は、今、私たちはrecusivelyそうのような私たちのプロジェクトをプッシュすることができ、必要な場合:
git push --recurse-submodules=on-demand
すべてのサブモジュールに対して上記の手順を1回実行する必要があります。
すべてのあなたのサブモジュールのためにこれをやって、あなたがコミットしてプッシュするために必要な変更は、使用できる作り始めたら:
git submodule foreach 'git add .' #recursively add files in submodules
Unfortunaly私は再帰的のようなものを使用せずにコミットする方法を発見していないがgit-slave
(誰ですか?)ので、各サブモジュールのディレクトリに移動して、追加したばかりのファイルの定期的なコミットを実行する必要があります。親プロジェクトで:サブモジュールがコミットされたら
git status #tells you that `extension` submodule has been modified
cd extension
git commit -a -m "Commiting extension changes in superproject edit session"
、あなたもそう、(再び)親プロジェクトをコミットする必要があります:あなたが犯してしまうので
cd ..
git add .
git commit -a -m "Altered extension submodule"
git status #should now show 'working directory clean', otherwise commit other submodules in the same manner
これは(少し迷惑得ることができます2回)、それを知ってから実際にそれほど悪くはありません(各プロジェクトでコミットしていることを確認する必要があります)。私の意見では、あなたのスーパープロジェクトの機能のいくつかをサブモジュールに分離していれば、それは他のプロジェクトとは独立して機能するはずです(別々の時間にコミットしながら、迷惑は世界の終わりではありません)。あなたは、あなたのサブモジュールに下ると試してみて、もう一度押すと
今、私たちは、あなたが最新のを既にされているコミットとして、それは何もしません見つける、...もう一度
git push --recurse-submodules=on-demand
をプッシュすることができますプッシュ。
スーパープロジェクトのクローニング(またはリモートソースの使用)は、git submodule init
の後にgit submodule update
を2回実行する必要性など、かなり混乱する可能性があります。 http://git-scm.com/book/en/Git-Tools-Submodulesの「サブモジュールを含むプロジェクトのクローニング」セクションを読んでください。
私のスーパープロジェクトをクローンすると、サブモジュールの最新の変更が取得されていたときに、何か私を捕まえたことがありました。参照してくださいEasy way pull latest of all submodules
本のマイバリアントが(しかし、あなたが欲しいものは何でもそれを呼び出すことができます)、チェックアウトのサブモジュールのための「開発」の枝を使用して、親プロジェクトでこれを使用することです
:私は設定
git submodule foreach git pull origin development
これまで私も、私はそうのようなチェックアウトサブモジュール上に自分の変更をプッシュしたいブランチにスワップ:
cd extension
git checkout -b development #This will tell you this is a new branch, but I believe this means a new branch of the local git repository - this will get pushed to the 'development' branch
#Make your changes, commit etc.
私は上記の手順に従うとき、私はあることを確認することができ、クローン/リモートでのサブモジュールへの変更起源のプロジェクト(押されたとき)が他のクローンに現れた同じプロジェクトのes/remoteの起源(最後のsubmodule pullコマンドを忘れないでください)。
私はあなたに多少役に立ったと思います。
もちろん、コミット/プッシュなしでサブモジュールを変更した場合、サブモジュールの更新を行うと、元のサブモジュールのヘッドがチェックアウトされるので、変更を残してこの状況にならないようにする必要があります。サブモジュール&コミット、サブモジュールの更新を行うと、ブランチを元のサブモジュールの頭に残します。心配しないで、サブモジュールのブランチをマージするか、ちょうどチェックアウトしてそれを持つことができます。 –
あなたはもっと具体的になることができますか? 2人のプログラマがチームプロジェクトのサブモジュールを修正しているとします。彼らは何をしなければならないのですか?それぞれはサブモジュールフォルダに同じ名前/変更/コミット/プッシュでブランチを作成します。そしてサブモジュールの更新は、? – eugene
私は似たようなことに取り組んでいるので、私はあなたにもっと深い答えを準備しようとしています。その間、あなたはhttp://blog.endpoint.com/2010/04/git-submodule-workflow.htmlとhttp://stackoverflow.com/questions/5814319/git-submodule-pushを読んでいますか?最初のリンクでは、サブモジュールとのブランチの作成についても説明しています(「サブモジュールの問題」をhttp://git-scm.com/book/en/Git-Tools-Submodulesで読む理由を理解したい場合)。 –