Git 子模块准备稀疏结帐
Git submodule prepare for sparse checkout
我有一个用于稀疏结帐的子模块。如果没有稀疏结帐,我会做
git submodule update --init <path/to/submodule>
但是如何在不获取它(或获取它但不检查它)的情况下将子模块存储库初始化为空,以便我可以调用
cd <path/to/submodule>
git config core.sparseCheckout true
cd <../../..>
echo <subdir-to-get> .git/modules/<path/to/submodule>/info/sparse-checkout
很遗憾
git submodule init <path/to/submodule>
不在 .git/modules/<path/to/submodule>
和文件 <path/to/submodule>/.git
中创建存储库。
你可以试试,, to clone the submodule as normal repository first, and then use 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
然后,你可以修改.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
最后,只获取您想要的文件:
git submodule update --force --checkout <path/to/submodule>
如 by Janus, one can do even better (fewer data) with a git clone --filter
, which I illustrated in 2019 with "":
#fastest clone possible:
git clone --filter=blob:none --no-checkout https://github.com/git/git
cd git
suburl=$(git config -f .gitmodules --get submodule.<sub>.url)
git submodule update --init --force --checkout <sub>
(将 <sub>
替换为 .gitmodules
中的子模块名称条目)
我有一个用于稀疏结帐的子模块。如果没有稀疏结帐,我会做
git submodule update --init <path/to/submodule>
但是如何在不获取它(或获取它但不检查它)的情况下将子模块存储库初始化为空,以便我可以调用
cd <path/to/submodule>
git config core.sparseCheckout true
cd <../../..>
echo <subdir-to-get> .git/modules/<path/to/submodule>/info/sparse-checkout
很遗憾
git submodule init <path/to/submodule>
不在 .git/modules/<path/to/submodule>
和文件 <path/to/submodule>/.git
中创建存储库。
你可以试试,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
然后,你可以修改.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
最后,只获取您想要的文件:
git submodule update --force --checkout <path/to/submodule>
如git clone --filter
, which I illustrated in 2019 with "
#fastest clone possible:
git clone --filter=blob:none --no-checkout https://github.com/git/git
cd git
suburl=$(git config -f .gitmodules --get submodule.<sub>.url)
git submodule update --init --force --checkout <sub>
(将 <sub>
替换为 .gitmodules
中的子模块名称条目)