Git 子模块准备稀疏结帐

Tho*_* S. 2 git git-submodules

我有一个用于稀疏结帐的子模块。没有稀疏结帐我会做

git submodule update --init <path/to/submodule>
Run Code Online (Sandbox Code Playgroud)

但是如何将子模块存储库初始化为空而不获取它(或获取它,但不检查它),所以我可以调用

cd <path/to/submodule>
git config core.sparseCheckout true
cd <../../..>
echo <subdir-to-get> .git/modules/<path/to/submodule>/info/sparse-checkout
Run Code Online (Sandbox Code Playgroud)

很遗憾

git submodule init <path/to/submodule>
Run Code Online (Sandbox Code Playgroud)

不会在.git/modules/<path/to/submodule>和 文件中创建存储库<path/to/submodule>/.git

Von*_*onC 6

您可以像这里一样尝试先将子模块克隆为普通存储库,然后使用git submodule absorbgitdirs.

通过先克隆深度为 1,您不会获得太多数据:

git clone --depth=1 --no-checkout an/Url <path/to/submodule>
git submodule add an/Url <path/to/submodule>
git submodule absorbgitdirs
Run Code Online (Sandbox Code Playgroud)

然后,您可以修改 .git/modules/<path/to/submodule>/info/sparse-checkout

git -C <path/to/submodule> config core.sparseCheckout true
echo 'foo/*' >>.git/modules/<path/to/submodule>/info/sparse-checkout
Run Code Online (Sandbox Code Playgroud)

最后,只获取你想要的文件:

git submodule update --force --checkout <path/to/submodule>
Run Code Online (Sandbox Code Playgroud)