私たちは最近Gitリポジトリで多くの問題を抱えています。私たちは、gitサブモジュールのユーザーで、アプリケーション間で合計4つの共有リポジトリを使用しています。Gitサブモジュールのワークフローの問題
たとえば、リポジトリ 'ウェブサイト'には合計3つのサブモジュールがあります。
[submodule "vendor/api"]
path = vendor/api
url = [email protected]:api
[submodule "vendor/auth"]
path = vendor/auth
url = [email protected]:auth
[submodule "vendor/tools"]
path = vendor/tools
url = [email protected]:tools
私たちはメインリポジトリの「ウェブサイト」を正しくチェックアウトしました。今、私の同僚の1は、プッシュを行っているし、私git pull; git status
:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: vendor/api (new commits)
# modified: vendor/auth (new commits)
# modified: vendor/tools (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")
[email protected]:~/projects/website$ git diff
diff --git a/vendor/api b/vendor/api
index 41795fc..b582d80 160000
--- a/vendor/api
+++ b/vendor/api
@@ -1 +1 @@
-Subproject commit 41795fc4dde464d633f4c0f01eebb6ab1ad55582
+Subproject commit b582d802419b0ee7bc3959e7623fec0b94680269
diff --git a/vendor/auth b/vendor/auth
index a00369b..4599a71 160000
--- a/vendor/auth
+++ b/vendor/auth
@@ -1 +1 @@
-Subproject commit a00369bf29f14c761ce71f7b95aa1e9c107fb2ed
+Subproject commit 4599a7179c9b7ca4afa610a15ffa4a8fc6ebf911
diff --git a/vendor/tools b/vendor/tools
index f966744..c678cf6 160000
--- a/vendor/tools
+++ b/vendor/tools
@@ -1 +1 @@
-Subproject commit f966744359510656b492ae3091288664cdb1410b
+Subproject commit c678cf6f599fc450e312f0459ffe74e593f5890f
そのgit diff
での問題は何でしょうか。問題は、各サブモジュールの新しいコミットが、上書きされるよりも古いことです。リポジトリ上で正しく41795fc4dde464d633f4c0f01eebb6ab1ad55582
、a00369bf29f14c761ce71f7b95aa1e9c107fb2ed
およびf966744359510656b492ae3091288664cdb1410b
を指しているので、これは私たちが望むものではありません。そして、この変更を次のコミットに追加すると、おそらくそれを制圧します。なぜ最新のものではなく最も古いリビジョンになっているのか分かりません。
私は自分でこの問題を解決しようとしたが、なし、成功しています
私たちは、おそらく各サブモジュールと、私たちの最新の「ウェブサイト」のポインタを更新するので、それは正しくないの最後のコマンドを行う[email protected]:~/projects/website$ git pull; git submodule foreach git pull
これを望んでいない。リポジトリにある正しいリビジョンを保持したい。
私たちは通常、例えば、このサブモジュール内部の作業を行うことを説明してきたことの一つに:私たちはgit submodule update
を行うと
[email protected]:~/projects/website$ cd vendor/api
[email protected]:~/projects/website/vendor/api$ git checkout master
[email protected]:~/projects/website/vendor/api$ echo "lorem ipsum" >> example.file
[email protected]:~/projects/website/vendor/api$ git add example.file; git push
「マスター」ブランチは、すべてのサブモジュールに失われます。
最後に、push
,を実行してサブモジュールを処理する正しい方法と、このような問題がすべて発生していないかどうかを確認します。
はgit-scm documentionを見て、あなたのチームにそれを周りに渡す事前