Git: Submódulos. Sim, é como svn:externals , mas é diferente!

Submódulos permitem que repositórios externos sejam adicionados dentro de um subdiretório da arvore do nosso projeto, sempre apontando para um commit específico.

Sim, é como svn:externals , mas é diferente!

O diretório onde o submódulo fica tem sua arvore específica, inclusive a pasta .git com suas próprias configurações.

Quando adicionamos um submódulo a uma árvore de projeto, estamos adicionando um commit específico – atrelamos ele a uma versão (um SHA).

Toda vez que alguém baixar este projeto e pedir o submódulo ele vai receber esta versão mesmo que o repositório original esteja bem mais adiantado.

  1. git submodule add [URL do repositório] [pasta de destino]
  2. git submodule add http://github.com/gpupo/html5-boilerplate.git lib/vendor/html5-boilerplate

Com isso ele vai criar um repositório para o html5-boilerplate na pasta lib/vendor/html5-boilerplate.

Vale a pena dar uma olhada nesta pasta, dentro do diretório .git, e ver o que tem nos arquivos texto de configuração.

Os arquivos do repositório utilizado como submódulo, a princípio, não ficam dentro do nosso repositório, mas o SHA sim.

Temos então que adicionar o subdiretório criado à arvore original para que ele possa ser integrado ao nosso repositório:

  1. git add lib/vendor/html5-boilerplate
  2. git commit -m “Adicionado html5-boilerplate”

Quem clonar meu projeto vai baixar o submódulo?

Não. É necessário iniciar e atualizar os submódulos:

  1. git submodule init
  2. git submodule update

Com isso ele vai trazer o conteúdo do(s) submódulos de acordo com o SHA de cada um.

git submodule mostra os submódulos do projeto e também o SHA de cada um deles.

E você, como utiliza submodules? Fala aí!

 

Atualização:

Exemplos de uso

https://gist.github.com/1211230

Uma resposta para “Git: Submódulos. Sim, é como svn:externals , mas é diferente!”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *