git从根仓库稀疏签出子模块

时间:2019-12-29 14:20:39

标签: git git-submodules sparse-checkout

我有一个main repo,带有4个子模块:

  • kvm
  • libvmi
  • qemu
  • 硝基

,我想sparse-checkout kvm来过滤掉一些讨厌的文件,这些文件与Windows上的文件系统限制不兼容 (AUX是保留文件名,而kvm树包含aux.{h|c}

我了解如何在普通存储库上执行sparse-checkout,但是当我在子模块上执行相同操作时,它不起作用,.git/modules目录丢失了:

git clone https://github.com/KVM-VMI/kvm-vmi/
git -C kvm config core.sparseCheckout true
echo "!drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.*" >> .git/modules/kvm/info/sparse-checkout # ignore aux.*
echo "/*" >> .git/modules/kvm/info/sparse-checkout # checkout everything else
git submodule update --init

第一个echo命令将失败,因为尚未创建.git/modules

我不知道是谁负责创建此目录。

我在某处缺少“ init”命令吗?

注意:

我一直在寻找关于Stackoverflow或博客文章的解决方案:

但是它们对我不起作用,因为我不想克隆单独的kvm存储库,以后再将其添加到我的主存储库中。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用--no-checkout-n将自己的kvm存储库克隆到kvm目录中。根据需要进行设置,从超级项目git submodule absorbgitdirs kvm中移动存储库并设置其core.worktree,并将.git面包屑文件保留在该kvm工作树中,然后{{ 1}}完成结帐。

git -C kvm reset --hard

您就准备好了

git clone https://github.com/KVM-VMI/kvm-vmi
cd kvm-vmi
git submodule init
git clone -n `git config submodule.kvm.url` kvm
mkdir kvm/.git/info