Попередження Git Checkout: неможливо від’єднати файли, у дозволі відмовлено


109

Мені відомо, що щодо git є подібні проблеми, пов’язані з попередженням "не вдається від’єднати", але я не зміг їх використовувати.

Основна відмінність полягає в тому, що це сталося тоді, коли я жодним чином не займався субмодулями (я ніколи раніше не займався ними). Я створив гілку під назвою «оновлення», видалив старі рамкові файли та скопіював у нові. Я використовував git add -A, а потім все робив. Коли я намагався перевірити відділення магістралі, він відповів на такі помилки:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

... тощо. Їх сотні.

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

Редагувати: Як було запропоновано у відповіді нижче, я намагався зробити те саме, але з усім іншим закритим. У мене не було більше удачі, ніж раніше.

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



9
Я вирішив це простимsudo chown -R username directory
Стівен Корвін

Відповіді:


84

Я зазвичай бачу таку помилку, коли відбувається процес, не випускаючи обробку цих файлів.

Переконайтеся, що нічого не працює, а потім повторіть спробу оформлення замовлення.

Примітка: це також може бути пов’язано із способом встановлення Git (у Windows, UAC може створити проблему, якщо msysgit встановлений у, C:\Programабо C:\Program Files, див. " Msysgit - sh.exe - fork: Дозвіл відхилено - Vista 64 біт " та коментар 2 із випуск 437 )

Примітка. Як показано нижче , поширеною іншою причиною проблеми є проблема з правами на каталог (неправильний власник), не обов'язково на файл, який неможливо від’єднати.


1
Я на Ubuntu, щоб очистити це. На жаль, я перебуваю лише в цьому веб-браузері та на своїй консолі, яка має одну вкладку, відкриту для відповідного каталогу (а дві відкриті зовсім інше).
Парагон

3
@Paragon: навіть у unix ви можете мати проблеми з обробкою. В іншому випадку це має бути певний дозвіл. Ви повинні мати можливість змусити оформити замовлення. git checkout -f master
VonC

2
+1, у моєму випадку папка з загальним вікном, що забороняла відкидати файли в git в хост-системі. Покинь мені горіхи, тож дякую за підказку!
Джок

1
Те саме питання. Запуск Провідника процесів> Ctrl + F> <ім'я файлу> - відобразиться процес, який підтримує відкриття цього файлу.
setevoy

1
GitExtensions відображала цю помилку при спробі отримати все ... У мене також було відкрито GitKraken. Як тільки я закрив GitKraken, виборка працювала без помилок.
мкай

99

Під час моєї першої зустрічі з цією помилкою мій користувач мав права "писати" у файл, але не у каталог, що містить його. Перевірте дозволи довідника, що містить файл.


95
О мій, занадто смішний, я просто сьогодні натрапив на цю відповідь і тоді зрозумів, що це моя власна! Тим не менш, це спрацювало знову!
Ілля Лінн

Гаразд, це трапляється зі мною на Windows 10, я переходжу до основної папки проекту. і додайте ДЛЯ ВСІХ МОЖЛИВИХ КОРИСТУВАЧІВ, усі дозволи. Так що для системи, адміністратора, користувачів, всі можливості. Застосовуйте шматки. І це, здається, працює, якось, можливо, з оновленням Windows 10, навіть якщо ми не створюємо нового користувача, ми ставимося до них, як новий, без дозволів. Наприклад, у мене є якесь іменне ім'я S-1-15-32 ..... Не ім'я для входу, яке я маю, коли ми розблокуємо наш ноутбук.
Психоделічна

30

"Від’єднати" по суті означає "видалити файл" в цьому випадку.

Ця помилка не викликана самим git. У вас повинні виникнути подібні помилки при видаленні цих файлів вручну, в командному рядку або провідника файлів.


18
Під час моєї першої зустрічі з цією помилкою мій користувач мав права "писати" у файл, але каталог, який містить, не мав.
Ілля Лінн

3
@Elijah: Дякую! Ось що це було для мене.
Джессі Лі

4
У моєму випадку я виявив, що цей файл був заблокований іншою програмою. Закривши програму, визволили файл і дозволили касі продовжувати роботу.
Simon Tewsi

25

У вас немає дозволу на доступ, можливо, тому що ви не власник.

Виправте, змінивши власника на себе:

sudo chown -R your_login_name /path/to/folder

2
На моїй локальній машині розробки ці файли спочатку були створені моїм локальним сервером apache, тому належали користувачу www-data. Як тільки я запозичив їх на свій рахунок, знову все працювало нормально. "Відмова у дозволі" була справжньою проблемою. "Не в змозі зняти" була просто червона оселедець.
Дейл Андерсон

23

У мене виникла проблема з файлом default-settings.php в drupal 7. У цьому випадку я не зміг її видалити або відновити так, як сказав @rtconner. У мене не було програми чи нічого, що використовує цей файл, і це виявилося помилкою дозволів.

Я додав chmod 777 *у папку, і тоді мені вдалося відновити її без проблем.


3
Незважаючи на те, що ви, можливо, не хочете мати 777жодну папку. Це вирішило мою проблему, але після її вирішення я швидко змінив її до стандартної. Дякую!
Брам


6

Я зіткнувся з цією проблемою щоразу, коли на своїх машинах OS X працював "git repack" або "git gc", навіть під час запуску git з правами адміністратора, і, нарешті, вирішив це після переходу на цю сторінку: http://hints.macworld.com /comment.php?mode=view&cid=1734

Виправлення полягає в тому, щоб відкрити термінал, перейдіть до свого git repo, CD в папку .git і виконайте:

chflags -R nouchg *

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


1
Посилання macworld більше не дійсне. Ось оновлений номер: superuser.com/a/40754
webb

5

Це також може статися, коли:

  1. Ви запустили процес усередині контейнера Docker і:

  2. Деякі файли були згенеровані цим процесом, і:

  3. Призначення файлів встановлюється як об'єм на хості Docker, і:

  4. Ви працюєте gitна хості Докер.


У такому випадку встановіть файли, які ви хочете скопіювати та запустити:

git diff --name-only --cached | xargs ls -l 

Файли, які відповідають зазначеним вище критеріям, мають префікс:

-rw-r--r-- 1 root root ...

Вони належать rootі не підлягають запису, що не добре. Щоб виправити цей запуск:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Більш чистим рішенням, ймовірно, було б використання --userопції, див. Це для Docker і це для Docker .


4

Для тих, хто використовує Intellij , як @rtconner сказав, що ця проблема не викликана git. Оскільки ваш IDE заблокований, файл (файли) git не може його скасувати. Отже, вам потрібно закрити свій IDE, а потім спробувати об'єднати (або що завгодно) його за допомогою командного рядка.


Це було все. Сталося з Android Development, оскільки AndroidStudio - Intellij.
Reinherd

2

У моєму випадку це символ ":" у назві папки не дозволяв git repo перевірити на Windows.


2

на терміналі на Mac я просто роблю це

Судо git checkout. (щоб все почистити)

і потім

sudo git pull походження


2

У мене була помилка всередині віртуальної машини (під керуванням Ubuntu), коли я намагався це зробити git reset --hard.

Виправлення полягало в тому, щоб просто запустити git reset --hardз хост-машини OS X.


1

Жодна з інших пропозицій не працювала для мене, але це:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

У моєму випадку мій каталог Windows знаходиться в папці Dropbox. Це не специфічне для Git питання. Коли файл (у цьому випадку файл блокування) щойно створений, для синхронізації потрібно ще секунду Dropbox. За цей час файл використовується Dropbox, і будь-яка сторона програми (в даному випадку Git) не може видалити файл.

Моє рішення полягає в тому, щоб вийти з Dropbox і, таким чином, уникати чарівної магії синхронізації файлів Dropbox.


0

Я стикався з цією помилкою , і це викликано неправильним «власник / групами» з файлу / папки . Ви повинні звернутися за допомогою до свого адміністратора сервера, щоб змінити "власника / групу" цього файлу / папки та повторити спробу "знову потягнути". Або якщо ви судоер, просто засуньте "ім'я власника / назву вашої групи" та спробуйте знову витягнути сховище. Спробуйте, це працює на 100% для мене!


0

Переконайтесь, що будь-які пов’язані процеси або потоки не запущені, і виконайте кінцеве завдання або змушуйте вийти з необхідності.

Переконайтеся, що ви змінили дозвіл власності.


0

Загалом, якщо це відбувається в Windows , а ви використовуєте tortoisegit , це кеш статусу tortoisegit . Вбийте цей процес, і він буде звільнений.


Ви фактично можете повністю відключити кеш статусу TortoiseGit, і це, як правило, я б рекомендував. Часто це стає причиною багатьох несподіваних блокування файлів, і це, як правило, набагато більше проблем, ніж це варто. Просто використовуйте git statusзамість цього командний рядок.

0

Мені просто довелося переключити користувача з ubuntu на власне ім'я користувача, під яким я вперше робив речі. Це і виправило.


а як щодо користувачів Windows?
Герр Ненту '27

ОП був на Ubuntu. Я б не коментував тему Windows.
Марк

0

Для мене вирішено, встановивши мій клієнт git (GitExtensions) завжди працювати в режимі адміністратора.


0

У мене була проблема під час використання IntelliJ(14.1.3 Ultimate), я хотів відновити зміни в якомусь файлі.

Вирішено шляхом закриття, Git Bashвідкритого в іншому вікні - чергова спроба відновити IntelliJроботу.


0

Я зіткнувся з цією помилкою, і я думаю, що проблема полягала в тому, що я "запускався як адміністратор", коли запускав Eclipse і створював файли, тому вони були власником адміністратора (помічено запуском "ls -la" в папці). Коли я пізніше спробував сховати файли, це мені не дозволило ("не вдається від’єднати файли" і все таке). Виправлення chmod у файлах було для мене виправленням.



0

Все, що вам потрібно зробити, це надати дозволи, запустити команду нижче з кореня проекту:

    chmod ug+w <directory path>

0

У мене було те саме питання, я спробував кілька альтернатив, як пропонували інші.

Нарешті, надавши правильний дозвіл на папку .git вирішити проблеми.

sudo chown -R "${USER:-$(id -un)}" .git

0

У моєму випадку проблема з дозволом вирішена шляхом встановлення www-dataяк власника:

chown -R www-data project_folder_name

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