Git Submodules

Uma dica bem legal, principalmente para quem já lidava com o Subversion como versionador: o git dispõe de uma funcionalidade chamada Git Submodules. Que nada mais são que repositórios dentro de repositórios. Um pouco parecido com o Externals do SVN.

Funcionalidades assim surgiram devido a necessidades de inserir uma biblioteca ou outro projeto em outros projetos. Porem são projetos distintos, e seus desenvolvimentos são totalmente independentes. Esse tipo de problema deve ser encarado com o GitSubmodules e com o proprio git, resolver o problema dessa depêndencia externa.

O Submodule permite que você mantenha o repositório GIT como um subdiretório de outro repositório GIT, isso permite um clone de outro repositório dentro do seu, e permitir commits totalmente separados. Legal não é?

Exemplo de uso: Preciso inserir no meu projeto um repositório com arquivos CSV para importação. Esse repositório vive recebendo updates. Nesse caso você irá apenas consumir esses arquivos CSV ( Comma Separated Values ) para importação local na sua base de dados.

Mão na massa

Exemplo: git submodule add git@bitbucket.org:rivendel/csv-imports.git import/csv

No comando acima estamos adicionando um submodule na pasta import/csv.

Temos agora na raiz do nosso projeto um arquivo chamado .gitmodules com as devidas configurações já feitas, e uma pasta em import/csv criada e funcionando como um repositório.

Inicializando o Submodule

O init vai iniciar as configurações necessárias para o trabalho dos SubModules

Atualizando as configurações

Esse comando irá fazer que caso tenha feito alterações em seus submodulos, irá carregar toda a configuração necessária.
Atualizando a depêndencia
Primeiro acesse a pasta do seu submodulo:

Depois vamos executar o comando pull

 Como isso tudo funciona?
Ao usar o git pull, dentro de um submodule, temos um projeto dentro de outro. Nesse caso o GIT vai gravar o hash do submódulo, e não do seu conteúdo. assim ao criar um submodulo, você acaba adicionando uma versão de outro projeto ao seu.
Caso queira a versão mais nova do submódule, basta executar os mesmos comandos que executa com seu repositório normalmente.
Assim como o PUSH, a unica diferença é que esses comandos devem ser executados com você já estando dentro da pasta do submódulo. Como podem ver, o uso do Submódules é simples e útil inclusive para controle de depêndencias.
21