Adicionando todo o histórico de outro projeto com git usando subtree merge

À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:

kernel.org

github.com