I have a github repository named "foo" (or rather "myusername/foo"). Now suppose I want to create a repository named "bar", which uses the code in foo; I could just make a copy of the files, but I don't want to need to pull updates - I want to always see only whatever's in the "foo" repository right now; and not to have commits of "updates from foo". I believe I've noticed some repositories in which subfolders are actually separate repositories; and I know git supports sub-repositories or some such thing. So, can I perform such a "repository mount"? If so, how?
Bonus points if I can have the "mount" at a certain version, or a certain branch, rather than the master
You have 2 main options to manage sub project in git.
Git does not have any dependency manager and the most common options are the following:
git submoduleIn order to use submodule each folder will be a standalone repository and will be managed and stored in a different location. Git will checkout specific commit (commit, version, tag etc) and will use it as the HEAD of the submodule. Most of the times the submodule will be in detached HEAD.
Once the projected is added tot your repo you have to init and update it.
As of Git 1.8.2 new option
--remotewas addedwill
fetchthe latest changes from upstream in each submodule,merge them in, andcheck outthe latest revision of the submodule.As the docs describe it:
This is equivalent to running git pull in each submodule.
using submodule will place your code inside your main project as part of its content [new folder].
The difference between having it locally inside the folder or having it as part of a submodule is that in submodule the content is managed (commited) to a different standalone repository as explained above.
This is an illustration of submodule - project inside another project in which each project is a standalone project.
git subtreeGit subtree allows you to insert any repository as a sub-directory of another one
Very similar to
submodulebut the main difference is where your code is managed. In submodules the content is placed inside a separate repo and is managed there which allow you to clone it to many other repos as well.subtreeis managing the content as part of the root project and not in a separate project.Instead of writing down how to set it up and to understand how to use it you can simply read this excellent post which will explain it all.
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/