GIT: /.git/index.lock': 文件已存在

19

我一直有一个问题困扰着我的git仓库。我不断收到以下错误提示:

    fatal: Unable to create 'v:/path/to/files/.git/index.lock': File exists.

    If no other git process is currently running, this probably means a
    git process crashed in this repository earlier. Make sure no other git
    process is running and remove the file manually to continue.

我尝试过:rm -f ./.git/index.lock,这是另一个stackoverflow主题中的建议,但每次都会出现以下错误:rm: cannot unlink `./.git/index.lock': Permission denied

当我关闭aptana(我在终端中使用git)时,仍然无法删除该文件。

有什么办法可以解决这个问题吗?

还需要注意的一件事是,在偶尔成功提交时,这个git存储库非常缓慢(每10次尝试左右才允许我提交)。

谢谢


对我来说它有效。 - Shailesh
你是否拥有系统的root或超级用户访问权限?换句话说,你是否拥有这台电脑的所有权,还是在公共场所使用计算机,比如校园实验室? - Code-Apprentice
这些命令适用于Unix和OSX系统。您可以在资源管理器中转到index.lock文件并将其删除。如果您看不到.git文件夹,则需要首先在文件夹管理器中设置显示隐藏文件。 - Jinxi
尝试使用"rm .git/index.lock"或参考此链接https://robots.thoughtbot.com/how-to-fix-rm-f-git-index - Ajay Sharma
7个回答

33

执行命令时使用sudo:

sudo rm -f ./.git/index.lock
两个错误都表明index.lock文件被另一个用户占用。以超级用户身份运行rm,然后重新尝试您的命令。如果实际上是这种情况,请考虑将core.sharedRepository设置为true

core.sharedRepository

当设置为group(或true)时,使得该仓库可在组内的多个用户之间分享(确保所有文件和对象都是可写的)。

当设置为all(或world或everybody)时,除了具有组共享功能外,仓库还将对所有用户可读取。当设置为umask(或false)时,git将使用umask(2)报告的权限。当设置为0xxx时,其中0xxx是八进制数,仓库中的文件将具有此模式值。 0xxx将覆盖用户的umask值(而其他选项只会覆盖用户umask值的请求部分)。例如:0660将使该仓库对所有者和组可读/写,但对其他人不可访问(相当于group,除非umask为0022等)。0640是一个可由组读取但不可由组写入的仓库。

请参见git-init(1)。

默认为False。


谢谢,我尝试了sudo,但是出现了这个错误:sh: sudo: command not found。而且我不知道如何以超级用户身份登录,因为我刚开始使用git。 - sluggerdog
我仍然在处理这个巨大的问题,每天尝试时都会出现index.lock错误。我仍然收到sh:sudo:command not found的消息,并且无法手动删除文件,总是权限被拒绝。有什么想法吗?谢谢! - sluggerdog
1
@sluggerdog 你使用的是哪个操作系统?另外,你是如何运行git命令的? - Christopher
我使用的是64位Windows 7操作系统。谢谢。 - sluggerdog
这是一个权限问题;具体来说,您正在使用不一致的权限用户运行git命令。我知道如何在POSIX上解决此问题,但恐怕在Windows上无法解决,但这不可能很困难。 - Christopher

4
问题最终是由Aptana引起的,每次我运行它时,当我尝试在git中进行提交时,就会导致此错误。
我停止使用Aptana Studio后,再也没有这个问题了。

我猜可能是因为使用了多个编辑器。对我来说,可能是Visual Studio Code。 - Nikolai Ehrhardt

1

小心处理

rm -f .git/index.lock
git reset

执行 git reset 命令将会删除你所做的任何未提交的更改。

删除 index.lock 文件将意味着 git 将无法跟踪任何本地更改。

恢复 index.lock 的一种替代方法是将你最后一次提交(如果尚未推送)进行 git stash,然后使用 git stash pop 命令将其添加回来。

因此:

rm -f .git/index.lock
git stash
git stash pop

这将创建一个新的 index.lock 而不进行 git reset。

如果您之前已经将一些文件添加到 git 中但没有提交,您需要再次 git add 这些文件。

这有点像是一个 hack。有什么评论吗?


1
如果您正在使用Aptanta Git和其他Git客户端(如TortoiseGit),也会出现此错误。因此,很可能是其他Git软件锁定了您的Git,使其对Aptana不可用。

1

做这个:

rm index.lock

然后是

git reset


2
如果操作者无法删除文件,那么rm又如何帮助呢?如果您只是建议操作者不要使用-f标志,请解释一下为什么您认为这是解决方案。 - Erick G. Hagstrom
谢谢,我也卡在同样的问题上好几分钟了,这些简单的命令确实帮了我。 - André Luís Oliveira

0
在 Git 版本 2.11.0 中,.git 文件夹可能不包括 index.lock 文件。我发现在 .git/refs/heads/ 文件夹中包含一个 .lock 文件,使用 rm 命令删除它即可解决问题。
此外,请确保杀死可能正在使用 Git 存储库的进程,使用命令 ps -aef | grep gitkill -9

0

这可能是一个旧的回复,但我希望对需要这个解决方案的人更有用。

在Linux/Unix/GitBash/Cygwin上,请尝试:

rm -f .git/index.lock

在 Windows 命令提示符中,请尝试:

del .git\index.lock

希望这能有所帮助,我在这里找到了解决方案:fatal: Unable to create 'project_path/.git/index.lock': File exists.


由于文件的所有者不是你,所以rm命令无法生效,除非你使用sudo命令。 "我已经尝试过:根据stackoverflow上的另一个线程,执行rm -f ./.git/index.lock,但每次都会出现以下错误:rm: 无法删除'./.git/index.lock':权限被拒绝"。 - ʰᵈˑ
只有当项目属于其他用户时,才需要使用sudo。否则,它不是必需的部分。 - krishnaisdinesh
它归某人所有,专门被 Aptana 使用。 - ʰᵈˑ
当项目具有777权限时,无论是使用aptana还是任何其他IDE都没有关系。 - krishnaisdinesh
它在哪里说 OP 权限是777?你的答案对 OP 没有真正的帮助;它只是重申了他们尝试过的内容。 - ʰᵈˑ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接