当我在 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)
Run Code Online (Sandbox Code Playgroud)
这里可能是什么问题?我该如何解决 ?上面的功能分支是由另一个开发人员创建的,我不想删除它。
tor*_*rek 13
注意:这是重复的,但另一个问题没有被接受的答案,所以我在这里发布一个。出现问题是因为有人创建了一个分支(feature/SOMETHING-1234在上面的示例中),该分支仅在与您的 Git 已经选择的名称的情况下不同。例如,您可能有feature/something-1234或FEATURE/SOMETHING-1234,而他们现在有feature/SOMETHING-1234。
Git 认为只有大小写不同的名称,例如avs A,是不同的名称。这在某些时候可以正常工作。它未能对某些操作系统1 一些时间。当它失败时——就像你的情况一样——你会出现奇怪的症状,就像你现在看到的那样。
在这种情况下,一种可能的解决方法是删除(本地)文件.git/refs/remotes/origin/feature/something-1234——您可以全小写输入它,而不管任何部分是大写的;请参阅脚注 1 — 就在您运行之前git fetch。您的 Git 将使用另一个 Git 提供的案例重新创建它。但是请注意,这个问题很可能回来,甚至马上,特别是如果其他Git是一个能存储两个名称(例如,二者feature/something-1234 并 feature/SOMETHING-1234在任何时候)。
为了更永久地解决这个问题,需要在另一个Git 中删除重复的例外情况名称。也就是说,如果 GitHub Git 的分支同时命名为和,则您和您的同事必须聚在一起商定保留这两个名称中的哪个名称以及删除哪个名称。然后你可以而且应该删除“错误”的,并确保永远不要重新创建它。feature/SOMETHING-1234feature/something-1234
(我认为,Git 正在进行的工作将为每个人解决这个问题,但尚未发布。)
1从技术上讲,这是当今文件系统特定的问题,而不是操作系统特定的问题。但是,它通常发生在 Windows 和 MacOS 文件系统上,这些系统设置为保留大小写但折叠大小写。也就是说,如果您创建一个名为 的文件ReadMe,则要求系统打开名为readme或的文件README,它会打开现有ReadMe文件。
其他文件系统,包括在Linux主机上使用的常用的,例如那些运行GitHub的性治疗readme,ReadMe以及README为三个不同的文件。因此,这些系统可以并且将同时存储所有三个文件。Windows 和 MacOS 上的 case-folding 文件系统实际上无法存储三个这样的文件。
Git 目前使用一种混合方案,其中refs或引用(分支、标签和其他名称)存储在两个位置中的一个或两个位置:一个简单的纯文本表文件,在一行中包含每个引用及其哈希 ID ,或者,每个文件一个哈希 ID,文件名与引用名匹配。当 refs 仅在大小写不同时,每个文件的存储机制只能在可以存储两个名称的文件系统上正确工作。即使在通常的 Windows 和 MacOS 文件系统上,一个大文件机制也能正常工作,因为所有条目都在名为.git/packed-refs.
请注意,如果 ref 出现在单个文件.git/packed-refs 和单个文件中,则单个文件版本会覆盖该.git/packed-refs版本。
| 归档时间: |
|
| 查看次数: |
4837 次 |
| 最近记录: |