Como usar git subtree com o BRTOS
Com a mudança de repositório do BRTOS do SVN no Googlecode para o GIT no Github percebemos a falta no GIT de uma funcionalidade muito interessante do SVN e que é a possibilidade de fazer “SVN checkout/commit” de alguns diretórios selecionados do repositório ao invés do repositório inteiro. Assim, por exemplo, o usuário podia ter um subdiretório do BRTOS dentro do seu projeto principal, e podia mantê-lo sempre atualizado com o repositório principal do BRTOS e, até mesmo, submeter correções e atualizações a partir deste subdiretório.
Com o Git, embora seja possível se ter um subdiretório sempre atualizado, usando o “git subdmodules” ou o “git checkout”, as alterações feitas no subdiretório não podem ser diretamente enviadas ao repositório principal. Mas nem tudo está perdido, pois o Git oferece uma alternativa chamada “git subtree” que permite ter uma funcionalidade similar àquela do SVN, embora com um pouco mais de trabalho. A seguir vamos explicar como usar o “git subtree” em um projeto que utiliza o BRTOS.
Inicialmente, monte um repositório git do projeto principal, por exemplo, usando o github. Em seguida, na raiz do repositório, adicione o repositório do brtos como remoto, usando o comando abaixo. Este comando precisa ser realizado uma única vez.
git remote add -f brtos https://github.com/brtos/brtos.git
Em seguida, adicione o BRTOS como subtree (isso só precisa ser feito uma única vez) e faça um “pull” do projeto BRTOS usando os comandos abaixo. O segundo comando faz o “pull” do projeto BRTOS e um “merge” com o projeto principal, no subdiretório indicado na opção “–prefix” (no exemplo, o subdiretório será “brtos”).
git subtree add –prefix=brtos –squash brtos master
git subtree pull –prefix=brtos –squash brtos master
Pronto! O BRTOS já está incluso no projeto principal. E para mantê-lo atualizado é só repetir o comando anterior. Para atualizar o repositório remoto do projeto principal dê um “git push”. Além disso, é possível submeter atualizações (“pull requests”) para o repositório. Para isso, é necessário fazer o “fork” do BRTOS no github com seu usuário e adicioná-lo como remoto com o comando abaixo. Dica: para listar os remotos use “git remote”
git remote add -f brtos git@github.com:barriquello/brtos.git
Em seguida, faça o procedimento de “merge” usando o “git subtree”, e atualize o seu repositório remoto, assim:
git subtree pull –prefix=brtos –squash brtos master
git push
Para submeter “pull requests”, faça as alterações no subdiretório do BRTOS e realize o “commit/push” destas alterações de forma separada das alterações do projeto principal. Assim, tem-se um “commit” limpo e será possível fazer um “pull request” para o repositório principal do BRTOS. Para isto, faça o “commit” das alterações e, em seguida, faça o “push” para o repositório remoto, usando o comando:
git subtree push -P brtos brtos master
Por fim, é só fazer o “pull request”.