【问题标题】:Git - " cannot lock ref is at " on git PullGit - git Pull 上的“无法锁定 ref 位于”
【发布时间】:2020-10-19 16:55:57
【问题描述】:

当我在 intellij 的终端上执行 git pull 时,我看到以下错误。 该项目由几个开发人员不断更新,我确定有些东西不同步,但无法弄清楚那是什么。

error: cannot lock ref 'refs/remotes/origin/feature/SOMETHING-1234': is at e131d16d4b4b8c32e3d16d28559baf2e4d18b012 but expected 090916d9bee669944a2ea55703f25a4ebee7d51a
 ! 090916d9b..e131d16d4  feature/SOMETHING-1234 -> origin/feature/SOMETHING-1234  (unable to update local ref)

这可能是什么问题?我该如何解决 ? 上面的功能分支是由另一个开发者创建的,我不想删除它。

【问题讨论】:

  • Torek 的回答听起来更有说服力,所以我不同意。感谢您指出重复的内容。
  • git remote prune origin (正如链接的重复主要解决方案所暗示的那样)对我有用。

标签: git


【解决方案1】:

注意:这个重复的,但是另一个问题没有被接受的答案,所以我在这里发布一个。出现问题是因为有人创建了一个分支(在上面的示例中为feature/SOMETHING-1234),该分支仅在情况与您的 Git 已经选择的名称不同。例如,您可能拥有feature/something-1234FEATURE/SOMETHING-1234,而他们现在拥有feature/SOMETHING-1234

Git 认为仅大小写不同的名称,例如 aA,是不同的名称。这在某些时候可以正常工作。它在某些操作系统上会失败1有时。当它失败时——就像你的情况一样——你会出现像你现在看到的那种奇怪的症状。

在这种情况下,可能治愈它的一种方法是删除(本地)文件.git/refs/remotes/origin/feature/something-1234——你可以用全小写的形式输入它,不管任何部分有大写-案子;见脚注 1——就在你运行 git fetch 之前。您的 Git 将使用另一个 Git 提供的案例重新创建它。但是请注意,问题很可能会再次出现,甚至可能立即出现,特别是如果另一个 Git 是 可以 存储 both 名称的 Git(例如,feature/something-1234feature/SOMETHING-1234) 在任何时候。

为了更持久地解决问题,有必要删除 other Git 中的重复的例外情况名称。也就是说,如果 GitHub Git 有名为 feature/SOMETHING-1234feature/something-1234 的分支,您和您的同事必须聚在一起,就保留这两个名称中的哪个名称以及删除哪个名称达成一致。然后你可以而且应该删除“错误”的,并确保永远不要重新创建它。

(我认为,Git 中正在进行的工作将为每个人解决这个问题,但它尚未发布。)


1从技术上讲,这是目前文件系统特定问题,而不是操作系统特定问题。但是,它通常发生在 Windows 和 MacOS 文件系统上,这些文件系统设置为保留大小写但折叠大小写。也就是说,如果您创建了一个名为ReadMe 的文件,然后要求系统打开一个名为readmeREADME 的文件,它会打开现有的ReadMe 文件。

其他文件系统(包括 Linux 主机上常用的文件系统,例如运行 GitHub 的文件系统)将 readmeReadMeREADME 视为三个不同的文件。因此,这些系统可以并且将同时存储所有三个文件。 Windows 和 MacOS 上的折叠文件系统实际上不能存储三个这样的文件。

Git 当前使用混合方案,其中 refsreferences(分支、标记和其他名称)存储在两个位置之一或两个位置:一个简单的纯文本表文件,它在一行上包含每个引用及其哈希 ID,或者每个文件一个哈希 ID,文件的 name 与引用名称匹配。当 refs 只是大小写不同时,每个文件的存储机制只能在可以存储两个名称的文件系统上正常工作。不过,即使在通常的 Windows 和 MacOS 文件系统上,one-big-file 机制也能正常工作,因为所有条目都位于名为 .git/packed-refs 的文件中。

请注意,如果引用同时出现在.git/packed-refs 单个文件中,则单个文件版本会覆盖.git/packed-refs 版本。

【讨论】:

    猜你喜欢
    • 2018-06-19
    • 2020-01-16
    • 2022-12-01
    • 2016-12-27
    • 2010-11-12
    • 1970-01-01
    • 2017-03-09
    • 2015-01-02
    • 2014-11-21
    相关资源
    最近更新 更多