我正在编写一些自动化来将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子模块的关系吗?
谢谢!