-
Notifications
You must be signed in to change notification settings - Fork 2
Submodule modes
Jens Lehmann edited this page Jan 12, 2014
·
7 revisions
Depending on the Submodule use case a different mode of operation should be chosen for a submodule. This table describes different modes (italics denote functionality that isn’t implementeed in core git yet).
Update mode | exact | branched |
Description | The SHA-1 recorded for the superproject is checked out as a detached HEAD | A local branch is used to integrate both local and upstream changes, still a SHA-1 might be recorded to denote the exact submodule commit used to record releases or other special occasions |
Typical use case | Feature branch workflow where the user creates a branch before working | A pull based workflow where everybody works on the same branches |
Configuration |
submodule.<name>.update : checkout , which is the default |
submodule.<name>.update : set to merge or rebase depending on the desired update method, optionally submodule.<name>.branch : set to the upstream branch |
When you decide to update the SHA-1 recorded in the superproject, here are your choices:
Update target | local | remote | custom |
Description | Update with the SHA-1 recorded in the superproject’s tree | Update with the SHA-1 recorded in the remote subproject | |
Example situation | After merging from the upstream subproject | After the subproject makes a release | You just felt like it ;) |
Invocation | git submodule update |
git submodule update --remote |
cd submodule && git checkout … |
Note that the update target just determines the what should be integrated with the locally-checked-out submodule, and the update mode just determines how a target should be integrated. Feel free to mix and match.