“Você está em um ramo que ainda não nasceu” ao adicionar o submódulo git

116

Estou tentando adicionar alguns submódulos ao meu .vim/bundlesdiretório e, quando tento adicionar esse repo específico, o Git me dá um erro estranho que nunca vi antes:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Alguma ideia do que pode causar isso?

Se eu clonar o mesmo repo em um diretório de teste (não por meio do comando submodule), ele funciona bem e cria os arquivos esperados.

matt b
fonte

Respostas:

210

Para corrigir esse erro, você deve excluir a pasta com o mesmo caminho para o submódulo dentro do .git/modules/diretório. Este erro pode ocorrer quando o url estava incorreto para o submódulo pela primeira vez quando o submódulo foi adicionado.

Lisachenko
fonte
2
Obrigado, isso resolveu o problema. No início, não era óbvio que, como eu estava clonando, .vim/bundle/vim-scalao caminho para excluir era.git/modules/.vim/bundle/vim-scala
matt b
2
Se você estiver no Windows, observe que o diretório sob .git / modules pode não aparecer a menos que vocêdir /AH
paxos1977
13
Depois de ver excluir esse .git/modules/path/to/submodulediretório e tentar adicionar novamente o submódulo, recebo o erro. O seguinte caminho é ignorado por um de seus arquivos .gitignore: caminho / para / submódulo .
Drew Noakes em
1
@Drew Noakes remove .vim / bundle / vim-scala criado após a primeira execução de git submodule add
Piotr Król
No Windows, você também pode usar as opções do Windows Explorer (no mesmo lugar em que escolheria para ver as extensões de arquivo) para ver as pastas ocultas na GUI e excluí-las.
user83358
13

Você precisa adicionar um submódulo dentro de um repo existente, esse repo precisa estar em um estado para adicionar e confirmar o link do submódulo e o próprio repo do submódulo deve ter um commit para fazer check-out.

Agora, o submódulo repo em si deve estar ok se você puder criar um clone regular em outro lugar. No entanto, parece que submodule addreclama se o repositório estiver vazio, enquanto o clone não. Esse cara sugere que isso pode ser corrigido apenas executando o mesmo submodule addcomando novamente.

Se o repositório interno não estiver vazio, verifique o repositório que você deseja que contenha o submódulo. Mude para o mesmo diretório onde você executou git submodule add, execute git statuse git branchverifique se o repo que o contém tem pelo menos um branch criado e não está em um estado estranho.

Sem utilidade
fonte
Eu verifiquei todas essas coisas. Quando eu faço check-out do repositório desejado em outro diretório, ele contém muitos arquivos e um masterbranch. O repositório ao qual estou tentando adicionar este como um submódulo está no masterbranch, não tem problemas óbvios (o status retorna alguns arquivos modificados, mas isso é tudo) e o mais estranho de tudo é que posso adicionar outros submódulos perfeitamente a este repositório .
matt b
Também estranho: após o fatalaviso do meu OP, git deixa um diretório vazio em .vim/bundle/vim-scala. Também percebi que, embora .gitmodulesnão tenha sido alterado, ele adicionou algumas linhas referentes a este repositório github.com .git/config, mas após removê-las ainda recebo a mesma fatalmensagem de erro.
matt b
7
+1 Argh! This guy suggests this is fixable by just running the same submodule add command again.. Tenho lutado contra esse problema tentando encontrar uma resposta sensata e isso finalmente resolveu. Isso era para git 1.8.0 sob MSYS durante a criação de um submódulo do BitBucket, então se você estiver na mesma situação, tente isto primeiro.
Aaron Newton
Adicionar duas vezes funcionou para mim também. Mas não entendo por quê. Alguma explicação?
Elise
Adicionando duas vezes aqui também. Eu adoraria entender o porquê
Vinicius Dantas
12

Este erro pode ocorrer se você estiver adicionando um submódulo que não tem um masterbranch. Se quiser usar outro branch ao adicionar o submódulo ( developpor exemplo), você pode usar o seguinte comando:

git submodule add -b <branch> <repository>
k4nar
fonte
1
No meu caso, o repo foi criado recentemente e, portanto, não tinha nenhum arquivo e git submodule add -b master <repo.git> <folder>
branch
Este era o meu problema, meu submódulo tinha apenas 2 branches nenhum deles é a mastersua solução funcionou para mim.
Guerneen4
0

Como aludido por @drew-noakes, isso pode ser causado pela tentativa de adicionar um submódulo usando um nome de diretório que está listado em seu arquivo .gitignore .

John McFarlane
fonte