【问题标题】:git sparse-checkout of a submodule from a root repogit sparse-checkout 从根 repo 中的子模块
【发布时间】:2019-12-29 14:20:39
【问题描述】:

我有一个带有 4 个子模块的 main repo

  • kvm
  • libvmi
  • qemu
  • 硝基

我想sparse-checkoutkvm,过滤掉一些不符合 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 存储库,然后将其添加到我的主存储库中。

谢谢。

【问题讨论】:

    标签: git git-submodules sparse-checkout


    【解决方案1】:

    使用--no-checkout 又名-n 自己将kvm 存储库克隆到kvm 目录。随意设置它,git submodule absorbgitdirs kvm 从超级项目中移动 repo 并设置它的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2012-06-28
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多