Submódulos Git. Entrando em um novo clone do superprojeto

87

ESTÁ BEM. Então eu pensei que tinha lambido ... mas agora ....

Tenho um projeto que inclui uma pequena biblioteca do GitHub como um submódulo. Na versão original desse superprojeto, o submódulo está funcionando conforme o esperado.

Porém, acabei de clonar o superprojeto, fiz o que achei que deveria: "git submodule init", fiz aparecer o diretório do submódulo, mas está vazio.

Se eu agora tentar fazer

git submodule update

eu recebo

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

Se eu tentar

git submodule foreach git pull

eu recebo

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

No meu .git / config, tenho o seguinte:

[submodule "external_libraries/BEACHhtml"]
    url = [email protected]:interstar/BEACHhtml.git

Em meus módulos .git, tenho o seguinte:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

Alguém tem uma ideia do que está faltando?

interstar
fonte

Respostas:

189

Parece que agora (em 2019) a instalação do cliente GIT mais recente poderia resolver o problema de acordo com os comentários abaixo. Esta deve ser a melhor solução por enquanto.


Eu tenho o mesmo problema que você. Este é um bug no git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

Resumindo, para o seu problema, tente:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Parece que há algo errado com a pasta de checkout anterior, remova-a e atualize novamente para resolver o problema.

Han He
fonte
1
para mim, era um git-fetch enforcado que mantinha a pasta trancada
Mihai Timar
30
Tive que remover o submódulo worktree ( ext/blah) e a pasta correspondente abaixo de GIT_DIR( .git/modules/ext/blah).
Tobu
2
No meu caso particular, git submodule updatecontinuava falhando no meu servidor CI porque ele queria que alguém aceitasse as chaves RSA (o servidor ci normalmente usa a conexão https e esta foi a primeira vez que um submódulo puxou uma conexão ssh). Espero que poupe uma hora de coçar a cabeça de alguém!
Maverik
8
Em 2016 esse bug ainda continua :(
Paulo Neves
6
2017 check-in, ainda presente.
william.taylor.09
4

Eu tive esse problema (rede instável, então eu perdi a verificação de submódulo assim) e resolvi fazendo este script (nomeou git-submodule-fixpara que eu pudesse executá-lo como git submodule-fix)

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

Se você conseguir isso, por exemplo, de um git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

Faz

git submodule-fix some/submodule/path
git submodule update
epatel
fonte
3

Resolvido ao excluir 2 diretórios e buscar novamente o submódulo:

  1. Vá para external_libraries/BEACHhtmle verifique o .gitarquivo. Seu conteúdo deve ser algo comogitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Exclua os diretórios external_libraries/BEACHhtmle .git/modules/external_libraries/BEACHhtml.

A partir de agora git submodule updatefunciona sem erros.

Lu55
fonte
você pode precisar executar git submodule initantes git submodule updatepara que o submódulo seja reinicializado, então isso funcionará.
Pellet
1

Se você estiver lendo em 2019 ou mais tarde, basta atualizar o cliente git. Funcionou para mim.

vehsakul
fonte
0

use uma ferramenta diff para comparar o clone original que está funcionando e este. Além disso, o que git submoduleresulta. Certifique-se de estar apontando para o mesmo branch em cada repo antes de fazer isso.

Estou suspeitando que você mudou para um branch ou uma revisão mais antiga onde o submódulo não foi definido.

espero que isto ajude

Adam Dymitruk
fonte
0

Eu tive o mesmo problema com um submódulo em um projeto. Quando tentei clonar o submódulo separadamente, funcionou bem.

Tentei todas as respostas acima, mas sem sucesso (atualização do submódulo git, ..., removendo as pastas do submódulo, ...).

O problema desapareceu após a atualização do git (de Git-1.7.11-preview20120710) para a versão mais recente (para Git-1.8.1.2-preview20130201) na época. Estranhamente meus colegas tinham uma versão ainda mais antiga, funcionavam sem problemas, mas estavam no Mac. Estou no Win7 de 64 bits.

David Lukac
fonte