1

我刚刚按照以下步骤进行了稀疏结帐

git clone http://location/repo.git
# create .git/info/sparse-checkout file
git config --bool core.sparsecheckout true
git read-tree -mu HEAD

不幸的是,最后一步失败并显示错误消息

Entry 'path/to/file' not update. Cannot update sparse checkout

这很奇怪,因为 (1)path/to/file存在 (2) 稀疏结帐过程在另一台机器 git 版本 1.7.1 (Centos 6) 上成功。当前机器是安装了 git 版本 1.8.3.1 的 Centos 7 机器。的输出git config --list在两台机器上是相同的。

4

3 回答 3

0

我基本上通过删除所有文件并重复相同的步骤来解决问题。有人建议这可能是 git 中的错误,或 IMO 某种文件损坏。

另一个对我有用的解决方案(YMMV)。尝试反复签出和有问题的目录并运行git read-tree

  1. git checkout -- 路径/
  2. git read-tree -mu 头
于 2019-07-10T11:45:58.667 回答
0

首先,使用 Git 2.27(2020 年第二季度),删除文件后,您可以使用git sparse-checkout reapply

其次,错误信息发生了变化(仍然是 Git 2.27+):

参见提交5644CA2提交681C637提交EBB568B提交22AB0B3提交6271D77提交1AC83F4提交CD002C1 ,CODS 4EE5D50,提交F56F31A提交7AF7A25 ,提交7AA25提案30EE89C1 ,提交3cc7c50 commit 3cc7c50 compes b0433312222adad7dc1e1提交 031ba55(2020 年 3 月 27 日),作者Elijah Newren ( newren)
(由Junio C Hamano 合并 -- gitster--提交 48eee46中,2020 年 4 月 29 日)

unpack-trees:使稀疏路径消息听起来像警告

审核人:Derrick Stolee
签字人:Elijah Newren

稀疏路径问题的消息被表述为导致操作中止的错误,即使我们没有使操作中止。

改写消息以使其在新的上下文中有意义。

这不再是:

Cannot update sparse checkout

但:

The following paths are not up to date
于 2020-05-02T17:13:26.663 回答
0

ie_match_stat如果函数无法匹配统计信息,则会发生错误(对于工作树中的文件) 。这个特定的调用ie_match_stat传递通常会遵守缓存条目标志CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE,或者说:工作树副本是最新的,即使它不是最新的。稀疏检出代码使用 skip-worktree 标志 ( ) 来标记不应检出的文件这样 Git 的其余部分就不会抱怨它们丢失了。ie_match_statCE_VALIDCE_SKIP_WORKTREECE_SKIP_WORKTREE

因此,这里的奇怪之处在于:

  • 跳过工作树位在工作树中的文件上设置。为什么?
  • 此文件的索引条目的缓存stat数据与此文件的结果不匹配lstat。为什么?

第一个问题的答案可能是:因为用户设置了它(使用git update-index)。第二个的答案可能是:因为用户修改了文件。所以它们一点也不奇怪,它们只是暗示该文件与初始结帐或git read-tree操作创建的任何内容都不匹配。如果您不在乎丢失文件的内容,请随时将其删除。如果您确实关心内容,请清除 skip-worktree 位 ( git update-index --no-skip-worktree),之后git diff应该会显示不同之处。

这方面很可能存在一些错误,尤其是在如此古老的 Git 版本中(Git 1.8.x——当前的 Git 是 2.22)。

于 2019-07-10T20:25:28.450 回答