-
-
Save dummys/83160d9b159aa726dcf423d0061f810c to your computer and use it in GitHub Desktop.
Adding subdirectory of a remote repo to a subdirectory in local repo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| This is way more complicated than it should be. The following conditions need to be met : | |
| 1. need to be able to track and merge in upstream changes | |
| 2. don't want remote commit messages in master | |
| 3. only interested in sub-directory of another repo | |
| 4. 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 : | |
| ```sh | |
| # add jsdoc remote, create new tracking branch, | |
| git remote add -f jsdoc-upstream git@github.com:jsdoc3/jsdoc.git | |
| git checkout -b upstream/jsdoc jsdoc-upstream/master | |
| # split off subdir of tracking branch into separate branch | |
| git subtree split --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 --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 --prefix=templates/default --squash merging/jsdoc | |
| ``` | |
| May I never have to google this again. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment