Git稀疏签出错误“条目'路径/到/文件'未更新。无法更新稀疏签出”

时间:2019-07-10 09:31:50

标签: git sparse-checkout git-sparse-checkout

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

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的输出在两台计算机上都是相同的。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果函数ie_match_stat与统计信息不匹配,则会发生错误(对于工作树中的文件)。对ie_match_stat的特定调用将CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE传递给ie_match_stat,因为CE_VALID通常会说:工作树副本,服从缓存入口标志CE_SKIP_WORKTREECE_SKIP_WORKTREE。是最新的,即使不是。稀疏签出代码使用skip-worktree标志(stat)标记应签出的文件,以便Git的其余部分不会抱怨它们丢失。 / p>

因此,这里的奇怪之处是:

  • skip-worktree位设置在工作树中的文件上。为什么?
  • 此文件的索引条目的缓存lstat数据与此文件的git update-index结果不匹配。为什么?

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

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

答案 2 :(得分:0)

首先,在Git 2.27(2020年第二季度)中,一旦删除了文件,就可以使用git sparse-checkout reapply

第二,错误消息已更改(仍然使用Git 2.27 +):

请参见commit 5644ca2commit 681c637commit ebb568bcommit 22ab0b3commit 6271d77commit 1ac83f4commit cd002c1,{{3} },commit 4ee5d50commit f56f31acommit 7af7a25commit 30e89c1commit 3cc7c50commit b0a5a12commit 72064eecommit fa0bde4commit d61633acommit d7dc1e1commit 031ba55(2020年3月27日)。
(由Elijah Newren (newren)Junio C Hamano -- gitster --中合并,2020年4月29日)

commit 48eee46:使稀疏路径消息听起来像警告

作者:Derrick Stolee
签名人:伊利亚·纽伦

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

重新编码邮件以使其在新的上下文中有意义。

这不再是:

Cannot update sparse checkout

但是:

The following paths are not up to date