Оригинал статьи: http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
Также см. оригинальную документацию: http://www.git-scm.com/book/en/Git-Tools-Subtree-Merging
Добавить репозиторий как remote:
git remote add -f gouuid https://github.com/nu7hatch/gouuid.git
Запустить merge со стратегией ours (предпочтение текущей ветки) без выполнения самого коммита:
git merge -s ours --no-commit --squash gouuid/master
Добавить файлы из бранча в подкаталог текущего индекса:
git read-tree --prefix=_deps/src/github.com/nu7hatch/gouuid -u gouuid/master
Выполнить коммит:
git commit
В репозитории, где выполняются нижеперечисленные команды, должен быть добавлен remote с соответствующим именем.
Обновление remote:
git remote update gouuid
Посмотреть разницу между имеющейся версией и master веткой апстрима:
git diff HEAD:_vendor/src/github.com/nu7hatch/gouuid gouuid/master
Для подтягивания всех изменений с внесением их в историю основного репозитория можно выполнить такую команду:
git pull -s subtree \
-X subtree=_vendor/src/github.com/nu7hatch/gouuid \
gouuid master
Более вероятно, что сторонняя история не будет нужна, обновить код, не включая её в историю основного репозитория можно следующим образом:
git pull -s subtree \
-X subtree=_vendor/src/github.com/nu7hatch/gouuid \
--squash --no-commit gouuid master
git commit -m 'gouuid dependency updated'