与子模块相关的git合并方向

时间:2013-10-01 16:54:13

标签: git

我有一个主分支A和一个主题分支T,它们都指向一个子模块S. 在A和T上完成了一些工作,并且在T中完成的工作将子模块S提前几次提交。

现在我希望将我的主题分支合并到主分支中,我发现如果我在主分支上运行git merge T那么子模块指针不会被分支T中的更改移动。

如果我在主题分支T上并运行git merge A,则子模块S现在位于主题分支T中向前移动的位置。

您执行合并的分支似乎决定了合并所采用的子模块位置。这种行为是否符合预期?有关如何防止丢失新子模块位置的任何想法,或者在进行合并之前是否需要在正确的分支上?

1 个答案:

答案 0 :(得分: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)

嵌套repo是子模块,反之亦然。 git submodule可以帮助完成一些管理任务。完全没有命令就不是很难。