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 也是对我有用的。好推荐。 Do git 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。一旦我解决了这个fF 的问题,事情就开始按预期工作了。


使用 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锁失败日食的主要内容,如果未能解决你的问题,请参考以下文章

历史中的日食搜索

我为什么无法下载日食?

Eclipse错误处理文件(commencingResolution失败)

求助,手机上锁失败怎么办

尝试获取 QSemaphore 时互斥锁解锁失败

简单的定制互斥锁失败