Adição do submódulo Git: "um diretório git é encontrado localmente"

190

Na verdade, estou tentando aprender a usar o git, incluindo os git submodulesubcomandos. Já configurei um servidor no qual posso hospedar, enviar e enviar repositórios git usando SSH. Eu criei um repositório principal do git "Travail" neste servidor no qual gostaria de colocar todos os meus projetos como submódulos.

No meu repositório Travail, eu já adicionei um projeto meu como um submódulo em tools/libft: Sou capaz de desenvolver esse submódulo, empurrá-lo e puxá-lo.

Mas quando tento adicionar outro submódulo (chamado fdf, de fdf.git no meu servidor), recebo o seguinte problema:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Um diretório git para 'projets / fdf' é encontrado localmente com remote (s): origin ssh: //[email protected]: XXXXX / opt / git / fdf.git Se você deseja reutilizar este git local diretório em vez de clonar novamente de ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git, use a opção '--force'. Se o diretório git local não for o repositório correto ou você não tiver certeza do que isso significa, escolha outro nome com a opção '--name'.

Na verdade, não há subdiretório no projets/

Li em outro thread que eu deveria usar git submodule syncou editar o arquivo .gitmodules no qual a URL do repositório de origem do meu submódulo poderia ter sido alterada.

Mas meu arquivo .gitmodules contém apenas as informações sobre meu primeiro submódulo (tools / libft), não sobre projets / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://[email protected]:XXXXX/opt/git/libft.git

Como estudante francês, eu poderia ter perdido alguma coisa na documentação em inglês que tenho, mas procurei e realmente não entendo por que recebo esse problema.

Ficaria feliz em obter uma solução, mas apenas uma explicação também seria útil.

vmonteco
fonte
Uma pequena correção: é 'repositório', não 'depositário'. Não é realmente uma resposta, mas se os projetos forem independentes, seria melhor para cada projeto ter seu próprio repositório em vez de submódulos.
jcm
Obrigado, eu corrigi. Eu sei, mas gostaria de reunir todo o meu trabalho no mesmo repositório, mas como projetos separados. É uma escolha para manter todo o meu trabalho actualizado quando vou de casa para minha escola e vice-versa (e para aprender a usar essas ferramentas, eu sou curioso;))
vmonteco
Bem, a curiosidade é sempre uma boa razão! :) Isso é estranho. Tem certeza de que não adicionou o submódulo antes?
jcm
Não estou no Travail / e não tenho nenhum problema em clonar fdf.git em ~ /. No Travail / não encontro vestígios de fdf. Apenas libft: /
vmonteco
5
Oh, espere, procurei /Travail/.git/modules/projets/e encontrei um fdfdiretório. Parece não estar na árvore de trabalho, mas em confirmações mais antigas. Isso poderia gerar o problema?
vmonteco

Respostas:

437

Eu vim para este post do SO tentando adicionar um submódulo com o mesmo caminho que um submódulo que eu excluí recentemente.

Isto é o que funcionou para mim ( este artigo ajudou muito ):

Se você ainda não correu git rm --cached path_to_submodule(sem barra) rm -rf path_to_submodule, faça isso!

Então:

  1. Exclua as linhas relevantes do .gitmodulesarquivo. por exemplo, exclua estes:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Exclua a seção relevante de .git / config. por exemplo, exclua estes:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Então, você pode finalmente:

git submodule add https://github.com/path_to_submodule

jbmilgrom
fonte
47
Isso foi realmente útil, pois não consegui encontrar mais nada que funcionasse. A principal diferença de outras sugestões foi o passo 3. Obrigado!
AndroidDev 14/05
8
Os passos 2 e 3 foram necessários para mim.
U007D
8
A Etapa 3 foi necessária para mim, mas por que o submódulo existe lá também?
Crt
1
Para mim, pulei as etapas 1 e 2 (que já tinham as configurações corretas) e a etapa 3 a corrigiu. (Eu já tinha feito o passo inicial de git rme rm -rfetapas.)
Rock Lee
2
Mesmo o passo 3 não funcionou para mim. Eu tinha apenas um submódulo, então apaguei todo .git/modulese acabei trabalhando.
ACH
47

Eu tentei a solução do jbmilgrom, especificamente eu tentei git rm --cachee isso não funcionou para mim, pois o diretório / submódulo não estava lá. O que funcionou para mim foi:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Eu fiz isso depois de tentar --forcedentro dos git submodulecomandos e de rmtodos os outros diretórios, pressionando para dominar etc ... o diretório não existia e não havia razão para o cache. Acontece .git/modulesque é onde esse erro estava.

pjammer
fonte
15

Você pode ter excluído o seu 'projets/fdf'disco, mas seu repositório Git ainda o possui. Use git rm -rf projets/fdfpara removê-lo do Git e confirme as alterações. Depois disso, você poderá adicionar esta pasta como um submódulo.

bredikhin
fonte
Funcionou :) Obrigado. Eu acho que realmente cometi esse erro.
vmonteco
21
Me disseram que o diretório não existe quando faço isso. Parece que existe e não existe: /
Nathan Hornby
40
@ tom-mcfarlin No final, removi manualmente as linhas do .gitmodule e uma pasta do .git / modules, e então deixei-me adicionar um novo submódulo. Talvez haja uma maneira melhor de fazer isso, mas eu estava ficando sem tempo. Se você for por esse caminho, recomendo que faça um bom backup e, por favor, não me culpe, se der errado para você. Boa sorte.
039:
5
Obrigado, eu encontrei em outro post para remover a pasta .git / modules e que funcionou para mim. Faz sentido, já que foi o que o erro disse ter sido o conflito ... Eu simplesmente não tinha conhecimento dessa pasta
Tom McFarlin
10
@NathanHornby @Sparklos @TomMcFarlin - Nas versões mais recentes do git, você encontrará que o sub-módulo git adiciona um diretório na pasta .git. Por exemplo, se você estiver no diretório /tmp/repo, execute git submodule add ../otherrepo.git, e verá que a /tmp/repo/.git/modules/otherrepopasta existe. Esse era o problema para mim. Excluí manualmente essa pasta do .git e tudo funcionou.
Alexander Ave
13

Se você já excluiu o diretório do submódulo, como eu fiz, siga as demais instruções do jbmilgrom. A chave é rm -rf .git/modules/path_to_submoduleapenas ir em frente e fazer backup de todo o diretório de repositório pai primeiro .

Se você tivesse apenas um submódulo, basta excluir .gitmodules

Dmitri R117
fonte
2

Esses dois comandos funcionam para mim.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
W.Perrin
fonte
Este. Parece que existem duas maneiras de criar sub-módulos. Em uma delas, a subpasta terá apenas um único arquivo .git que simplesmente aponta para um diretório no superprojeto, começando com .git/modules/. Existe uma pasta que armazena o repositório para o submódulo. A exclusão desse repositório corrigiu o problema para mim, enquanto a resposta aceita não.
William Randokun 18/03/19