首页 > 解决方案 > 稀疏结帐但排除或忽略根目录中的文件?

问题描述

状态的文档git sparse-checkout

默认情况下,运行 git sparse-checkout init 时,会将根目录添加为父模式。此时,sparse-checkout 文件包含以下模式:

/*
!/*/

但是,我不想在sparse-checkout我想要的东西中包含根,

/directory_i_want
!/*
!/*/

但这不起作用,而是返回

警告:无法识别的模式:/*

警告:禁用锥形模式匹配

这样 sparse-checkout 只提取顶部的一个目录,而不是存储库的 root 中的文件。我怎样才能做到这一点?

标签: gitsparse-checkoutgit-sparse-checkout

解决方案


您看到这一点是因为您启用了sparseCheckoutCone. 从参考:

锥形模式集中接受的模式是:

  1. 递归:包含目录内的所有路径。

  2. 父级:包含一个目录中的所有文件。

除了以上两种模式,我们还期望根目录下的所有文件都包含在内

但是它不会自动启用,所以我想知道您为什么要设置它。无论如何,你显然不能使用它,因为你排除了除了directory_i_want. 首先,禁用该选项:

git config core.sparseCheckoutCone 'false'

接下来,恢复初始回购:

git sparse-checkout disable

最后,选择您需要的图案

git sparse-checkout set directory_i_want/

如果您现在查看文件$GIT_DIR/info/sparse-checkout,您将看到一个非常简单的模式 ( directory_i_want/),这就足够了。考虑到sparse-checkout您尝试过的情况,顺序很重要:您不能放在directory_i_want开头,然后用!/*/. 这将导致一个错误,如下所示:

错误:稀疏结帐在工作目录上没有留下任何条目


推荐阅读