Às vezes, é útil ter um histórico de projeto inteiro em seu projeto ao usar o git – isso também nos permite puxar ramos desse projeto e atualizar suas versões de forma fácil e rápida. É assim que fazemos.
Primeiro, se ainda não tiver feito isso, crie seu repositório:
mkdir myrepo
cd myrepo
git init
touch .gitignore
git add .gitignore
git commit -m 'Initial commit'
Em seguida, precisamos adicionar o repositório que você deseja mesclar com a subárvore como um remoto:
git remote add -f myotherrepo https://github.com/me/myotherrepo.git
Em seguida, mescle o branch que você deseja:
git merge -s ours --no-commit myotherrepo/master
E coloque-o onde quiser em seu repo:
git read-tree --prefix=useful-stuff/myotherrepo/ -u myotherrepo/master
git commit -m 'Subtree merged in myotherrepo'
Pronto, agora temos o outro repo com todo o histórico em seu repo.
Se quisermos atualizar o repo que acabamos de fundir, tudo o que precisamos fazer é:
git pull -s subtree myotherrepo master
e obterá automaticamente as alterações mais recentes.
Você deve notar que a clonagem não clona também os controles remotos, portanto, eles precisam ser adicionados novamente se você estiver trabalhando em um clone novo, por exemplo, em uma máquina diferente.
Fontes: