2012-03-29 48 views
2

我有一个开发和主分支的git回购。现在我正试图在每个分支中使用不同版本的子模块。因此,例如,我这样做:如何为每个本地分支使用特定的Git子模块修订版本?

git checkout master 
cd submodule 
git checkout v1.0 
cd .. 
git commit -a -m "now using submodule v1.0" 
git checkout dev 
cd submodule 
git checkout v2.0 
cd .. 
git commit -a -m "let's try submodule v2.0" 

现在在那之后我结帐的主分支,它似乎在主分支子模块也指向V2.0犯下的,而不是V1.0。

我读过很多关于git子模块的内容,但它对我来说似乎仍然有点抽象。任何人都可以解释在这种特殊情况下如何正确使用子模块? (git version 1.7.3.1)

谢谢!

+0

'git commit -a'是否确实修复了子模块引用?我们放弃了git 1.5天后的子模块(因为我们想要的东西相当不同),所以我从来没有对它们使用'commit -a'。首先必须小心'git添加子模块'。 – torek 2012-03-29 21:43:49

+0

@torek谢谢你的回复!不幸的是,这并没有解决问题。此外,我尝试在子模块中创建一个新的分支(例如:master和'git checkout -b branch-2.0 v2.0'上的'git checkout -b branch-1.0 v1.0'),但这两者都不起作用。看起来子模块不应该这样使用,那么在这种情况下会有什么替代方案呢? – 2012-03-30 13:12:04

+0

之后我做了一点小小的阅读;从1.5开始,子模块支持看起来已经发展了很多,而且现在发展得更加迅速。所以,有些东西取决于你的确切版本的git。在现有的答案中,虽然主要问题是(缺少)子模块更新。 – torek 2012-03-30 19:04:48

回答

1

只是在超级项目中更改分支不会更改子模块中的内容;分支变化只会改变其子模块的超级项目的提交引用。您需要:

git submodule update 

在超级项目中签出分支后。 'update'将改变子模块以引用正确的提交。下面是一个例子:

[email protected](84)$ git checkout master 
M test1 
Switched to branch 'master' 
[email protected](85)$ git submodule update 
Submodule path 'test1': checked out '16aff6eed3998f14eb96b4f61666b47160de0e6b' 
[email protected](89)$ git checkout top-other 
M test1 
Switched to branch 'top-other' 
[email protected](90)$ git submodule update 
Submodule path 'test1': checked out 'af33fca078dbb1fa415f9ea7fafb1b92cad1c6ae' 
[email protected](91)$ git status 
# On branch top-other 
nothing to commit (working directory clean) 
+0

谢谢!而已。其实我之前尝试过,然后它没有工作,但我想我忘了第一次做'git submodule init' ... – 2012-03-30 15:34:34

相关问题