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

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

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

Git版本为1.7.5.4

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


当前回答

有时Git会在你做任何更改或者使用子模块时创建一个与你的repo相关的锁文件。 错误消息将显示锁定文件的路径。 修复:只需手动进入路径在终端和删除锁定文件 $ rm index.lock

这应该会有所帮助。

其他回答

我有这个完全相同的错误,但问题不是锁文件。相反,问题是我将另一个git repo的内容复制到这个repo中,包括.git不可见文件夹。因此,SourceTree对我想要stage文件的repo感到困惑(在SourceTree认为我在的repo和我嵌入的.git目录中的内容说我应该在的repo之间存在不匹配)。

在我的例子中,我随机得到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

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

我没有inex。锁文件删除,但对我有用的是从文件夹属性对话框的属性窗口中删除只读检查。

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