Basic git subtrees
January 21, 2022
Condensed notes on how to use git subtrees to vendor in source code.
Basics (add, pull, push)
Pull in a new repository to dir/:
$ git subtree add --prefix dir/ REMOTE REMOTE-BRANCH --squashThe squash flag can be elided if the subtrees history is wanted.
To pull in updates:
$ git subtree pull --prefix dir/ REMOTE REMOTE-BRANCH --squashIf changes need to be pushed back upstream
$ git subtree push --prefix dir/ REMOTE REMOTE-BRANCH --squash
A git subtree is just a folder, so can be removed with rm.
Splitting off a subtree
Split off a directory's commits in a separate branch
$ git subtree split -P dir/ -b NEW-BRANCH-NAMEThis can then be pushed to the remote:
$ git push -u REMOTE NEW-BRANCH-NAME:REMOTE-BRANCHThe old directory can be left in place, and the subtree pull commands can be used as per-normal.