Estou trabalhando em um projeto de código aberto no GitHub.
Ele possui um subdiretório / fornecedor no qual possui uma cópia de várias bibliotecas externas. O mantenedor original do projeto atualizava esse diretório com uma cópia mais recente da biblioteca externa de vez em quando.
Um desenvolvedor me enviou uma solicitação de recebimento com a idéia de substituir essa cópia pelo submódulo git .
E estou pensando se é uma boa ideia ou não.
Profissionais do submódulo Git:
- Os submódulos foram projetados especificamente para cenários semelhantes
- Isso remove a possibilidade de confirmação acidental ao Fornecedor, que será substituída na próxima atualização
Sub-módulo Git Contras:
- Parece que os submódulos do git aumentam a complexidade do mantenedor para uma pessoa que clonará / puxará o projeto (etapas adicionais necessárias após você clonar para começar a trabalhar com o projeto: "git submodule init", "git submodule update"
Qual a sua opinião sobre isso?
Mais uma coisa. Esse problema é uma biblioteca de tamanho razoavelmente pequeno com dependências externas muito limitadas. Eu acho que qualquer ferramenta de construção seria um exagero por enquanto.
git clone --recursive
e, em seguida, não precisam executar os comandos do submódulo. Ninguém mais havia mencionado esse petisco; a maioria das pessoas que conheço que têm submódulos anuncia isso no README.Respostas:
Uma alternativa para um submódulo é usar
git subtree
. Isso oferece os benefícios,git submodule
mas sem aumentar a complexidade para o usuário final. O repositório de terceiros é mesclado na árvore principal do projeto, mas há metadados armazenados da maneira que você pode:Para usuários do Git que não são sofisticados o suficiente para entender os submódulos, a abordagem da subárvore torna a obtenção de um clone do seu projeto mais difícil do que qualquer outro clone. Uma breve descrição da documentação:
Eu havia montado um projeto no trabalho usando submódulos, e os problemas em manter os submódulos atualizados nos clones de todo mundo eram muito trabalhosos. Recentemente, mudei para o uso de subárvores em todos os lugares e esses problemas desapareceram.
Observe que git-subtree faz parte do
git/contrib
diretório e deve ser instalado separadamente.fonte
Uma desvantagem do uso de submódulos é que os tarballs ou arquivos zip no Github (e muitos outros serviços) não incluem as fontes dos submódulos. Ou seja, os arquivos não são independentes. Isso é um problema se o repositório for pequeno e realmente não tiver um script de construção, como um site HTML estático, dependendo de uma biblioteca JavaScript.
fonte
Este é o local ideal para usar submódulos. Eles reduzem o tamanho e a complexidade do seu repositório e facilitam a atualização das bibliotecas externas para uma nova versão.
Eles não são difíceis de descobrir como usar, e são bastante usados nessa situação; portanto, basta anotar no README do projeto que você usa submódulos e o que fazer, e as pessoas devem ser capazes de descobrir fora. A primeira vez que encontrei um repositório com um submódulo, eu o instalei em 10 a 15 minutos e nunca tive problemas em descobrir o que fazer desde então.
fonte
O uso de submódulos impede que você faça alterações locais no código e cria uma dependência no repositório externo. Se você tiver certeza de que nunca desejará personalizar uma biblioteca ou fazer correções de erros locais e pode ter certeza de que o servidor externo estará sempre disponível quando você quiser clonar uma nova cópia.
Em resumo - você quer simplesmente usar as bibliotecas ou as considera parte da sua base de código? Se eles não são o seu código, por que eles estão no controle de versão e não apenas em algo que você precisa ter instalado?
fonte