Em um projeto Rails, é comum trabalharmos com submódulos do git em plugins. Principalmente se você vai mexer muito nesses plugins e commitar para seu repositório.

Mas é preciso tomar cuidado com a sintaxe do ‘git submodule add’.

Por exemplo, fui incluir um submódulo em um projeto rails já existente (e versionado com git):

$ git submodule add git@github.com:georgeguimaraes/typus.git vendor/plugins/typus

Obs.: Lembrando que a url acima é a minha url privada, porque eu queria commitar a partir do projeto-pai.

Isso cria o arquivo .gitmodules com as informações dos módulos:

$ git status
...
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#    .gitmodules
#    vendor/plugins/typus

Aqui é preciso tomar cuidado.

Se você for digitar ‘git add vendor/plugins/typus’ e for completando os diretórios com TAB (ou seja, digitando apenas as primerias letras e apertando TAB), você vai acabar tendo essa linha:

$ git add vendor/plugins/typus/

Note a barra (/) no final. Aí é que mora o perigo. Se você der ENTER, o git vai entender que você quer adicionar todos os arquivos dentro desse diretório. Mas não é isso o que você quer!! Você quer adicionar o diretório como um submódulo.

Para isso, certifique-se que você está executando:

$ git add vendor/plugins/typus
...
$ git status
 
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#	new file:   vendor/plugins/typus

Obs.: Claro que um simples ‘git add .’ vai adicionar tanto o .gitmodules quanto o diretório da maneira correta. Sem perigo de erros. Mas às vezes você quer adicionar coisas uma a uma (vai que existem outras modificações que você não quer commitar).

No tag for this post.