git rebase: "помилка: не може стати" файл ": дозвіл відхилено"


342

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

Так я і зробив:

git rebase -i HEAD~2

Це дало мені мого редактора, де я вирішив вибрати більш ранню команду та видалити наступну. Коли я врятував, git сказав:

помилка: не може стати stat 'name file : дозвіл відхилено

Не вдалося застосувати sha1 для подальшого введення ... початковий рядок тексту для цього коміту

Зараз:

  • Жодна фіксація не з'являється, коли я це роблю git log.
  • git status говорить мені, що я "зараз не в жодній галузі".
  • Один файл вказаний як модифікований та в індексі, а два файли вказані як невиправлені. У моєї першої комісії був лише один файл (я думаю), а в моєму другому фільмі було хороший десяток.

Що трапилось!? Як це виправити?


10
Ви, випадково, використовуєте git на windows?
CB Bailey

Так. Я запускаю команди у вікні DOS.
Райан Лунді

2
У вас працює перевірка вірусів? Іноді такі програмні засоби перевірки вірусів викликають подібні проблеми.
Грег Х'югілл

53
У мене виникла проблема з git checkout (тому не можна робити аборт, як пропонується прийнятою відповіддю), але закриття всіх моїх IDE дозволило мені пройти. Друга відповідь має бути прийнятою
плюс

1
@IanGrainger, відповідь, на яку ви посилаєтесь, була розміщена через вісім місяців після прийнятої відповіді. Чи потрібно мені приїжджати навколо та відвідувати всі мої запитання кожні кілька місяців, щоб потенційно змінити прийняті відповіді на всі вони? Кнопки для голосування існують не просто так. Якщо відповідь, яка найбільше відповідає, допоможе вам більше, ніж прийнята відповідь, тоді використовуйте її. Хто тебе зупиняє? Але я прийняв відповідь, яку я зробив, бо це допомогло мені, і я той, хто задав питання.
Райан Лунді

Відповіді:


195

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

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

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

git rebase --abort

Ви можете спробувати використати git applyта дізнатися, що саме git git насправді намагався зробити, перш ніж робити, git rebase --continueале, чесно кажучи, я б не рекомендував цього. Більшість випадків, коли я це бачив, було більше, ніж випадків, коли щось випадково пропущене чи зіпсовано.


6
@Kyralessa: Хм, ви спробували перезавантажити? Якщо щось наполегливо блокує цей файл, то після перезавантаження (або дещо менш драстичного, що випускає файл), ви повинні мати змогу git checkout -- previously-locked-fileі створити резервну копію та працювати.
CB Bailey

51
Ну, я все ще не впевнений, що саме сталося, але як я найкраще можу сказати, VS 2010 блокував файл (дивним, оскільки це був файл .xml doc). Провідник процесів не знайшов нічого, що блокує цей файл, але після виходу з VS я зміг використати git checkoutдля повернення файлу (в git statusньому було видалено), і тепер все повернулося так, як було раніше, ніж я спробував відновити / сквош. Можливо, мені слід спробувати ще раз, хоча в цьому моменті я відчуваю трохи завади.
Райан Лунді

3
Слідом за багатьма місяцями пізніше: У мене більше не було цієї проблеми. Rebasing працював чудово, включаючи навіть інтерактивний рисинг. Це, напевно, був моментний глюк, що блокує файли VS.
Райан Лунді

49
Закриття Visual Studio 2010 вирішило це і для мене
Трев,

4
Atom також очевидно блокує файли. Перезапуск виправив її.
Августин Браллі

653

Спробуйте закрити будь-які програми з відкритою папкою, такі як редактори, вікна Explorer, командні підказки та програми FTP. Це завжди вирішує проблему для мене в Windows.


72
Я отримував таку ж помилку. Я просто закрила візуальну студію і все працювало.
jacobsimeon

6
Я закрив майже все, про що міг придумати, перш ніж згадав перетворювач WinLess LESS -> CSS, що ховався у фоновому режимі.
Майкл Мартін-Смукер

6
Visual Studio тримав замок на нут-пакеті, коли я намагався об'єднатись. Закриваючий ВС працював на мене.
CodeHxr

7
Найпоширенішим джерелом цієї помилки, яку я бачив у Windows, є блокування файлів Visual Studio. За призначенням закрийте VS перед перемиканням гілок, злиттям тощо
longda

5
Відповідь "Я теж" за Атом. Здається, блокуйте файли та каталоги; закривши це, вирішує проблему.
айм

277

Просто закрийте свій IDE (VISUAL STUDIO / ATOM тощо). Це може спрацювати


1
В IntelliJ мене зупинило запущена служба Tomcat. Трохи простіше, ніж перезапуск IDE.
Філ Картер

У мене також було відкрито вікно Git Bash - закриття, яке працювало на мене.
Вінс I

Будь-яка IDE, яка стоїть за сіль, не повинна блокувати нічого в репо ... пальці !!
LightCC

Увімкніть цю проблему після реєстрації у тимчасовій гілці за допомогою Atom у Windows 10. Закриття та повторне відкриття Atom вирішило проблему для мене.
mickburkejnr

24

Коли я бачу це на своїй машині, це гірше, ніж просто "якийсь процес відкрив файл". Фактичне право власності на файл отримує злому до того моменту, коли я (працює як адміністратор) можу отримати доступ до нього лише після перезавантаження.

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

Припинення IIS на цьому етапі не робить цього. Найкраще, що я з’ясував, це зробити перезавантаження та пам’ятати, щоб зупинити IIS, перш ніж змінювати основні гілки в майбутньому.

Я знаю, що насправді не відповідає на питання, але може бути корисним для інших.


Привіт, Майк ... у нас виникає така ж проблема, але вона вийшла з очей. Ми використовували той самий процес у багатьох проектах із запуском IIS, і жодних проблем не виникало. Одного разу, однак, він починає траплятися ... спантеличуючи і засмучуючи. Ви дізналися більше, ніж написали це?
Етан Браун

Дякую за розуміння Майка - у моєму випадку перевірка старої гілки з проектом ASP.NET MVC, яка мала інший прив'язуючий URL до попередньої гілки, змусила Visual Studio, а потім IIS зафіксувати блокування деяких файлів у проекті. Зупинивши відповідний пул програми у IIS, вилучено замок.
фундація

IIS був винуватцем і для мене; коли це з'являється швидкий, iisresetсхоже, вивільняє блокування файлів.
alexm

Я виявив, що те саме відбувається і з OneDrive: перемикання гілок у репо, що зберігається в OneDrive, дійсно плутає це
CharlieB

Це сталося і зі мною під час win10, вимагаючи перезавантаження, але я не перевіряв iisresetрішення.
qdread

17

У Windows це може бути процес TortoiseGIT, який блокує ці файли. Відкрийте менеджер завдань і закінчіть процес TGitCache.exe .


2
Добре знати, хоча в моєму випадку я не використовую TortoiseGit; Я просто використовую командний рядок.
Райан Лунді

13

Я щойно натрапив на цю нитку відповідей - ця помилка є такою помилковою помилкою.

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

Після закриття редактора - я знову запустив "git merge" і бум, воно спрацювало.

Яка безглузда помилка :(


Дякую тобі! Не щодня ви побачите правильну відповідь внизу списку. Я рекомендую це позначити правильною відповіддю. Замість того, щоб скасовувати поточну операцію, має сенс вирішити справжню проблему.
Нікхіл Куріакосе

12

якщо ви використовуєте vscode, вбийте термінал і відкрийте новий. ще, можливо, також закрити термінал


Це було все, схоже на блокування процесу чи щось подібне
Майк

10

Це трапляється зі мною в Windows час від часу

помилка: не може стати stat 'name file: дозвіл відхилено

Найчастіше у мене є декілька екземплярів біт-bash, і один із екземплярів git bash знаходиться в каталозі, який не існує у віддаленій гілці, з якої я витягуюсь.

Закриття всіх, крім одного екземпляра git bash, вирішує проблему для мене.


9

Якщо IDE, який ви використовуєте (у випадку, якщо ви використовуєте його), можливо, також заважає. Саме це сталося зі мною під час використання QtCreator.


Так було і зі мною, використовуючи PhpStorm. Перезавантаживши її, виправили помилку.
lancemonotone

7

Використовуючи SourceTree у програмі Win 10, виправили проблему, закривши редактор Atom.

Помилка відтворення:

  1. У гілці B створіть md-файл, використовуючи Atom, відредагуйте його, збережіть та введіть.
  2. Перейдіть на гілку А, витягніть нові сервери з сервера.
  3. Спробуйте переключитися назад, Opps, там написано "помилка: не може стати" файл ": дозвіл відхилено".

6

Це також може статися, коли ви використовуєте SublimeText, і спливаюче вікно з проханням придбати програму не закрито.


1
Також отримав це з Atom, просто відкривши дерево проекту / файлів
Hal

1
Як і @Hal, моя проблема була з Atom. Це було тому, що папки в одній гілці не було в іншій гілці. Закриття Atom виправить це, але ви також можете зруйнувати дерево проекту (щоб приховати папку), і це теж працює.
jsalwen

6

Це часто трапляється, коли ви попередньо обробляєте програмне забезпечення / програми, які переглядають проект, наприклад, Prepros або Codekit. Також Atom і Sublime (і навіть Notepad ++) можуть спричинити це, якщо файл проекту зараз редагується.

Найпростіший спосіб вирішити проблему - закрити все, що має відкриті файли проекту, об'єднати ваші гілки, а потім знову відкрити їх, щоб оновити його. Це також дозволить уникнути будь-яких проблем, коли програма більше не знає про будь-які зміни, що відбулися, змушуючи вас оновити проект (і) вручну.


1
o людина! Я біг в'яз-живий на задньому плані. Це врятувало мені тонну головного болю.
frostymarvelous

6

Якщо ви працюєте з веб-пакетом, вимкніть його. Вимкніть також і IDE. Потрібно добре працювати після виконання цих речей.


4

У мене була подібна проблема. Але вирішити це було дуже просто. На машині Windows у мого провідника файлів була відкрита папка, яка існувала в одній гілці, а не в іншій, яку я перевірив. Закриття Провідника файлів вирішило проблему.


4

Я щойно мав це під Win 7.

$ git stash pop error: не може stat 'parentFolder / subfolder': помилка в дозволі відхилена: не може stat 'parentFolder / subfolder': дозвіл відхилено

Діагноз:

1> Я перейшов до папки, і вона там є, і я не міг її видалити!

2> Використовуйте "Explorer Explorer" -> Знайти -> Знайдіть ручки та Dlls -> введіть туди ім'я "підпапки" та шукайте.

Результат: виявляється, що XMLSpy відкрив один з xml там, закрийте XML Spy і спробуйте сховати поп знову, він працює зараз.


4

Сталося зі мною в Windows під час перезавантаження в інтегрований термінал IntelliJ . Я помітив, що у мене паралельно працював екземпляр клієнта Git bash .

Закриття Git bash вирішило проблему.


2

Моя зустріч із цією проблемою була викликана моїм редактором Intellij. У рамках внутрішнього контролю версій він пройшов і заблокував усі приховані файли git. (З різних причин я не використовував плагін git, який постачається з Intellij ...)

Тому я відкрив звичайне вікно дос в якості адміністратора, змінив каталог і виконав

attrib -R /S

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


2

Я погоджуюся з вищезазначеними відповідями "Закрити візуальну студію".

Однак додатковим кроком, який я повинен був зробити навіть після того, як я закрив Visual Studio, було вручну вбити процес Visual Studio "devenv.exe" у Провіднику завдань. Після цього я знову зміг працювати в gitbash:

git pull

і помилка "не може стати ім'ям файлу " зникла. Можливо, це пов'язано з розширенням Visual Studio, що зберігає процес відкритим довше навіть після закриття.


2

У мене щойно була ця проблема. Річ у тім, що - якщо ви відкрили файл, який був видалений \ замінений після повторної бази (у вас була гілка, у якої вже немає цього файлу), git-система пошкоджується. Тож я закрив усі відкриті файли, а потім спробував перевірити якусь іншу гілку


2

Альтернативним рішенням, а не закриттям усіх додатків, які, можливо, блокують каталог, як це стосується будь-якої іншої відповіді, було б використовувати утиліту, яка розблокує файли / каталоги, не закриваючи все. (Я ненавиджу потребу перезавантаження Visual Studio)

LockHunter - це той, який я використовую: https://lockhunter.com/ Існують, ймовірно, і інші, але цей чудово працював для мене.


1

Ця ж проблема в Windows 10 64 біт, запускається Git Bash версії 2.9.0.windows1, використовуючи Atom як мій редактор.

Це працювало для мене: я додав папку програмного забезпечення Git (для мене це було C: \ Program Files \ Git) до виключень для Windows Defender.

Після додавання виключення git checkout 'file'працював чудово.


1

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

Однак у цьому випадку, оскільки це в основному гоночна умова, все, що вам потрібно зробити, - це продовжити перерваний процес перезавантаження . На жаль, це трапляється зі мною весь час, тому я написав цьому маленькому небезпечному помічнику, щоб продовжувати роботу:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

Якщо ви хочете бути впевненими, ви можете git rebase --edit-todoперевірити, чи дійсно наступне зобов’язання, яке слід застосувати, саме те, що не вдалося застосувати раніше. Використовуйте git clean -dnдля того, щоб не видалити важливі файли.


1

Сталося зі мною, коли у Windows, при використанні фотошопу: Коли я зберегла зображення, а потім перейшла до гілки (залишивши фотошоп із відкритим зображенням), у мене з’явилася помилка git. Закрийте зображення у фотошопі та повторіть спробу



1

Вбивство процесу w3wp.exe, пов’язаного з сховищем, зафіксувало це для мене.


1

У моєму випадку у мене позаду працював сервер розробників webpack.


0

Я отримав цю помилку, коли мій VS1013 був на гілці, націленій на 8.1, і я намагався перевірити гілку 8.0. Мені потрібно було повернути вкладку до VS і дозволити її UpdateAll. Тоді я міг перевірити 8,0 відділення без помилок.


0

Я також був на машині Windows за допомогою Git Shell, коли я зіткнувся з тією ж помилкою.

Однак у той час у мене було відкрито кілька Git-терміналів.

Перший термінал отримав помилку, про яку ви розмістили вище, а другий термінал раніше запускав команду grunt serveтерміналу від yeoman (пов'язана нижче). Другий термінал повинен був залишатися відкритим для розміщення екземпляра локального сервера.

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

Принаймні, це для мене працювало. Після закриття другого вікна терміналу я міг легко перевіряти різні гілки та маніпулювати файлами.

Grunt Служби Команди - Yeoman.I / O
http://yeoman.io/learning/


0

Я щойно стикався з цим питанням. Немає відповідей тут трапилося вирішити це для мене.

Закінчившись пакунками нута, я додав гілку, яка, як тільки повернулася назад до головної гілки, здавалося, не існує. Як тільки я зробив об'єднання, він би сказав newtonsoft ... xml не міг стати. Я б перейшов до відповідного файлу і відкрив його, але Windows повернув помилку, сказавши, що не може знайти файл (хоча я дивився прямо на нього)

Як я це вирішив, натисніть правою кнопкою миші видалити файл (який працював, але я не міг відкрити його, тому що Windows не міг його знайти ???) і спробуйте знову об'єднатись, і це вирішило проблему.

Дуже дивно.

Сподіваюся, це допоможе комусь пізніше.


0

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

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