Search code examples
gitgit-submodules

Pull latest changes for all git submodules


We're using git submodules to manage a couple of large projects that have dependencies on many other libraries we've developed. Each library is a separate repo brought into the dependent project as a submodule. During development, we often want to just go grab the latest version of every dependent submodule.

How do I pull the latest changes for all git submodules?


Solution

  • If it's the first time you check-out a repo you need to use --init first:

    git submodule update --init --recursive
    

    For git 1.8.2 or above, the option --remote was added to support updating to latest tips of remote branches:

    git submodule update --recursive --remote
    

    This has the added benefit of respecting any "non default" branches specified in the .gitmodules or .git/config files (if you happen to have any, default is origin/master, in which case some of the other answers here would work as well).

    For git 1.7.3 or above you can use (but the below gotchas around what update does still apply):

    git submodule update --recursive
    

    or:

    git pull --recurse-submodules
    

    if you want to pull your submodules to latest commits instead of the current commit the repo points to.

    See git-submodule(1) for details