当我做'git commit'时,我得到以下内容:

无法创建“project_path/.git/index”。lock `:文件已存在。

然而,当我执行ls project_path/.git/index。锁定,表示文件不存在。你觉得我该怎么做?我还注意到project_path/。git由root拥有,不确定这是否与我遇到的问题有关。

Git版本为1.7.5.4

编辑:看起来问题很可能是我正在运行的另一个进程,那就是向项目目录写入(我不知道)。我重新启动了我的电脑,然后我就没有问题了。


当前回答

今天遇到了这个问题,SourceTree生成了几个git进程,即使在关闭SourceTree后,这些git进程仍在运行。以下是我的解决方法。

按Ctrl-Alt-Esc或在windows start中输入“任务管理器”启动任务管理器。 寻找所有名为“git”,“git-lfs”的进程,如下面的截图所示。右键单击并选择“End process”以杀死每个进程。 删除.git/index。锁文件。

其他回答

从git 2.8.4(2016年6月)开始,这种情况不应该再发生了。

参见问题755,这也应该缓解这个问题(commit 2db0641):

确保临时文件句柄没有被子进程继承 防止子进程继承index.lock的句柄。

在我的例子中,只需转到project_path/。Git并删除索引。锁文件。试着推动你的代码,它会工作的。

在我的案例中,没有索引。锁定要删除的文件。我试图在用pretty格式化后提交109个文件。提交更少的文件最终“解决”了这个问题。

如果使用备用的命令行git客户端,比如hub,也会发生这种情况。

几年来,我一直在使用hub作为git的别名替代品,但最近写了一个bash脚本,在其中执行了大量git工作,并开始出现索引锁问题。

直到我想起来我运行的是hub而不是git,我才找到解决方案。我把它去掉了,问题就解决了!

del . \指数。洛克为我工作。

当我从主分支签出一个新分支时,我遇到了这个问题。

删除索引后很容易发生签出。锁文件。