git submodule update not functioning

You have a specific version committed to your repository. For git the submodules are "files" containing a sha1-hash of the version you provided. git submodule update --init --recursive ensures that your submodule is available in exactly that version.

For example:

  • You make a git init on a directory and have a empty repo
  • You add a submodule using git submodule add which will record the current masters sha1-hash of that repo you are adding in your own repository
  • Multiple commits are made to the submodule but your repo will still contain that one hash you had as you added the submodule
  • If you make a git pull in the submodule you will get the new commits and have an uncommitted change in your own repository (the new sha1-hash of the submodules master)
  • As soon as you commit that change you are "pinning" the current version of the submodule
  • git submodule update will now enforce the new version is there

So if some other contributor of your own repository updates his checkout and does a git submodule update he will get the version you pinned. So in general the submodule update will do some work only when the submodule is not checked out or if someone changed the associated hash in your repository.


You need to make sure your submodules are following a branch, or they will only be checked out at a specific SHA1 (not at the latest of a branch, but the special entry of the index of your parent repo)

See "Git submodules: Specify a branch/tag" in order to make your submodule follow a branch.

Then a git submodule update --init --recursive --remote would be enough to check out the latest from that branch.

This (git submodule update --remote) requires git 1.8.2+ March 2013. The OP Luís de Sousa has a git 1.7.9.5 (March 2012) which doesn't offer this feature. 

Tags:

Git