Eu tenho um repositório Git ~/.janus/
com um monte de submódulos nele. Quero adicionar um submódulo ~/.janus/snipmate-snippets/snippets/
, mas quando executo git submodule add <[email protected]:...>
o snipmate-snippets
diretório, recebo a seguinte mensagem de erro:
You need to run this command from the toplevel of the working tree.
Portanto, a pergunta é: como adiciono um submódulo ao snipmate-snippets
diretório?
git
git-submodules
Robert Audi
fonte
fonte
git submodule add -b <branch> <url> <relative_path_4m_root>
Respostas:
Você entra
~/.janus
e corre:Se você precisar de mais informações sobre submódulos (ou git em geral), o ProGit é bastante útil.
fonte
'subprojects' already exists in the index
(eu estava usando subprojetos como o nome do diretório) . Em vez disso, o que ajudou foi a resposta do VonC abaixo, isto écd subprojects
, fazer e depoisgit submodule add <get@github …>
sem o caminho.Observe que, iniciando o git1.8.4 (julho de 2013), você não precisaria mais voltar ao diretório raiz.
( Bouke Versteegh comenta que você não precisa usar
/.
, como emsnippets/.
:snippets
é suficiente)Consulte commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Depende da confirmação 12b9d32790b40bf3ea49134095619700191abf1f
fonte
/.
não é necessária, o git criará os trechos de diretório sem ela.Relative path can only be used from the toplevel of the working tree
. Estou fazendo #git submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") não é a da pergunta original ("You need to run this command from the toplevel of the working tree
")Eu tive um problema semelhante, mas me pintei de canto com as ferramentas da GUI.
Eu tinha um subprojeto com alguns arquivos que até agora copiava em vez de fazer o check-in no seu próprio repositório git. Eu criei um repositório na subpasta, fui capaz de confirmar, enviar, etc, muito bem. Mas no repositório pai, a subpasta não foi tratada como um submódulo e seus arquivos ainda estavam sendo rastreados pelo repositório pai - nada bom.
Para sair dessa bagunça, eu precisava dizer ao Git para parar de rastrear a subpasta (sem excluir os arquivos):
Então eu tive que dizer que havia um submódulo lá (o que você não pode fazer se algo estiver sendo rastreado pelo git):
Atualizar
A maneira ideal de lidar com isso envolve mais algumas etapas. Idealmente, o repositório existente é movido para seu próprio diretório, livre de qualquer módulo pai git, confirmado e enviado por push e, em seguida, adicionado como um submódulo como:
Isso clonará o repositório git como um submódulo - que envolve as etapas de clonagem padrão, mas também várias outras etapas de configuração mais obscuras que o git executa em seu nome para fazer com que o submódulo funcione. A diferença mais importante é que ele coloca um arquivo .git simples lá, em vez de um diretório .git, que contém uma referência de caminho para onde o diretório git real vive - geralmente na raiz do projeto pai .git / modules / jslib.
Se você não fizer as coisas dessa maneira, elas funcionarão bem para você, mas assim que você comprometer e pressionar os pais, e outro desenvolvedor for puxá-los, você apenas tornará a vida deles muito mais difícil. Será muito difícil para eles replicar a estrutura que você possui em sua máquina, desde que você tenha um diretório .git completo em uma subpasta de um diretório que contenha seu próprio diretório .git.
Portanto, mover, pressionar, git add submódulo, é a opção mais limpa.
fonte
Para aqueles de vocês que compartilham meu gosto estranho de editar manualmente os arquivos de configuração, adicionar (ou modificar) o seguinte também ajudaria.
.git / config (configuração pessoal)
.gitmodules (configuração compartilhada confirmada)
Veja isso também - diferença entre .gitmodules e especificação de submódulos em .git / config?
fonte
script bash de uma linha para ajudar a resposta de Chris acima, já que eu havia me pintado em um canto também usando as atualizações do Vundle nos meus scripts .vim.
DEST
é o caminho para o diretório que contém seus submódulos. Faça isso depois de fazergit rm -r $DEST
Felicidades
fonte