Re: [RFC-PATCHv2] submodules: add a background story
From: Brandon Williams <hidden>
Date: 2017-02-14 00:39:57
On 02/08, Stefan Beller wrote:
+STATES +------ + +When working with submodules, you can think of them as in a state machine. +So each submodule can be in a different state, the following indicators are used: + +* the existence of the setting of 'submodule.<name>.url' in the + superprojects configuration +* the existence of the submodules working tree within the + working tree of the superproject +* the existence of the submodules git directory within the superprojects + git directory at $GIT_DIR/modules/<name> or within the submodules working + tree + + State URL config working tree git dir + ----------------------------------------------------- + uninitialized no no no + initialized yes no no + populated yes yes yes + depopulated yes no yes + deinitialized no no yes + uninteresting no yes yes + + invalid no yes no + invalid yes yes no + ----------------------------------------------------- + +The first six states can be reached by normal git usage, the latter two are +only shown for completeness to show all possible eight states with 3 binary +indicators. The states in detail: + +uninitialized:: +The uninitialized state is the default state if no +'--recurse-submodules' / '--recursive'. An empty directory will be put in +the working tree as a place holder, such that you are reminded of the +existence of the submodule. +--- +To transition into the initialized state +you can use 'git submodule init', which copies the presets from the +.gitmodules file into the config. + +initialized:: +Users transitioned from the uninitialized state to this state via +'git submodule init', which preset the URL configuration. As these URLs +may not be desired in certain scenarios, this state allows to change the +URLs. For example in a corporate environment you may want to run + + sed -i s/example.org/$internal-mirror/ .git/config ++
Maybe we can try to brainstorm and come up with some clearer terminology while we are at it. I was trying to think about the "initialized" state and I may be the only one but it seems unclear what "initialized" means. I mean I already have all the information about a submodule in the .gitmodules file, isn't it already initialized then? Maybe this state would be better named "(in)active" as a module that is interesting to a user is "active"? -- Brandon Williams