Git subtree simple example
Recently I’ve been uploading several older projects to GitHub. Then I stumbled into a problem.
I had shared VB.Net solutions, common DLLs which were used between different projects.
I was looking for a simple, approach to maintain a separate repo for a common solution which I could share with different solutions / repos.
I didn’t find a simple method, but I figured git subtrees the easiest / best option.
Having said that, this discussion outlines my initial attempt at finding such a method, which seems to work well.
I’m making this really simple so it’s easy to understand and easy for me to refer to in the future.
OK, I setup two repos, main and sub. The sub repo will be nested locally into the main folder.
Here’s my repos…
I put some obvious files in each.
I then opened terminal (or windows command line).
I cd’d into my documents folder.
I then created a subtrees folder.
Next, I cloned my main repo into that folder
cd documents mkdir subtrees cd subtrees git clone https://github.com/Jules2010/testing-subtrees-main-repo main
Ok, so notice the last parameter
main this is the folder when I want the repo.
Next, I cd’d into the
main folder and added / nested the
cd main git subtree add --prefix=sub https://github.com/Jules2010/testing-subtrees-sub-repo.git master
Notice prefix here is the
sub folder and the last parameter here is the branch
Ok, so let’s have a look at our folders in
Julians-MBP:subtrees jm$ ls -R main ./main: README.md main.txt sub ./main/sub: README.md s ub.txt
Let’s add a new file in the
cd sub touch sub-updated-file.txt Git add . git commit -m "added a new file to sub repo" Git push
So, what just happened? I create a new file, staged it, commited it and pushed it. So where did it push to?
Interesting I thought it would push to the
sub repo, but no, it pushed to the
I guess that’s really the way you’d want this to work!
So now let’s push this change to the
git subtree push --prefix=sub https://github.com/Jules2010/testing-subtrees-sub-repo.git master
Not as difficult as you think, right?
I guess now you’d setup everything, that last line is all you need going forward.