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

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

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

Git版本为1.7.5.4

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


当前回答

我在Windows上的TortoiseGit和Cygwin有这个问题。我不能删除。/.git/index。我尝试了Cygwin和命令提示符,它说该文件正在被另一个进程使用。

我发现我有两个TortoiseProc.exe实例正在运行。我杀死了其中一个,并关闭了我所有的windows资源管理器窗口,然后能够删除文件。我不知道杀死一个TortoiseProc.exe实例是解决方案还是关闭windows资源管理器窗口。

其他回答

Windows:

从以管理员身份打开的powershell控制台尝试

> rm -Force ./.git/index.lock

如果这不起作用,您必须杀死所有git.exe进程

> taskkill /F /IM git.exe PID为20448的进程“git.exe”已被终止。 PID为11312的进程“git.exe”已被终止。 PID为23868的进程“git.exe”已被终止。 PID为27496的进程“git.exe”已被终止。 PID为33480的进程“git.exe”已被终止。 PID为28036的进程“git.exe”已被终止。 > rm -Force ./.git/index.lock

在我的例子中,我随机得到a

fatal: Не удалось создать «/home/mingun/project/.git/index.lock»: Файл существует.

Похоже, что другой процесс git запущен в этом репозитории,
например редактор открыт из «git commit». Пожалуйста, убедитесь,
что все процессы были завершены и потом попробуйте снова.
Если это не поможет, то возможно процесс git был ранее завершен
с ошибкой в этом репозитории: 
удалите файл вручную для продолжени

消息,当我做一个rebase,我很确定没有其他git进程。至少一个没有看到他们中的任何一个,当我检查他们刚刚失败的rebase命令。当然,每次我都立即检查并看到/home/mingun/project/.git/index. .锁文件不存在。

通常情况下,当我每次尝试进行重基时,都会遇到这个错误,在几次重基提交后,进程会失败。更糟糕的是,在大多数情况下不可能继续rebase:

$ git status
интерактивное перемещение в процессе; над e55e03330e3
Last commands done (21 commands done):
   pick 1a39bd4740d <skipped>
   pick f1906baf94b <skipped>
  (смотрите дополнительно в файле .git/rebase-merge/done)
Next commands to do (13 remaining commands):
   pick 98db21878ed <skipped>
   pick 30488ef5a5a <skipped>
  (используйте «git rebase --edit-todo», чтобы просмотреть или изменить их)
Вы сейчас перемещаете ветку «master» над «e55e03330e3».
  (все конфликты разрешены: запустите «git rebase --continue»)

Изменения, которые будут включены в коммит:
    новый файл:    <skipped>
    изменено:      <skipped>

$ git rebase --continue
fatal: не удалось прочитать файл журнала «.git/rebase-merge/message»: Нет такого файла или каталога
error: не удалось закоммитить проиндексированные изменения.
$

有时,如果我在两次尝试之间等待几秒钟,git rebase(实际上是git svn rebase)命令会成功完成。但通常你必须等待并尝试10次或更多。重构todo的时间越长,它以错误结束的可能性就越大。

当我试图用英文消息重现这个错误,并在错误跟踪器中发布结果时,我惊讶地发现,使用LANG=C总是能解决问题!我认为这是一场意外非常可疑。

我认为这是一个git错误的另一个原因是这些错误最近才开始发生(可能是一年前),尽管我的git工作模式已经有一段时间没有改变了。

所以,如果你遇到了和我一样的问题,试着在你的命令前加上LANG=C:

$ LANG=C git svn rebase

有时,当安装了多个Git客户端时,另一个Git客户端可能会干扰。

Ie。通过任务管理器或Get-Process确保TortoiseGit中的TGitCache在后台不活跃。

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

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

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

除非你真的打算让根用户拥有你的repo,否则这听起来像是你意外地以根用户身份运行了Git命令(甚至可能是初始的clone/init)。如果您打算这样做,那么您将不得不以根用户身份在repo中运行所有Git命令。如果没有,运行sudo chown your-user[:your-group] -R .git来获得它的所有权,然后看看事情是否正常。