I have successfully created a big repo made of a few subrepos with git-subtree, let's say Master contains Slave1 and Slave2.
Master/ Slave1/ Slave2/
Now I want to tag on Master and push each tag to the slave repos, how can I do it?
If I "git push Slave2 --tags" the entire tag is transferred, but I only want the files related to Slave2 to be transferred.
You can achieve it with git-subsplit, but it's honestly a bit unpractical and slow.
Any suggestion?
As mentioned in "How to make “git push” include tags within a branch?", git 1.8.3 (May 2013) now includes a
git push --follow-tags
option:Now, remember that a tag applies to the full repository (not a subdirectory), but one idea would be to:
master
into a 'slave1_br
' when you have a stable state ofSlave1
, and put a tag there.master
into a 'slave2_br
' when you have a stable state ofSlave2
, and put a tag there.And then:
That is the only way I know to not push all the tags, but only the one reachable from the branch you are pushing.
I realize that involves more than one branch (
master
), but it could be an alternative togit-subsplit
.I have a solution using git subtree split
All is done on the Master Repository, you can use any branch of the Master.
First create the tag on Master repository
Create the tag for the Slave1
checkout the tag
Create a branch containing only slave1 for this tag
Create the tag on this branch
Push the tag on the Slave1 repository
Clean the Master repository
Clean the branch
Finally you will have on the Slave1 repository a tag at the same commit than the Master repository with the same name, here 1.0.0
The thing that IMHO is better is that there is no other branch appart from the temporary branch created for this (only the tag is pushed)
I found this in a hard way.
When using subtree, the commit in the subtree repo will have a different SHA.
So you only need to push the commits to subtree, then locate the specific commit in subtree repo that you want to tagged, tag it and push to the subtree repo.
My setup is using sourcetree and github.com, but I think it should be same with other cases.
script to run:
git
Parameters:
shiny/app
is my subfolder, webapp is my github repo remote nameThis is much easier and cleaner than all the answers above. Of course the tag is limited to the subtree instead of full repo, but I think this is what I want.