2

マスター ブランチ A とトピック ブランチ T があり、どちらもサブモジュール S を指しています。A と T の両方でいくつかの作業が行われ、T で行われた作業により、サブモジュール S が数コミット先に移動しました。

ここで、トピック ブランチをマスター ブランチにマージしたいと考えています。マスター ブランチで実行するgit merge Tと、サブモジュール ポインターがブランチ T の変更によって移動されないことがわかりました。

トピック ブランチ T で実行するgit merge Aと、サブモジュール S は、トピック ブランチ T で先に移動した場所に配置されます。

どのブランチからマージを行うかによって、マージが取るサブモジュールの場所が決まるようです。この動作は意図したものですか? 新しいサブモジュールの場所が失われないようにする方法についてのアイデア、またはマージを行う前に正しいブランチにいる必要がありますか?

4

1 に答える 1

1

おそらくgit submodule、あなたが期待するものを示していません。チュートリアル:

# setup
git init t; cd t
git init subrepo
( cd subrepo; touch .gitignore; git add .; git commit -msubinit )
  git submodule add ./subrepo;  git add .; git commit -msubadd

# advance topic's subrepo
git checkout -b topic
( cd subrepo; touch new; git add .; git commit -mnew )
git add .; git commit -msubnew

git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status

git checkout master
git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status

git merge topic
git submodule status
(cd subrepo; git rev-parse HEAD)
git submodule status --cached
git rev-parse :subrepo
git status

git checkout -b demo master~
(cd subrepo; git rev-parse HEAD)

gimme=`git rev-parse :subrepo`
(cd subrepo; git checkout $gimme)

ネストされたリポジトリはサブモジュールであり、その逆も同様です。git submodule一部の管理タスクに役立ちます。コマンドを完全に使わなくても、それほど難しいことではありません。

于 2013-10-08T06:34:55.257 に答える