Update Submodules with Git

By  on  

Git submodules seem to confuse people and I can probably count myself in that group of people that are confused.  Their code is kind of part of the codebase, kind of isn't.  Pulling the latest code from the overall project doesn't pull the updated submodule code, so sometimes you get errors and don't know what's going on.  To ensure your submodules are always up to date, run this via the command line:

git submodule update --init --recursive

This command ensure your existing submodules are current as well as adds new submodule code whenever appropriate.  I like to run this at least once a day just to make sure my code is always up to date.  You never know what some of your collaborators have contributed (if you work in a team setting), so running this daily is useful!

Recent Features

  • By
    Regular Expressions for the Rest of Us

    Sooner or later you'll run across a regular expression. With their cryptic syntax, confusing documentation and massive learning curve, most developers settle for copying and pasting them from StackOverflow and hoping they work. But what if you could decode regular expressions and harness their power? In...

  • By
    Camera and Video Control with HTML5

    Client-side APIs on mobile and desktop devices are quickly providing the same APIs.  Of course our mobile devices got access to some of these APIs first, but those APIs are slowly making their way to the desktop.  One of those APIs is the getUserMedia API...

Incredible Demos

  • By
    AJAX For Evil:  Spyjax with jQuery

    Last year I wrote a popular post titled AJAX For Evil: Spyjax when I described a technique called "Spyjax": Spyjax, as I know it, is taking information from the user's computer for your own use — specifically their browsing habits. By using CSS and JavaScript, I...

  • By
    MooTools Window Object Dumping

    Ever want to see all of the information stored within the window property of your browser? Here's your chance. The XHTML We need a wrapper DIV that we'll consider a console. The CSS I like making this look like a command-line console. The MooTools JavaScript Depending on what you have loaded...

Discussion

  1. While this is definitely a useful command, it’s worth noting that updating your submodules basically just checks out the revision as defined in the repository. If you’re maintaining a project that uses submodules, this won’t get the latest code for that submodule, so much as it just ensures that the submodule is on the commit as defined.

    For example, I maintain all of my dotfiles in a Git repository, which includes several submodules (Vim plugins, mostly). This command doesn’t actually update the submodules to the latest revision on their branch. If I want to go into each submodule and pull the latest code for each (which can be horribly risky, caveat emptor), I can do something like this:

    git submodule foreach ‘git checkout master && git pull origin master’

    That will go through each of my submodules, ensuring that they are on the latest master branch. That may not be the desired or best behavior, but it is something I learned about with regards to `git submodule update`.

  2. Hi!
    I’m very interested in git’s submodules but I can’t find a tutorial that I can understand properly

    Could you address this? (or at least point me to your reference tutorial)

    Thanks a lot!

  3. Newton

    Why not create a Git hook for this?

    You could use post-checkout & post-merge to automatically fire this on every branch checkout or pull, respectively.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!