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@example.com: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.