Retrospectively add –recursive to a git repo

If you git clone with --recursive, you can get all the git submodules too.

If I’ve forgotten to add this magical flag when cloning, as can happen, how do I now go and get any submodules?

Additionally, how can I set the recursive flag as a default for future clones?

  • Removing all files from a just initialized git repo staging area
  • Using changes on branch B while working on branch A
  • Is it possible to have multiple local git repositories in the same folder?
  • What is the “reset” command for a git cloned repository?
  • Merging after Git revert
  • Rebase entire development branch onto new master branch
  • Execute Maven plugin goal on parent module, but not on children
  • How to push the current branch on a new created remote branch
  • 4 Solutions collect form web for “Retrospectively add –recursive to a git repo”

    You can do it with this after a simple top-level clone:

    git submodule update --init --recursive
    

    I would not recommend making clone do this by default. The proper way to do this if you are using submodules aggressively for development and not just linking to 3rd party OSS libs on github that you may upgrade once in a blue moon, is to use git slave or subtree.

    Hope this helps.

    1. From the root of your repo:

      $ git submodule update --init --recursive
      

      That will update any and all registered submodules, initializing them if need be to the value as found in the .gitmodules file, and also recurse into complex submodules (ones with submodules of their own) and initialize and update them as well.

    2. The easiest way I know of to make cloning recursively the default would be to shadow git clone with an alias

      $ git config --global alias.clone = 'clone --recursive'
      

      As far as adding options always, I think that’s the idiomatic method.

    IIRC,
    git submodule init,
    git submodule update

    Unfortunately, I do not see an option to enable recursive by default, however.

    It appears you can’t override “clone” with alias “clone”, so it’s a new alias (Abizern’s solution) or “–recursive”.

    Is it possible to override git command by git alias?

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