Git - fatal: невозможно создать '/path/my_project/.git/index.lock': файл существует


806

Я все еще получаю это сообщение об ошибке, когда пытаюсь переместить дерево моего проекта в git repo.

Я проверил разрешения моего каталога с этим проектом, и они установлены на 777. В терминале в каталоге с my_projectя установил:

мерзавец

а потом если я попробую

мерзавец добавить.

или

git commit -m "первая загрузка"

так что я получу ошибку

fatal: Unable to create '/path/my_proj/.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.

Я попытался также создать новый репо и там, чтобы зафиксировать его, но, к сожалению, все еще то же сообщение об ошибке.

В чем причина проблемы?


1
У меня была эта проблема, потому что я вошел в систему с su в другом терминале, переключившись обратно на первый, все прошло нормально
maazza


3
братан, у меня была та же проблема, используйте "sudo git add. или git commit -m" first upload "" вместо "git add. или git commit -m" first upload ""
mehdi zahrane

Я исправил это, изменив права доступа к файлу .git для stackoverflow.com/questions/14127255/… , см. Ответ Махшида Зейналы
vikramvi

Ответы:


1741

Пытаться

rm -f ./.git/index.lock

В вашем каталоге хранилища. Сообщение об ошибке довольно явно указывает на то, что обычно вызывает его, поэтому, если у вас не запущены другие процессы git (что является нормальным случаем), удалите этот файл.


7
Это не происходит автоматически. Вам нужно выполнить команду, git pushчтобы отправить ваши изменения на веб-сервер. Подробности о том, как это работает, можно найти здесь: gitready.com/beginner/2009/01/21/pushing-and-pulling.html
Рафаэль Р.

9
У меня точно такая же проблема, но я не могу решить ее таким образом, потому что файл .git / index.lock, по-видимому, не существует: touch .get/index.lockвозвращаетtouch: .get/index.lock: No such file or directory
emersonthis

24
Эмерсон, ты, похоже, ищешь .get вместо .git, которого бы не было.
Apie

3
Permission denied означает, что вам нужно дать пользователю, который вы используете Git, права на чтение / запись для файла. Проверьте команду chmod (в * nix или Свойства -> вкладка Безопасность в Windows)
Stijn de Witt

9
Если ваша ошибка говорит «Отказано в доступе», вы, вероятно, скопировали файлы откуда-то еще, и у вас нет прав доступа к каталогу .git. Используйте ls -lдля просмотра разрешений, затем используйте sudo chown -R username ./*и sudo chgrp -R username ./*для изменения пользователя и группы на свои для всех файлов в проекте.
Chech

158

В Windows сделайте это в командной строке из каталога репо:

cd .git
del index.lock

ОБНОВЛЕНИЕ: я обнаружил, что мне не нужно делать эту процедуру, если я подожду некоторое время после закрытия файлов, над которыми я работаю, прежде чем попытаться переключить ветки. Я думаю, что иногда эта проблема возникает из-за того, что git догоняет медленную файловую систему. Другие, более осведомленные в git разработчики могут вмешаться, если они думают, что это правильно.


3
Как ни странно, я получаю сообщение об ошибке файла, но затем, когда я пытаюсь удалить файл в cmd.exe, он говорит, что файл не найден :) Тот же результат с абсолютными и относительными путями. Но в Git Bash это работает (с rm -f index.lock)
Юха Унтинен

В моем случае я выполнил «Fetch» ​​после нескольких перезапусков Sourcetree и работал.
Maxivis

32

Попробуйте выйти из Xcode - поскольку это git-клиент, вы должны выйти из XCode, чтобы избежать проблем с git в командной строке.


4
Ницца! Обратите внимание, что Xcode И другие клиенты Git могут быть виновниками. В моем случае это заняло и закрытие gitX.
NSTJ

После того, как мне нужно было удалить файл блокировки 10 раз или около того, сегодня утром я наконец наткнулся на этот ответ. Не знаю, как открылся xcode, но он наверняка разрушил мой рабочий процесс. Спасибо за совет!
Cloudkiller

24

У меня была такая же проблема. Я старался

rm -f ./.git/index.lock 

и консоль выдала мне сообщение об ошибке. Затем я попробовал

rm --force ./.git/index.lock

и это сработало.

Удачи! Это работает супер


Я не вижу папку .git в моем случае. Я вижу только ./ и ../, что касается скрытого каталога.

На каком компьютере вы работаете?
Оливия

18

В моем каталоге .git не было файла index.lock. Итак, используя оболочку Git Bash, я запустил ...

cd .git
touch index.lock
rm index.lock

Команда touch создала файл, и проблема исчезла.


Почему это понижено? Я получил сообщение об ошибке, подобное OP. Это исправило меня и, возможно, могло бы помочь другим.
Джон Ливермор,

1
Я испытал небольшой вариант этого: (1) я получил сообщение об ошибке и экспериментировал с различными «исправлениями»; (2) я обнаружил, что index.lockне существует; (3) я использовал вышеуказанную touchкоманду; (4) мой клиент git перестал работать нормально (в лучшем случае он замедлился до ползания); (5) я удалил index.lock; (6) хранилище снова заработало нормально.
кларпол

Определенно не должно быть понижено, разобрался в моей проблеме. У меня не было файла index.lock, но как только я его создал и впоследствии удалил, коммит сработал.
Bynho

touch index.lockподразумевает, что Джон был в * NIX, но я только что сделал эквивалент в Windows 10 (создайте index.lockфайл с текстовым редактором, немедленно удалите его и получите прибыль), и проблема исчезла.
ruffin

1
@Spark обновлен ...
Джон Ливермор

13

Вы случайно создали хранилище, используя rootпользователя?

Просто так получилось, что я создал git-репозиторий как rootпользователь.

Я удалил репозиторий git и создал его снова без, sudoи он работает.


1
Да, вот и все. Спасибо
Наташа Таварес

9

У меня тоже есть эта проблема, и я считаю, что это действительно проблема с разрешениями. так что я делаю это:

sudo chown -R : .git #change group
sudo chmod -R 775 .git #change permission

тогда все хорошо, а гаа это успех.

а затем я использую gp, я получаю еще одну ошибку, почти такую ​​же

sudo chown -R "${USER:-$(id -un)}" . #use this can fix the problem

блестящий, что это делает? "$ {USER: - $ (id -un)}"
Ник

7

В Mac OS X сделайте это в командной строке из каталога репозитория:

cd .git
rm index.lock

1
Нет такого файла или каталога
Channox

5

Если вы используете одну из #intelliJIDE и получаете это сообщение (я использую #webtorm), пожалуйста, обратите внимание, что эта проблема может возникнуть из-за скрытия одной из папок проекта (внутри настроек), и это может предотвратить GITслияние.


5

Решение, которое работало для меня, заключалось в закрытии возвышенного текста, потому что редактор запускал запущенный процесс git.


Я недавно установил плагин Sublime Text GitSavvy, и с тех пор у меня была эта ошибка. Спасибо за подсказку, @snorkelzebra
Китц

5

Если после того, как вы попробуете:

rm -f ./.git/index.lock

ты получаешь:

rm: не может отсоединить index.lock: в доступе отказано

Попробуйте закрыть все программы, которые могут использовать Git. У меня были открыты Source Tree и Visual Studio, и после закрытия обе команды работали.


5

В Windows мне удалось удалить только файл блокировки после завершения задачи для всех процессов в Git Windows (32-разрядных) в диспетчере задач.

Решение (Win 10)

1. Завершите задачу для всех процессов Git Windows (32bit) в диспетчере задач.

2. Удалите файл .git / index.lock


4

В моем случае решение было ждать 5 минут. Очевидно, моя предыдущая операция еще продолжалась, но я просто не знал об этом. Я использовал Git черепахи на окнах.



4

Я думаю, что есть лучшее решение, чем удаление файла (и бог знает, что будет дальше при удалении / создании файла с помощью sudo):

git gc

3

У вас проблема с этим, .git/index.lockпоэтому удалите его, используя команду ниже.

Команда:

sudo rm -rf .git / index.lock


3

Я пробовал это несколькими способами несколько раз, но этот работал для меня (я использовал терминал PyCharm):

$ cd .git/

$ rm -f index.lock

Затем я снова попытался создать пустой репозиторий:

$ git init

$ git add .

$ git commit -m "commit msg"

3

Если это подмодуль, попробуйте это вместо этого в вашем каталоге репозитория:

rm -f ../.git/modules/submodule-name/index.lock

измените имя подмодуля на имя вашего подмодуля.


2

Решением этой проблемы является копирование трех файлов xcode / project в каталог, а затем создание нового каталога (в любом другом месте), а затем вставка трех файлов / каталогов.


2

Также мы можем просто убить git process. Я получаю ту же проблему через приложение GUI для git, что-то идет не так, и git заставляет работать бесконечно. Процесс Killing остановит приложение, которое работает с git, просто перезапустите его, и все будет хорошо.


2

В случае, если по какой-либо причине вы выполняете перебазирование из папки, которая синхронизируется облачной службой (Dropbox, Drive, Onedrive и т. Д.), Вы должны приостановить или отключить синхронизацию, так как это повлияет на разрешения во время перебазирования. ,



2

Я изменил свое разрешение на каталог, так что я знал, что это может быть связано с разрешением. В моем случае я удалил нежелательных (_www) пользователей, а затем применил разрешение на чтение / запись для всех, применяя изменения ко всему содержимому. Это на маке

Разрешение каталога на Mac


2

Все команды удаления не сработали, и я перешел туда, используя путь, указанный в git, а затем удалил его вручную.


2

НЕ ИСПОЛЬЗУЙТЕ атом platformio-atom-ide-terminal плагин для этого. ИСПОЛЬЗУЙТЕ ТЕРМИНАЛ ВАШЕГО DISTRO ПРЯМО.

Я продолжал получать эту ошибку во время перебазирования / сжатия, и не знал почему, потому что я делал это раньше несколько раз.

Не имеет значения, сколько раз я удаляю index.lock файл, каждый раз, когда он терпит неудачу.

Оказывается, это потому, что я использовал плагин терминала ATOM EDITOR . Как только я использовал терминал, который поставляется с Ubuntu, он работал как шарм.


2

просто перейдите в D: /project/androidgc/.git/ этот каталог и удалите index.lock, это сработало для меня.


1

В случае, если кто-то использует git svn, у меня возникла та же проблема, но я не смог удалить файл, так как его там не было !. После проверки прав доступа, касания файла и его удаления, и я не помню, что еще, это помогло:

  • Оформить заказ мастер ветки.
  • git svn rebase (на мастере)
  • Оформите ветку, над которой вы работали
  • git svn rebase

1

Небольшое добавление, потому что мне пришлось использовать разные ответы, чтобы получить реальное решение (для меня).

Это сделало это для меня:

  1. Открытая ветка, над которой вы работаете
  2. Открытый терминал (я использую терминал в Git GUI)
  3. Введите в команду: cd .git
  4. Введите в команду: rm -f index.lock

Некоторые могут использовать -Forceвместо -f. Вы можете проверить командные строки вашего терминала, выполнив команду в вашем терминале что - то вроде: git help.


0

Все решения верны:

Just remove .git from your corrupted repository, 

then copy this file if back from another clone (if you don't have it in another machine, just clone it).

Наконец, что изменило меня:

  • Избегайте использования sudo для распаковки или копирования новой папки .git. Git не будет иметь доступа к папке .git, если вы используете права суперпользователя для ее создания

0

Это происходило, когда я находился в подкаталоге каталога, соответствующего корневой папке репозитория (то есть в каталоге, в котором был .git). Переход к корневому каталогу решил проблему - за счет того, что все ссылки на файлы стали немного более неудобными, так как вместо foo.ext вам нужно идти по пути / to / folder / foo.ext

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.