Skip to content

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.

Clone this wiki locally