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.

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

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

user984621
источник
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 разработчики могут вмешаться, если они думают, что это правильно.

ssaltman
источник
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и он работает.

hktang
источник
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слияние.

neoswf
источник
5

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

snorkelzebra
источник
Я недавно установил плагин 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

ChrisDeDavidMindflowAU
источник
4

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

rdans
источник
4

Использовать этот:

rm -Force ./.git/index.lock
Маной Таркар
источник
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

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

Kharda
источник
2

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

G unitzo
источник
2

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

kaspartus
источник
2

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

Dmase05
источник
2

Для меня это было

rm -r .git-credentials.lock 
N Jay
источник
2

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

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

Хаммад хан
источник
2

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

Аарон Рабинович
источник
2

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

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

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

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

juliangonzalez
источник
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, если вы используете права суперпользователя для ее создания
Javi
источник
0

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

SN
источник