1

我有一个包含 4 个子模块的主仓库:

  • 虚拟机
  • libvmi
  • qem
  • 硝基

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仓库,然后再将它添加到我的主仓库中。

谢谢。

4

1 回答 1

2

--no-checkout使用aka自己将 kvm 存储库克隆-nkvm目录中。根据需要进行设置,git submodule absorbgitdirs kvm从超级项目移动存储库并设置它core.worktree并将.git面包屑文件留在该kvm 工作树中,然后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

你准备好了

mkdir kvm/.git/info
git -C kvm config core.sparsecheckout true
printf %s\\n '/*' '!aux.*' >kvm/.git/info/sparse-checkout
git submodule absorbgitdirs kvm
git -C kvm reset --hard
于 2019-12-29T16:10:08.707 回答