Git - фатально: неможливо створити '/path/my_project/.git/index.lock': файл існує


803

Я все ще отримую це повідомлення про помилку, коли я намагаюся перемістити своє дерево проекту на git repo.

Я перевірив дозволи цього мого каталогу за допомогою цього проекту, і вони встановлені на 777. У терміналі в каталозі з my_projectя встановив:

git init

і тоді, якщо я спробую

git add.

або

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
У мене виникло це питання, тому що я ввійшов із су в інший термінал, повернувшись до першого, все пішло нормально
maazza


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

Я отримав це виправити шляхом зміни дозволів на .git файлу на stackoverflow.com/questions/14127255 / ... см відповіді від Mahshid Zeinaly
vikramvi

Відповіді:


1736

Спробуйте

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, який би не існував.
Апі

3
У дозволі відхилено означає, що вам потрібно надати користувачеві, який використовує Git, з дозволом для читання / запису у файлі. Перевірте команду chmod (на * nix або Властивості -> вкладка Безпеки у WIndows)
Stijn de Witt

9
Якщо ваша помилка говорить "Відхилено дозвіл", ви, ймовірно, скопіювали файли з іншого місця та не маєте дозволів у каталозі .git. Використовуйте ls -lдля перегляду дозволів, потім використовуйте sudo chown -R username ./*та sudo chgrp -R username ./*змінюйте власні користувачі та групи для всіх файлів у проекті.
чех

158

У Windows зробіть це в командному рядку з каталогу repo:

cd .git
del index.lock

ОНОВЛЕННЯ: Я виявив, що мені не потрібно робити цю процедуру, якщо зачекаю хвилину після закриття файлів, над якими я працюю, перш ніж спробувати переключити гілки. Я думаю, що іноді ця проблема виникає через те, що git наздоганяє повільну файлову систему. Інші, більш обізнані в розробниках програми, можуть зазивати, якщо вони вважають це правильним.


3
Як не дивно, я отримую помилку щодо файлу, але тоді, коли я намагаюся видалити файл у cmd.exe, він говорить, що файл не знайдений :) Той самий результат з абсолютними та відносними шляхами. Але в Git Bash це працює (з rm -f index.lock)
Juha Untinen

У моєму випадку я виконав "Вибір" після декількох перезавантажень 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

Командна сенсорна команда створила файл, і проблема усунулася.


Чому це заборонено? Я отримав аналогічне повідомлення про помилку, як OP. Це виправило мене, і, можливо, могло б допомогти іншим.
Джон Лівермор

1
У мене виник незначний варіант цього: (1) я зіткнувся з повідомленням про помилку і експериментував з різними «виправленнями»; (2) Я виявив, що index.lockне існує; (3) я використав вищевказану touchкоманду; (4) мій клієнт git перестав нормально функціонувати (в кращому випадку він сповільнився до повзання); (5) я видалив index.lock; (6) сховище знову почало нормально функціонувати.
clarpaul

Однозначно не слід занижувати, вирішуючи мою проблему. У мене не було файла 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 зробіть це в командному рядку з каталогу repo:

cd .git
rm index.lock

1
Такого файлу чи каталогу немає
Channox,

5

Якщо ви використовуєте одну з #intelliJIDE і отримуєте цей msg (я використовую #webtorm), зауважте, що ця проблема може виникнути через приховування однієї з папок проекту (всередині налаштувань), і це може запобігти GITзлиття.


5

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


Нещодавно я встановив плагін Sublime Text GitSavvy і з цього моменту стався помилка. Дякую за підказку, @snorkelzebra
Kitze

5

Якщо після спробу:

rm -f ./.git/index.lock

Ви отримуєте:

rm: не вдається від’єднати 'index.lock': дозвіл відхилено

Спробуйте закрити все програмне забезпечення, яке може використовувати Git. У мене було відкрито Джерело дерева та Visual Studio і після закриття обидві команди працювали.


5

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

Рішення (Win 10)

1. Закінчіть завдання для всіх процесів Git Windows (32 біт) в диспетчері завдань

2. Видаліть файл .git / index.lock


4

У моєму випадку рішення було чекати 5 хвилин. Очевидно, що моя попередня операція тривала, але я просто не знав цього. Я використовував черепаховий git на windows.



4

Я думаю, що є краще рішення, ніж видалення файлу (і Бог знає, що буде далі при видаленні / створенні файлу з sudo):

git gc

3

У вас є проблема з .git/index.lockвидаленням цього за допомогою команди нижче.

Команда:

sudo rm -rf .git / index.lock


3

Я спробував це з багатьма методами кілька разів, але цей працював на мене (я використовував термінал PyCharm):

$ cd .git/

$ rm -f index.lock

Потім я знову спробував створити порожнє git repo:

$ git init

$ git add .

$ git commit -m "commit msg"

3

Якщо це підмодуль, спробуйте це замість цього у каталозі вашого сховища:

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

змінити ім'я субмодулів на ваше ім'я підмодуля.


2

Вирішенням цієї проблеми є копіювання трьох файлів xcode / project у каталог, а потім створення нового каталогу (Whereever else), а потім вставлення трьох файлів / каталогів.


2

Також ми можемо просто вбити процес git. Я отримую ту саму проблему через додаток GUI для git, щось піде не так і git змушує працювати нескінченно. Процес вбивства заморозить додаток, який працює з git, просто перезавантажте його, і все буде добре.


2

У випадку, якщо з будь-якої причини ви робите перезавантаження з папки, яка синхронізується хмарною службою (Dropbox, диск, onedrive тощо), вам слід призупинити або вимкнути синхронізацію, оскільки це буде заважати дозволам під час відновлення. .



2

Я змінив дозвіл на каталог, тому знав, що це може бути пов'язано з дозволом. У моєму випадку я видалив небажаних (_www) користувачів, а потім застосував дозвіл на читання / запис для всіх, застосувавши змінені до всього вмісту. Це на Mac

Дозвіл каталогів на Mac


2

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


2

Не використовуйте плагін Atom platformio-atom-ide-terminal для цього. ВИКОРИСТОВУЙТЕ ТЕРМІНАЛ ВАШОГО ДИСТРО Прямо.

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

Неважливо, скільки разів я видаляв би index.lockфайл, кожного разу він не виходив з ладу.

Виявилося, це було тому, що я використовував плагін терміналу ATOM EDITOR . Одного разу я використав термінал, який постачається з Ubuntu, він працював як шарм.


2

просто перейдіть до D: /project/androidgc/.git/ цього каталогу та видаліть index.lock це працювало для мене.


1

Якщо хтось використовує git svn, у мене була така ж проблема, але я не міг видалити файл, оскільки його там не було !. Перевіривши дозволи, торкнувшись файлу та видаливши його, і я не пам'ятаю, що ще, це зробило трюк:

  • замовлення головного відділення.
  • git svn rebase (на master)
  • оформити відділення, над яким працювали
  • 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

У мене це було, коли я знаходився в підкаталозі каталогу, що відповідає кореневій папці repo (тобто в каталозі, в якому знаходився .git). Перехід до кореневого каталогу вирішив проблему - ціною зробити всі посилання на файли трохи незручнішими, оскільки вам доведеться йти шлях / до / папки / foo.ext замість просто foo.ext

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.