Eu tenho um projeto que tem um submódulo em lib/three20
Meu .gitmodule
arquivo fica assim:
[submodule "lib/three20"]
path = lib/three20
url = git://github.com/facebook/three20.git
Eu clonei isso no passado sem erros ( git submodule init
seguido de a git submodule update
) e ele está funcionando há um tempo.
Tentei clonar isso em uma nova máquina e agora estou recebendo este erro git submodule init
:
No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'
Esse caminho é apenas uma pasta vazia no Xcode que eu uso para abrigar os projetos do outro diretório. Como não faz parte do .gitmodules
arquivo, não vejo de onde está vindo esse caminho.
Alguma ideia?
git
git-submodules
Ben Scheirman
fonte
fonte
.git
pasta. Fazer agrep -r "Classes/Support/Three20" *.*
também não produz resultadosgit ls-tree HEAD Classes/Support
, e se diz Three20 é um commit, existe um gitlink lá. Se houver, siga as instruções apropriadas da pergunta VonC vinculada acima para transformá-lo em um submódulo adequado ou em conteúdo rastreado regularmente.Respostas:
Após rajibchowdhury 's resposta (upvoted), uso
git rm
de comando que é recomendado é para remover a entrada especial no índice indicando um sub-módulo (a 'pasta' com um modo especial160000
).Se esse caminho de entrada especial não for referenciado na
.gitmodule
(como 'Classes/Support/Three20
' na pergunta original), será necessário removê-lo para evitar a mensagem de erro " Nenhum mapeamento de sub-módulo encontrado no.gitmodules
caminho ".Você pode verificar todas as entradas no índice que estão referenciando submódulos:
Resposta anterior (novembro de 2010)
É possível que você não tenha declarado seu submódulo inicial corretamente (ou seja, sem nenhuma cauda '/' no final, conforme descrito na minha resposta antiga , mesmo que você
.gitmodule
possua caminhos que pareçam bem).Este tópico menciona:
Obviamente, não exclua seu
.gitmodules
arquivo principal , mas cuide de outros.gitmodules
arquivos extras em sua árvore de trabalho.Ainda no tópico "inicialização incorreta do sub-módulo", o Jefromi menciona sub-módulos que na verdade são gitlinks.
Consulte Como rastrear conteúdo não rastreado? para converter esse diretório em um submódulo real.
fonte
git rm xxx
(sem barra)git rm --cached
permite mantê-lo em disco enquanto o remove do índice..gitmodule
referência a essas entradas, stackoverflow.com/a/16162000/6309 . Se não, um simplesgit rm afolder
(sem fuga / barra)Nenhum mapeamento de submódulo encontrado em .gitmodules para o caminho 'OtherLibrary / MKStore' quando
Não sabia por que o erro ocorreu. Depois de gastar um minuto e encontrou a resposta no stackoverflow.
e atualize o submódulo novamente. Está funcionando bem.
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
fonte
git submodule sync | grep "mapping found"
entãogit rm
e novamentegit submodule sync
. Problema desapareceu!Quando eu uso o SourceTree para fazer as coisas, ele cospe essa mensagem.
A mensagem que encontrei:
Meu cenário é que eu apliquei incorretamente o diretório do projeto na pasta contém .git .
O SourceTree considerou essa pasta como submodule git, mas na verdade não.
Minha solução é usar a linha de comando para removê-lo.
remova o lixo no git e mantenha-o limpo.
fonte
Eu resolvi esse problema para mim. Inicialmente, tentei fazer isso:
Como se vê, a especificação da opção --branch não deve ser usada se você deseja clonar a ramificação principal . Lança este erro:
Toda vez que você tenta fazer uma
Este erro será lançado:
E as linhas necessárias nos módulos .git nunca são adicionadas.
Então a solução para mim foi esta:
fonte
Acabei de acertar este erro depois de tentar "git submodule init" em um novo checkout do meu repo. Acontece que eu havia especificado a subpasta do módulo com o caso errado inicialmente. Como estou em um Mac com um sistema de arquivos que diferencia maiúsculas de minúsculas (hurr), ele estava falhando. Por exemplo:
mas o problema é que, no disco, o caminho é
O que não entendo é por que o git está iniciando o módulo na pasta errada (ignorando o caso incorreto no meu comando), mas depois operando corretamente (com falha) com os comandos subseqüentes.
fonte
Só
git rm subdir
vai ficar bem. isso removerá o subdir como um índice.fonte
Só tive esse problema. Por um tempo, tentei o conselho sobre como remover o caminho, git, remover o caminho, remover .gitmodules, remover a entrada de .git / config, adicionar o submódulo de volta, confirmar e pressionar a alteração. Era intrigante, porque não parecia haver alteração quando eu "git commit -a", então tentei pressionar apenas a remoção e pressionar a leitura para torná-la uma alteração.
Depois de um tempo, notei acidentalmente que, depois de remover tudo, se eu executasse "atualização do sub-módulo git --init", havia uma mensagem sobre um nome específico ao qual o git não deveria mais ter referência: o nome do repositório do submódulo estava vinculando, não o nome do caminho para o qual estava fazendo check-out. O Grepping revelou que essa referência estava em .git / index. Então, executei "git rm --cached repo-name" e depois li o módulo. Quando confirmei esse momento, a mensagem de confirmação incluía uma alteração que estava excluindo esse objeto inesperado. Depois disso, funciona bem.
Não tenho certeza do que aconteceu, acho que alguém usou mal o comando subitule git, talvez revertendo os argumentos. Poderia ter sido eu até ... Espero que isso ajude alguém!
fonte
no arquivo .gitmodules , substitui string
com
e resolveu! - -
fonte
O mapeamento de pastas pode ser encontrado na
.git/modules
pasta (cada um possui umconfig
arquivo com referência ao seuworktree
), portanto, verifique se essas pastas correspondem à configuração em.gitmodules
e.git/config
.Então,
.gitmodules
tem o caminho correto:e
.git/modules/<path>/config
na[core]
seção você tem o caminho certo para o seu<path>
, por exemplo,Se a pasta correta
.git/modules
estiver faltando, você deverá acessar o diretório do submódulo e tentargit reset HEAD --hard
ougit checkout master -f
. Se isso não ajudar, você provavelmente deseja remover todas as referências ao submódulo quebrado e adicioná-lo novamente, e consulte: Renomear um submódulo git .fonte
Cenário: alterando o submódulo do diretório dirA-xxx para outro diretório dirB-xxx
corre
git submodule status
if return error: Nenhum mapeamento de submodule foi encontrado em .gitmodules para o caminho dirA-xxx. Isso ocorre porque o dirA-xxx não existe, mas ainda é rastreado pelo git. Atualize o índice git:
git rm --cached dirA-xxx
Tente com
git submodule foreach git pull
. Eu não passei pelo estudo real da estrutura do sub-módulo git, portanto, as etapas acima podem quebrar alguma coisa. No entanto, seguindo as etapas acima, as coisas parecem boas no momento. Se você tiver alguma ideia ou etapas apropriadas para fazer as coisas, compartilhe aqui. :)fonte
Normalmente, o git cria um diretório oculto no diretório raiz do projeto (.git /)
Quando você está trabalhando em um CMS, é possível instalar módulos / plugins com o diretório .git / com os metadados do git para o módulo / plugin específico
A solução mais rápida é encontrar todos os diretórios .git e manter apenas o diretório raiz de metadados do git. Se você fizer isso, o git não considerará esses módulos como sub-módulos do projeto.
fonte
Depois de olhar para o meu
.gitmodules
, descobriu-se que eu tinha uma letra maiúscula onde não deveria. Portanto, lembre-se de que os.gitmodules
diretórios diferenciam maiúsculas de minúsculasfonte
.gitmodules
?No meu caso, o erro provavelmente ocorreu devido a uma mesclagem incorreta entre .gitmodules em duas ramificações com configurações diferentes de sub-módulos. Depois de receber sugestões deste fórum, resolvi o problema de edição manual do arquivo .gitmodules, adicionar a entrada do submodulo ausente é bastante fácil. Depois disso, o comando update do sub-módulo git --init --recursive funcionou sem problemas.
fonte
O problema para nós era que entradas duplicadas de submodule foram adicionadas a .gitmodules (provavelmente de uma mesclagem). Pesquisamos o caminho que o git reclamava nos módulos .git e encontramos as duas seções idênticas. A exclusão de uma das seções resolveu o problema para nós.
Pelo que vale, o git 1.7.1 deu o erro "no submodule mapping", mas o git 2.13.0 não pareceu se importar.
fonte