选择性地初始化/更新git子模块

时间:2015-06-26 14:40:49

标签: git dependency-management git-submodules git-clone

我正在开发一个RESTful框架,可以选择构建HTTP和/或HTTPS支持。当前仅HTTP构建说明如下:

git clone --recursive https://github.com/corvusoft/restbed.git
mkdir restbed/build
cd restbed/build
cmake [-DBUILD_TESTS=YES] [-DBUILD_EXAMPLES=YES] [-DCMAKE_INSTALL_PREFIX=/output-directory] ..
make install
make test

我热衷于提交最新的HTTPS功能,但我希望能够在克隆过程中选择某些依赖项(git子模块),以帮助减少网络流量。

HTTP和HTTPS示例下拉所有依赖项。

git clone --recursive  https://github.com/corvusoft/restbed.git
mkdir restbed/build
cd restbed/build
cmake [-DBUILD_TESTS=YES] [-DBUILD_EXAMPLES=YES] [-DCMAKE_INSTALL_PREFIX=/output-directory] ..
make install
make test

仅限HTTP示例下拉特定依赖项。

git clone --recursive="asio, framework" https://github.com/corvusoft/restbed.git
mkdir restbed/build
cd restbed/build
cmake -DBUILD_SSL=NO [-DBUILD_TESTS=YES] [-DBUILD_EXAMPLES=YES] [-DCMAKE_INSTALL_PREFIX=/output-directory] ..
make install
make test

git --recursive似乎缺少此功能。

  

- 递归   --recurse-submodules创建克隆后,使用其默认设置初始化其中的所有子模块。这相当于   运行git submodule update --init --recursive之后立即执行   克隆完成了。如果克隆的存储库,则忽略此选项   没有工作树/结账(即如果--no-checkout / -n中的任何一个,   --bare,或--mirror给出)

1 个答案:

答案 0 :(得分:1)

正如文档所述,使用--recursive选项和git clone将初始化所有子模块。您可以运行以下命令,它直接使用git submodule来初始化您在HTTP情况下所关注的子模块:

git clone https://github.com/corvusoft/restbed.git
git submodule update --init --recursive dependency/asio
git submodule update --init --recursive dependency/framework    
mkdir restbed/build
cd restbed/build
cmake -DBUILD_SSL=NO [-DBUILD_TESTS=YES] [-DBUILD_EXAMPLES=YES] [-DCMAKE_INSTALL_PREFIX=/output-directory] ..
make install
make test