This is way more complicated than it should be. The following conditions need to be met :
- need to be able to track and merge in upstream changes
- don't want remote commit messages in master
- only interested in sub-directory of another repo
- needs to go in a subdirectory in my repo.
In this particular case, I'm interested in bringing in the 'default' template of jsdoc as a sub-directory in my project so I could potentially make changes to the markup it genereates while also being able to update from upstream if there are changes. Ideally their template should be a separate repo added to jsdoc via a submodule -- this way I could fork it and things would be much easier.... but, it is what it is.
After much struggling with git, subtree and git-subtree, I ended up finding this http://archive.h2ik.co/2011/03/having-fun-with-git-subtree/ -- it basically sets up separate branches from tracking remote, the particular sub-directory, and uses git subtree contrib module to pull it all togther. Following are the commands, modified for my use case :
# add jsdoc remote, create new tracking branch,
git remote add -f jsdoc-upstream [email protected]:jsdoc3/jsdoc.git
git checkout -b upstream/jsdoc jsdoc-upstream/master
# split off subdir of tracking branch into separate branch
git subtree split -q --squash --prefix=templates/default --annotate="[jsdoc] " --rejoin -b merging/jsdoc
# add separate branch as subdirectory on master.
git checkout master
git subtree add --prefix=jsdoc-template --squash merging/jsdoc
# switch back to tracking branch, fetch & rebase.
git checkout upstream/jsdoc
git pull jsdoc-upstream/master
# update the separate branch with changes from upstream
git subtree split -q --prefix=templates/default --annotate="[jsdoc] " --rejoin -b merging/jsdoc
# switch back to master and use subtree merge to update the subdirectory
git checkout master
git subtree merge -q --prefix=templates/default --squash merging/jsdoc
May I never have to google this again. I still haven't tried merging upstream yet, guess I'll cross that bridge when I get to it.
@fatfatson
The other way around. Split a sub-dir as a sub-tree from current branch and merge it into the remote tracking branch upstream. Sadly there is not enough margin to fit the commands in here. :)