Use git subtree in git version 1.7.11 and above. git subtree is superior to git submodule because:
- Management of a simple workflow is easy. Older versions of git are
supported (even before v1.5.2)
- The sub-project’s code is available right after the clone of the super project is done
git subtree does not require users of your repository to learn anything new, they can ignore the fact that you are using subtree to manage dependencies
git subtree does not add new metadata files like git submodule does (such as
.gitmodule)
- Contents of the subtree can be modified without having a separate repository copy of the dependency somewhere else
Additionally, if you need to detach a subtree of your existing repository into a new repository, git subtree split can help you with that.
UPDATE February 2020: Nowadays I like subrepo even more.