On Mon, Oct 22, 2012 at 06:03:53PM -0400, Phil Hord wrote: > Some projects now use the 'branch' config value to record the tracking > branch for the submodule. Some ascribe different meaning to the > configuration if the value is given vs. undefined. For example, see > the Gerrit submodule-subscription mechanism. This change will cause > those workflows to behave differently than they do now. For those to lazy to hunt down a reference, Gerrit uses submodule.$name.branch to “indicate the branch of a submodule project that when updated will trigger automatic update of its registered gitlink.” [1] They also have some extra sauce: “The branch value could be '.' if the submodule project branch has the same name as the destination branch of the commit having gitlinks/.gitmodules file. … Any git submodules which are added and not have the branch field available in the .gitmodules file will not be subscribed by Gerrit to automatically update the superproject.” > I do like the idea, but I wish it had a different name for the > recording. Maybe --record-branch=${BRANCH} as an extra switch so the > action is explicitly requested. > > git submodule add --branch=master --record-branch=master foo bar Ugh, I don't want to retype the branch name whenever I do this. How about -r/--record, with the recorded name being optional? --record-branch[=] This would satisfy Gerrit users that wanted to use '.', but also satisfy me with: git submodule add -rb=master foo bar However, there is a change that people would see that, and then use git submodule add -r -b=master foo bar which would checkout the HEAD from foo and store `-b=master` in submodule.$name.branch. A more verbose, but less dangerous, option would be a boolean -r/--record that enables the recording of whatever was passed to -b/--branch. This looses the flexibility of running something like git submodule add --branch=master --record-branch=. foo bar but the Gerrit folks have gotten along OK without any branch recording so far ;). They can keep setting '.' the same way they always have. On a tangentially related note, it would be nice to set environment variables for each of the settings in submodule.$name during a foreach call. Then you could use git submodule foreach 'git checkout $branch && git pull' Perhaps you'd want to blacklist/whitelist or downcase settings names to avoid things like [submodule "foo"] PATH = /my/rootkit/ but the update line is much cleaner. Cheers, Trevor [1]: https://gerrit.googlesource.com/gerrit/+/master/Documentation/user-submodules.txt -- This email may be signed or encrypted with GnuPG (http://www.gnupg.org). For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy