Eu tenho dois projetos SVN em uso de outro repositório SVN usando svn: externals .
Como posso ter a mesma estrutura de layout de repositório no Git?
Eu tenho dois projetos SVN em uso de outro repositório SVN usando svn: externals .
Como posso ter a mesma estrutura de layout de repositório no Git?
git submodule
agora pode emularsvn:external
(desde março de 2013).Respostas:
O Git tem duas abordagens semelhantes, mas não exatamente equivalentes ao svn: externals:
Mesclagens de subárvores inserem o código do projeto externo em um subdiretório separado dentro do seu repositório. Isso tem um processo detalhado de configuração e é muito fácil para outros usuários, porque é incluído automaticamente quando o repositório é retirado ou clonado. Essa pode ser uma maneira conveniente de incluir uma dependência no seu projeto.
É fácil extrair alterações do outro projeto, mas complicado enviar as alterações de volta. E se o outro projeto precisar se mesclar do seu código, os históricos do projeto serão mesclados e os dois projetos se tornarão efetivamente um.
Os sub-módulos Git ( manual ) vinculam-se a um commit específico no repositório de outro projeto, como svn: externals com um
-r
argumento. É fácil configurar os submódulos, mas todos os usuários precisam gerenciar os submódulos, que não são incluídos automaticamente nos checkouts (ou clones).Embora seja fácil enviar as alterações de volta para o outro projeto, isso pode causar problemas se o repositório for alterado. Portanto, geralmente não é apropriado enviar as alterações de volta para um projeto em desenvolvimento ativo.
fonte
svn:externals
. Com a revisão 1.5, a sintaxe foi alterada para um formato mais flexível. O que foi adicionado foi o endereço relativo de URL.Como mencionei em " Atualização da nova versão do submódulo Git ", você pode obter o mesmo recurso externo do SVN com os submódulos Git 1.8.2:
Isso é suficiente para um submódulo seguir uma ramificação (como no commit MAIS RECENTE de uma ramificação remota de um repositório upstream do submódulo ). Tudo que você precisa fazer é:
Isso atualizará o submódulo.
Mais detalhes estão em "
git submodule
rastreamento mais recente ".Para converter um submódulo existente em um rastreamento de uma ramificação : consulte todas as etapas em " Sub-módulos Git: Especifique uma ramificação / marca ".
fonte
svn:externals
?--depth
mas isso realmente não resolve o problema.Tenho uma solução alternativa para o problema - ferramenta gil (git links)
Ele permite descrever e gerenciar dependências complexas de repositórios git.
Também fornece uma solução para o problema de dependência dos sub-módulos recursivos git .
Considere que você possui as seguintes dependências do projeto: exemplo de gráfico de dependência do repositório git
Em seguida, você pode definir o
.gitlinks
arquivo com a descrição da relação dos repositórios:Cada linha descreve o link git no seguinte formato:
Finalmente, você deve atualizar seu repositório de amostras raiz:
Como resultado, você clonará todos os projetos necessários e os vinculará de maneira adequada.
Se você deseja confirmar todas as alterações em algum repositório com todas as alterações em repositórios vinculados a filhos, é possível fazê-lo com um único comando:
Os comandos pull, push funcionam de maneira semelhante:
A ferramenta Gil (git links) suporta os seguintes comandos:
Mais sobre o problema de dependência dos sub-módulos recursivos git .
fonte
gil
.