【问题标题】:Git sparse checkout error "Entry 'path/to/file' not update. Cannot update sparse checkout"Git稀疏结帐错误“条目'路径/到/文件'未更新。无法更新稀疏结帐”
【发布时间】:2019-11-19 21:40:01
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    1. git checkout -- 路径/
    2. git read-tree -mu HEAD

    【讨论】:

      【解决方案2】:

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

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

      • 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)。

      【讨论】:

      • 问题又出现了。相同的仓库不同的结帐git diff 返回大量消息warning: CRLF will be replaced by LF in path/to/fileThe file will have its original line endings in your working directorygit update-index --no-skip-worktree 删除错误。
      【解决方案3】:

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

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

      commit 5644ca2commit 681c637commit ebb568bcommit 22ab0b3commit 6271d77commit 1ac83f4commit cd002c1commit 4ee5d50commit f56f31acommit 30e89c1、@9876543332 @、commit b0a5a12commit 72064eecommit fa0bde4commit d61633acommit d7dc1e1commit 031ba55(2020 年 3 月 27 日)Elijah Newren (newren)
      (由Junio C Hamano -- gitster -- 合并到@9876543425 @,2020 年 4 月 29 日)

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

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

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

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

      这不再是:

      Cannot update sparse checkout
      

      但是:

      The following paths are not up to date
      

      【讨论】:

        猜你喜欢
        • 2020-11-23
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 2016-05-07
        • 2017-12-09
        • 2023-03-24
        相关资源
        最近更新 更多