Exclude submodule of a submodule

Viewed 5594

I have git repo where I link some of my dependencies using git submodules inside extern/ dir. Say I have a dependency A as a submodule, located at extern/A. Now A itself has some dependencies as git submodules. In A's repo, that is, eg. A/test/data/X.

Now when I clone my repo, and run git submodule update --init --recursive, in order to build it on a CI server, or w'ever, I'd like the above command to ignore exter/A/test/data/X, because it's like 1G of data that I don't want.

My other dependencies however, have some useful submodules, so I can't just skip --recursive. Is there a way to do this?

2 Answers

You can use submodule.<name>.update config variable to set which submodule should be updated as mentioned here How to exclude a specific git submodule from update?.

If you want to exclude the submodule X in A, then you can use the following command:

git -c submodule."X".update=none submodule update --init --recursive

Note: This assumes that the submodule X in repo A (which is a submodule of extern) is unique across the whole repo extern (including all its submodules, and their submodules and so on...) If X is not unique, then all submodules named X will be skipped in repo extern.


You can skip the submodules during the cloning process, using the following command:

$ git -c submodule."X".update=none clone --recurse-submodules <repository>

If the submodule is located in a directory under the repository, then the relative path with respect to its repository should be included in the submodule name. To avoid any confusion, you can get the submodule name from the .gitmodules file in the repository.

Consider the following example .gitmodules file,

[submodule "path/to/submodule_X"]
    path = path/to/submodule_X
    url = https://github.com/<user>/<repo>
[submodule "Y"]
    path = Y
    url = https://github.com/<user>/<repo>

If you want to skip submodule X, then replace <name> in submodule.<name>.update with this "path/to/submodule_X". The same applies to nested submodules.

Related