从主存储库

时间:2017-03-09 20:19:15

标签: git git-submodules sparse-checkout

我正在编写一些自动化来将git子模块更新为远程的最新版本。通常,这是通过在branch=<blah>中指定.gitmodules并运行:

来实现的
git submodule update --remote

但对我来说这不合适。

我正在处理超过6演出的主存储库,子模块超过10演出。不要问我为什么,这是它的方式。当一个人运行git submodule update --remote --init时,git会执行远程分支的完整检出,​​这需要永远。我想更新主存储库中的子模块指针到最新,而不检查整个子模块。如果可能的话,我还想避免检查整个主存储库。所以我设计了一个使用稀疏检出并手动克隆子模块的解决方案:

1)仅使用.gitmodules

执行主存储库的稀疏检出

git clone -b <branch> --no-checkout --depth=1 <url>

git config core.sparsecheckout true

echo .gitmodules > .git\info\sparse-checkout

git checkout <topic-branch>

2)用

手动克隆子模块

git submodule init

git clone --no-checkout --depth=1 -b <submodule-branch> <submodule-url> <submodule-path>

此时我希望git状态报告子模块提交的差异,因为它现在不同于子模块的签入版本。然后我可以简单地添加子模块路径,提交和创建拉取请求。但是,使用这种稀疏检出方法,主存储库不知道我在子模块中所做的更改。如果我对主存储库进行普通检出而不是稀疏,则此方法有效,但是我还需要检出整个主存储库。这是稀疏结账的一些限制与git子模块的关系吗?

谢谢!

0 个答案:

没有答案