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:

  • Does git clone work through NTLM proxies?
  • How to include ssh private rsa key when accessing git repo via ssh (gitosis)?
  • Show git diff on file in staging area
  • What is the preferred way to manage schema.rb in git?
  • “Bad Credentials” when attempting to create a GitHub repo through the CLI using curl
  • Git cloning: remote end hung up unexpectedly, tried changing postBuffer but still failing
    • 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.

  • Failed, DIRTY_WORKTREE in eclipse, how to solve it?
  • How to make git mark a deleted and a new file as a file move?
  • How to run Git commands on remote repository
  • Can Gitlab/Gitolite enforce correct username/email
  • Is there a script that provides the equivalent to git-bisect for Perforce (p4)?
  • git, how to I go back to origin master after pulling a branch
  • 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.