Why is git submodule update not automatic on git checkout?

When switching branches with git checkout I would assume that most of the time you would want to update your submodules.

  • In what situation do you not want to update submodules after switching?
  • What would break if this was done automatically by git checkout?

Updated with example:

  • Branch A has submodule S at 3852f1
  • Branch B has submodule S at fd72d7

On branch A, git checkout B will result in a working copy of branch B with submodule S at 3852f1 (with a modified S). git submodule update will checkout S at fd72d7.

  • Git submodule push
  • git submodule talking about folder that does not exist
  • Incorporate HTML5-boilerplate as a Git submodule or is there a better option?
  • Can I use git submodule to manage individual files as well as directories?
  • permission denied for certain git path
  • git submodules: customization
  • Force Git submodules to always stay current
  • Is there a way to add a submodule to a git repo that share a directory structure
  • 2 Solutions collect form web for “Why is git submodule update not automatic on git checkout?”

    I believe that the submodules not updating automatically is in line with the development goals of Git. Git is meant to work in a distributed mode and doesn’t presume that you are even able to connect to a non-local repository unless you explicitly tell it to. Git not auto-refreshing a submodule would be the expected behavior when thought of that way.

    With that being said, if you know that you always want those sub-modules to be pulled in and you know that you would never branch off of those submodules to another local repository, then it shouldn’t break anything if you automatically refreshed them after a checkout.

    git checkot --recurse-submodules will be added to git 2.13

    This is mentioned on the release notes at: https://github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139

    On this mailing list thread, the Git dev Randall S. Becker says he also intends to add a submodule.recurse config later on to turn that on by default, which I think is likely to get merged at some point.

    Then we just have to wait for it to become the default on git 3.0! 🙂

    Git Baby is a git and github fan, let's start git clone.