egit锁失败日食
Posted
技术标签:
【中文标题】egit锁失败日食【英文标题】:egit lock fail eclipse 【发布时间】:2018-09-26 08:04:11 【问题描述】:所以在工作中,我们都共享相同的存储,我们推拉我们的分支和所有好的 git 东西。所以我通常在 Eclipse 中从 egit 进行拉和推(我不是这里大多数人这样做的唯一人)。但是我的一些分支机构已经开始给我[锁定失败]“无法锁定本地跟踪参考以进行更新”。但问题是有 75 多人以同样的方式做这件事,没有人看到这个错误。我做了一些研究,其中大部分都说它是基于名称冲突的,例如 Foo 和 foo。 Egit 会对拉哪一个感到困惑,因为唯一的区别是大写字母,但其他人没有问题。我不知道发生了什么事。任何帮助将不胜感激。
【问题讨论】:
你应该提供一个具体的堆栈跟踪(打开错误日志,双击消息和 c&p) 见bugs.eclipse.org/bugs/show_bug.cgi?id=417860#c3 这就是我尝试拉入 egit 时的全部内容,因此它不会更新错误日志。我不确定在哪里可以找到任何类型的错误消息来提供帮助 "Check if you have any "<refname>.lock" file under .git/refs/"。您使用哪个 EGit 版本?当前版本为4.11(更新站点:http://download.eclipse.org/egit/updates
)。
Git 更新了,eclipse->workspace->.metadata 下有lockfile。但每次我删除它并重新启动 Eclipse 时它都会回来。
【参考方案1】:
我无法获取、推送或变基,并且在 Eclipse 中也出现“锁定失败”错误。
我找到的解决方案是打开 git bash,转到 git 文件夹,然后执行 git fetch
。在此之后,我能够使用 eclipse 进行 rebase 和 push。
你也可以在你的eclipse首选项/团队/git/configuration中检查你没有设置fetch.prune=true
,因为它可能会导致这个问题。
【讨论】:
git fetch 也是对我有用的。好推荐。 Dogit fetch
in git bash 也为我工作。【参考方案2】:
git remote prune origin
帮我解决了。
【讨论】:
谢谢。像魅力一样工作,运行 antergos + eclipse 2019-06。 嗯,这最初是有效的,但接下来的 egit pull 说我领先于 origin/master。来自命令或 eclipse 的 git push 让我与 origin/master 同步,但接下来的 egit pull 又回到了 origin/master 之前 为我工作,谢谢【参考方案3】:我现在在 Eclipse 2019-06 中已经看到过几次了。可能与标签创建有关,因为它似乎最近发生在这些事件之后。无论如何,我认为如果您关闭 Eclipse,并删除 eclipse-workspace/.metadata/.lock 文件(可能还有 eclipse-workspace/.metadata/.log),它会在重新启动时变得更好。
【讨论】:
bugs.eclipse.org/bugs/show_bug.cgi?id=548716 跟踪 2019-06 的问题【参考方案4】:对我而言,问题是我有一堆分支,我曾以 feature/somename
拉取,但当我将其推送到 remote
时,它们显示为 Feature/somename
。一旦我解决了这个f
到F
的问题,事情就开始按预期工作了。
使用 EGIT 进行修剪
另外,如果你想prune
存储库,你应该使用 GIT GC 来实现这一点。 EGIT 有一个名为Collect Garbage
的选项来触发此操作。只需在 EGIT 透视图中右键单击存储库即可查看此选项。
【讨论】:
我将文件夹名称从 F(大写)重命名为 f(小写)以消除“f to F”问题。【参考方案5】:对于我来说,我在标签中遇到了锁失败的问题,所以我做了以下步骤:
-
重置当前分支
删除所有本地标签。
获取
拉。
它解决了问题。
【讨论】:
【参考方案6】:对于其他人:我也有这个错误,那是因为我在 repo 上有 2 个名称相似的分支(“v10”和“V10”)。 我通过“重命名”回购分支“V10”来修复它(即从“V10”创建另一个“V10b”,然后删除“V10”)。
【讨论】:
我听说我们组织的开发人员遇到了这个错误,我相信你描述的这种情况是它的原因。 Windows DOS 文件系统不区分大小写,因此它认为“v10”和“V10”是一回事,但 git 不是。我编写了一个脚本来检测这些情况,使用“uniq -d”。【参考方案7】:我用的是阿拉什的
git remote prune origin
但这给我留下了一种情况,即 egit pull 使我领先于远程/原点。一个 egit 或 git push 重新同步,但接下来的 egit pull 又让我领先了。为了解决这个问题,我尝试了各种方法,包括重置回购,但无济于事。这可能类似于从新工作区开始,但在我的情况下,这不是一个选项。以下似乎有效:
-
确保您已将所有更改推送到远程存储库。
在 Project Explorer 视图中,从相关存储库中删除所有已导入 eclipse 的项目。不要删除文件系统中的文件(弹出的对话框中的复选框)。
在 Repositories 视图中,右键单击 repository 并 Remove Repository From
查看
在命令行。移动或删除 git repo 的根目录。
返回 Eclipse 并添加存储库(在存储库视图中,粘贴从 github 复制的 URL/ssh 链接)。
通过右键单击 repo 并选择 Import Projects... 将所需项目重新导入 Eclipse...
丑陋但能解决问题。
【讨论】:
【参考方案8】:在eclipse中右键Project
team >remote> 为上游配置提取> 高级> 在“源引用”和“目标引用”中选择您的分支 点击“添加规格” 检查强制更新> Finish >Save and Fetch【讨论】:
【参考方案9】:我在 Windows 中看到过这种情况,因为底层的 DOS 文件系统不区分大小写,尽管 git 不是。当 git 写入一个名为“foo”的文件时,Windows 认为写入文件“Foo”的尝试正在写入同一个文件。我不知道造成“锁定失败”错误的确切机制,但我认为它是这样的。
我编写了一个脚本来检测这种情况。我们的 SCM 是 BitBucket,它有一个 REST api。我在循环中使用“projects/repos/branches”端点从存储库中获取所有分支,执行以下伪代码:
echo $list | tr '[:upper:]' '[:lower:]' | sort | uniq -d
结果是一个分支名称列表,转换为小写,有两个或多个版本,因大小写而异。
【讨论】:
【参考方案10】:很简单。
1 - 关闭 Eclipse IDE;
2 - 进入项目目录;
3 - 类型:git pull
;
4 - 类型:git gc
;
5 - 重新打开 Eclipse IDE;
6 - 拉取项目;
总是为我工作!
【讨论】:
以上是关于egit锁失败日食的主要内容,如果未能解决你的问题,请参考以下文章