Не вдалося від’єднати файл. Чи варто спробувати ще раз?


571

З одним із файлів у моєму локальному сховищі git відбувається щось не так. Коли я намагаюся змінити галузь, вона говорить:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

Що це могло означати?


1
Ознайомтесь із цим запитанням
RDL

можливий дублікат [Git rebase отримав помилку "від’єднання файлу не вдалося"] ( stackoverflow.com/questions/3698369/… )
Джош Лі

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

1
Також переконайтеся, що в git-процесі є дозволи на запис у цей файл.
boileau

Відповіді:


751

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

У мене це траплялося в Windows Vista, де eclipse - це програма, що "використовує" файл. Файл може бути насправді не відкритим у затемненні, але може бути відкритий процесом, запущеним eclipse.

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


53
У Windows використовуйте ProcessExplorer, щоб знайти, у якому процесі відкритий файл.
Дейв C

2
Чи є спосіб написати сценарій на зразок "якщо цей файл неможливо видалити (наприклад, файл просто не існує), просто пропустіть файл".
2xMax

14
У моєму випадку це була Visual Studio та її плагін Git.
Michał Powaga

8
У Windows, якщо у вас немає ProcessExplorer або не хочете його завантажувати, ви можете запустити (Windows + R) "resmon", перейти на вкладку CPU та шукати ім'я файлу в текстовому полі "Associated Identifiers".
Рафаель

6
Якщо ви використовуєте, GitKrakenви можете отримати це, якщо виконувати такі команди, як
rebase

285

У мене виникла ця проблема і вирішено її командою: git gc Вищевказана команда видалить темп та непотрібні файли. (Збирач сміття.)


43
git pullініціюється git gcавтоматично, і gc намагався отримати доступ до деяких .pack та .inx файлів. Їх утримував процес "windows git", який володів git pullкомандою. Запуск git gcвручну і ніж - git pullдійсно вирішує проблему.
Микита

4
Під час бігу git gcя знову отримав ту саму помилку, коли gcпрацював
Prakash K

4
"Запуск git gc вручну і ніж - git pull дійсно вирішує проблему." Це допомогло. Дякую, Микита.
сангам

Це мені теж допомогло. Ранував це в Windows разом з Git Bash
Ascalonian

Після запуску git pull я отримав цю помилку. Я натиснув CTRL + C, щоб зупинити потяг, запустив git gc, а потім знову потяг git, проблема зникла і нічого не було зламано, перервавши потяг.
daniel sp

84

це рішення звідси працювало для мене:

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

У моєму випадку це було тому, що я запускав Git з непідвищеного командного рядка. "Запустити як адміністратор" виправив це для мене.


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

3
I: вводиться Ctrl+Cдля припинення дуже довгого списку незв’язаних файлів; вийшов з програми gitbash, моєї IDE та програми GitHub Windows; перезапущений gitbash у підвищеному режимі "Запустити як адміністратор"; і побіг git gc --aggressive. Виконали деякий час, але пройшли без помилок.
Марк МакКлелленд

Якщо ви вважаєте, що це дублікат, слід позначити його як такий, а не додавати відповідь, яка вказує на іншу відповідь
Ліам

2
@Liam Це питання старіше, але ця відповідь була лише на інше запитання, і на це питання немає лише однієї відповіді, що ускладнює просто встановлення дубліката.
sepehr

Це спрацювало досить добре для мене. Жодна з попередньої відповіді не зробила. Дуже дякую.
Роберто Родрігес

35

Я зіткнувся з цим питанням під час виконання git pull.

Я спробував, git gcі це вирішило мою проблему.


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

23

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

git config --global core.longpaths true

або спробуйте встановити прапор відповіді "так / ні", якщо він для вас не конфліктний

set GIT_ASK_YESNO=false

Якщо шлях занадто довгий, я не знайшов вдалого рішення.


5
Не знаю чому, але налаштування "git config --global core.longpaths true" було для мене корисним.
Максим

GIT_ASK_YESNO, не можу знайти інформацію про це. Звідки воно походить?
majkinetor

див.: stackoverflow.com/questions/3698369/…, наприклад; Я зараз не знаю, якщо він працює з версіями git (2.9)
anddo

core.longpathsз додатковим: скинути - твердий чорнослив gc працював на мене - але довелося закрити AndroidStudio, щоб не зіпсувати його вбудовані інструменти
Майк bovquier


10

Це може бути корисним для когось; якщо все вищезазначене не спрацювало для вас, виконайте наступні дії:

  1. Закрийте свій IDE (у мене було Eclipse, не впевнений, чи стосується він Intellij та інших) або будь-який інший додаток, який може використовувати git.

  2. Відкрийте git з командного рядка (у моєму випадку я мав git bash) та запустіть так, git gcяк згадували інші.

Це зробило для мене чари.


Це єдина відповідь, яка допомогла в моєму випадку за допомогою студії Android
0101100101

10

Оскільки я використовую gitkraken та командний рядок, я зіткнувся з тією ж проблемою. І тоді я запускаю git gcкоманду, це вирішило мою проблему. Тож я щасливий і хочу поділитися деякими пунктами, які можуть бути корисними.

Що git gcбуде робити?

git gc видалення недоступних об'єктів, які могли бути створені за допомогою попередніх викликів git add.

Коли бігати git gc?

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

Як зробити його автоматично налаштованим?

Деякі команди git можуть автоматично запускати git gc; детальніше див. прапор --auto нижче. Якщо ви знаєте, що ви робите, і все, що вам потрібно, це назавжди відключити цю поведінку без додаткових міркувань, просто зробіть це

git config --global gc.auto 0

8

У моєму випадку (Win8.1, запущений TortoiseGit) файл блокував процес, який називався "Кеш статусу TortoiseSVN".

Вбивство дозволило мені без проблем запускати "git gc". Вищеописаний процес запускається TortoiseGit, тому немає необхідності вручну його перезавантажувати.


7

У мене виникла така проблема в Windows 7, і виявилося, що це пов’язано з деяким осиротілим git.exeпроцесом.

Щоб вирішити це, відкрийте диспетчер завдань і вбийте всі git.exeпроцеси.

Оскільки gitкоманди є короткочасними, їх зазвичай ніколи не бачити git.exeв диспетчері завдань. Коли вони там є, це означає, що щось не так, і ви повинні вбити ці процеси.


7

У мене ця проблема в Windows. Я закрив свій IDE (Android Studio) і вибрав ТАК у git shell. Це спрацювало.


5

У Windows 8: я запустив git gc, і він сказав, що git gc вже запущений, я запустив git gc --force і побіг смітник.

Тоді я міг би перемикати гілки та об’єднуватись без жодних проблем, спробувати git gc --force.

Можливо, процес gc не зупинився витончено з тих чи інших причин.


Він також дійсний для Windows 10.
огужан

4

У мене була ця проблема з .tmpфайлами в /.git/objects/packпапці. Я думаю, що щось не вдалося під час натискання чи потягу, тому я видалив ці тимчасові файли та скинув HEAD до мого останнього фіксації. Не впевнений, чи радить це, але це працювало на мене. Також git count-objects -vподав мені список .tmpфайлів, які не належали до папки пакета.

Або придушити y / n повідомлення у Windows git open cmd.exeта запустіть:

SETX GIT_ASK_YESNO false

дивись тут: https://twitter.com/petercamfield/status/494805475733807104


Після того , як біг git gc, git count-objects -vдопомагає у визначенні об'єктів, що залишилися температурних в packпапці.
mistaecko

4

Мені вдалося вирішити це, відкривши Powershell як адміністратора і звідти git checkout <branch_name>


Спасибі @ bar-horing Це допомогло мені визначити це як дозвіл. Після того, як я зафіксував дозвіл Windows для цієї папки, вона працювала.
Кумар

3

Я зіткнувся з тим же питанням, роблячи "git pull". Я спробував вручну вести команду git команда 'git gc', і це вирішило мою проблему.


4
У той час як це є спробою відповіді, це нічого , що ще не охоплену іншими відповідями (наприклад, не додати цей ). Якщо ви намагаєтесь підтвердити, що це рішення працює, або ви хочете подякувати авторові відповіді, будь ласка, не публікуйте відповіді на це. Після придбання ще більшої репутації ви отримаєте достатньо привілеїв, щоб підвищити відповіді, які вам подобаються, - це спосіб переповнення стека, який висловлює подяку.
Скотт Велдон


2

Після спроб різних рішень нарешті git clean -fмені допомогли.

EDIT: Я знову стикаюся з проблемою ще раз - закриття всіх процесів, залежних від git, схоже, допомагає (як, наприклад, gitbash, Eclipse IDE тощо)


2

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


2

Після запуску команди

git rm -rf foo.bar

Я бачу помилку

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Тому що інша програма використовує цей файл . Наприклад, коли я запускаю веб-додаток Java у моделі налагодження або запускаю веб-додаток на сервері, я не можу видалити файл журналу. Вимкніть сервер програми (або вимкніть процес налагодження), повторіть спробу

git rm -rf foo.bar

Я бачу, що файл видалено.


1

Це може бути окреме вікно gitk, яке працює, щоб переглянути деяку історію gitk.

Просто закрийте це вікно, щоб усунути цю проблему.


1

Я зіткнувся з цим випуском одночасно з git Bash та Eclipse EGit. Рішення: закрити затемнення. Також не завадило б бігати, git gcяк згадував @khilo.



1

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


1

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


1

Я перепробував кожну пораду на цій сторінці, і нічого не допомогло. Я робив а, git fetchі git reset --hard origin/developmentдав мені помилку. Не вдалося скинути до останньої версії.

Що допомогло, це перевірка іншої гілки, а потім перевірка попередньої гілки. Дуже дивно, але це вирішило проблему.


1

Якщо закриття IDE та виконання різних команд git, перелічених тут, не допоможуть, спробуйте вручну вбити всі запущені процеси Java. У мене процес Java, ймовірно, залишився від затемнення, який якось утримував файл конфігурації відкритим.


1

Якщо ви використовуєте Docker і працюєте з Windows 10, можливо, ви захочете зупинити контейнер (и), де файл може працювати. Щоб показати статуси контейнерів, запустіть

docker ps -a

Щоб зупинити їх, просто запустіть

docker stop <container name or container id>

Це працювало для мене, оскільки я запускаю свої локальні файли, використовуючи файл .sh


1

Працював для мене, Пробував на вікнах:

Зупиніть роботу вашого сервера від IDE або закрийте IDE

Intellij / Ecllipse або будь-який, він буде працювати.


0

У Windows бачили цю помилку на git clone(досить великому) репо. Закрили SmartGit і призупинили програмне забезпечення для резервного копіювання (CrashPlan), і після цього воно спрацювало. Не впевнений, хто з 2 зробив трюк, але якщо запустити будь-який, це може зробити це і для вас.


0

У мене виникло те саме питання під час виконання git pull, і як зазначено вище, це було через програму, яка містила ці файли і не дозволяла тягнути git. Закриття програми допомогло. Зазвичай IDE (наприклад, Eclipse), звідки файли перевіряються, утримуватиме його у фоновому режимі. Закриття ж і повторне запуску git вирішили проблему для мене.


0

У мене була така ж помилка, і закриття програми, яка відкрила файл, вирішила її. Я зміг повернутися назад і натиснути "Y"

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