如何从更新中排除特定的git子模块?

时间:2018-09-05 07:29:30

标签: git version-control git-submodules

我在.gitmodules中有子模块列表。 我仅在配置文件中启用了某些选项的情况下才下载特定的子模块,即grpc。 由于有时我的构建不需要grpc。 所有子模块都在第三方目录中。 所以.gitmodules就像:

[submodule "third-party/libzip"]
        path = third-party/libzip
        url = https://github.com/nih-at/libzip.git
[submodule "third-party/sqlite"]
    path = third-party/sqlite
    url = https://github.com/mackyle/sqlite.git
    branch = sqlite-3.23.1
[submodule "third-party/grpc"]
    path = third-party/grpc
    url = https://github.com/grpc/grpc.git

还有一种在执行命令时专门排除子模块的方法:

git submodule update --init --recursive

我想在子模块更新时在grpc中排除grpc和子模块。像这样:

git submodule update --init --recursive "exclude third-party/grpc"

1 个答案:

答案 0 :(得分:7)

从git帮助中:

  

更新

     

通过克隆丢失的子模块并更新已注册的子模块,以使其与超级项目的期望相符。   子模块的工作树。              根据命令行选项和submodule..update的值,可以通过几种方式完成“更新”   配置变量。支持的              更新过程为:

     

...

     

...

     

如果未提供任何选项并且submodule.<name>.update设置为none,则子模块不会更新。

因此在配置文件中设置update = none。您也可以在--之后显式给出路径,以仅更新特定的子模块。要即时执行此操作而不更改配置文件,@ PrashantShubham指出您可以:

git -c submodule."third-party/grpc".update=none submodule update --init --recursive