2013-07-25 3 views
2

У меня есть проект Xcode. Я пытаюсь клонировать GitHub с помощью git, и он также имеет внешние подмодули. Всякий раз, когда я пытаюсь клонировать, он помещает эти внешние подмодули, а также каждую папку в проекте на «(без ветки)» вместо «хозяина». Это то, что я делаю в терминале:Как заставить git всегда использовать главную ветвь?

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

, если я компакт-диск в любую папку и сделать GIT ветку, я получаю это:

git branch 
* (no branch) 
master 

Есть ли способ, что я могу заставить Git клон использовать главная ветвь везде?

+0

'мерзавец обновление подмодуль --init --recursive' должно быть достаточно –

+0

ли подмодули имеют различные' master' ветви, чем родительский репо? Если вы переключите их на 'master', будут ли подмодули работать с родительским репозиторием или будет ли их код несовместимым? –

+0

Если я переключу их на мастер, он работает, но я должен пройти и вручную сделать это в каждой папке, что раздражает. На самом деле, если я не переключу их на мастер, я получаю ошибки компиляции, где он не может найти файлы, которые существуют. – sudo

ответ

9

Это требует мерзавец 1.8.2 или позже (март 2013)

Это зависит от того, как эти подмодули объявлены в .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: спасибо за редактирование, но опция '--branch' для' subodule' была введена в git1.8.2, а не git1.8.3. – VonC

+0

Я использую msysgit, не было 1.8.2, поэтому я упомянул 1.8.3 – linquize

Смежные вопросы