2013-07-25 20 views
2

我有一些Xcode项目,我试图从GitHub使用git克隆,并且它也有外部子模块。每当我尝试克隆时,它都会将这些外部子模块以及项目中的每个文件夹都放在“(no branch)”而不是master上。这是我在做什么在终端:如何强制git始终使用主分支?

git clone [email protected]:******.git 
cd ****** 
git submodule update --init 
cd External/****** 
git submodule update --init 
cd External/****** 
git submodule update --init 

如果我cd到任意文件夹,并做git的分支,我得到这个:

git branch 
* (no branch) 
master 

有没有一种方法,我可以强制git的克隆使用主枝到处?

+0

'git的子模块更新--init --recursive'应该足够 –

+0

执行子模块具有与母体不同的回购'master'的分支?如果将它们切换为'master',子模块是否仍然与父存储库一起工作,或者它们的代码是否不兼容? – 2013-07-25 03:34:28

+0

如果我将它们切换为主,它可以正常工作,但我必须通过并手动将其更改为每个文件夹,这很烦人。事实上,如果我不将它们切换到master,我会在找不到存在的文件的地方出现编译错误。 – sudo

回答

9

这需要混帐1.8.2或更高版本(2013年3月)

这取决于这些子模块是如何在.gitmodules声明:

请参阅 “git submodule tracking latest

这将使你跟随主分支。
更新当前.gitmodules有:

git config -f .gitmodules submodule.<path>.branch master 
git submodule update --remote --recursive 

注意的是,子模块仍然不会对任何一间分行。简单的他们的SHA1将是origin/master之一。
你仍然需要为每个人提供checkout master

git submodule foreach --recursive git checkout master 
+0

@linquize:感谢您的编辑,但'submodule'的'--branch'选项已经在git1.8.2中引入,而不是git1.8.3。 – VonC

+0

我使用msysgit,没有1.8.2,所以我提到了1.8.3 – linquize

相关问题