Unlink файла Failed. Должен ли я попробовать еще раз?


572

Что-то не так происходит с одним из файлов в моем локальном хранилище git. Когда я пытаюсь изменить ветку, он говорит:

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

Что бы это могло значить?


1
Проверьте этот вопрос
RDL

возможный дубликат [Git rebase получил ошибку «unlink of file failed»] ( stackoverflow.com/questions/3698369/… )
Джош Ли

сработал ли данный ответ для вас, если средство просмотра процессов не работает, перезапустите компьютер и затем удалите файл; также вы можете принять ответ, если он сработал для вас
dhaval

1
Также убедитесь, что у процесса git есть права на запись в этот файл.
Boileau

5
возможно дублирование Unlink файла не удалось
BartoszKP

Ответы:


752

Это может означать, что другая программа использует файл, что не позволяет git «перемещать» файл в или из рабочего каталога, когда вы пытаетесь изменить ветви.

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

В этом случае попробуйте закрыть файл в любых приложениях, которые могли его использовать. Если это не сработает, полностью закройте все приложения, которые могли открыть файл.


53
В Windows используйте ProcessExplorer, чтобы найти, какой процесс имеет открытый файл.
Дэйв С

2
Есть ли способ написать скрипт типа «если этот файл не может быть удален (например, файл просто не существует), просто пропустите файл».
2xMax

14
В моем случае это была Visual Studio и ее плагин Git.
Михал Повага

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
Аскалон

После запуска мерзавца я получил эту ошибку. Я нажал CTRL + C, чтобы остановить тягу, запустил git gc, а затем снова git pull, проблема исчезла, и ничего не сломалось при прерывании тяги.
Даниэль С.П.

84

отсюда сработало это решение :

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

В моем случае это было потому, что я запускал Git из командной строки без повышенных прав. «Запуск от имени администратора» исправил это для меня.


2
Работал на меня. Запустил VS в качестве администратора, а затем запустил командную строку из VS
Sentinel

3
Я: набрал, Ctrl+Cчтобы завершить очень длинный список несвязываемых файлов; вышел из gitbash, моей IDE и приложения GitHub для Windows; перезапустил gitbash в режиме повышенных прав «Запуск от имени администратора»; и побежал git gc --aggressive. Потребовалось время, чтобы завершить, но сделал это без ошибок.
Марк Макклелланд,

Если вы считаете, что это дубликат, вы должны пометить его как таковой, а не добавлять ответ, указывающий на другой ответ
Лиам

2
@Liam Этот вопрос более старый, но этот ответ был только на другой вопрос, и не существует только одного ответа на этот вопрос, который затрудняет просто установить один как дубликат.
Sepehr

Это хорошо сработало для меня. Ни один из предыдущих ответов не сделал. Большое спасибо.
Роберто Родригес

35

Я столкнулся с этой проблемой при выполнении git pull.

Я попытался, git gcи это решило мою проблему.


Я столкнулся с этой проблемой на компьютере Windows, и это решение изначально не работало. Однако, как только я запустил эту команду из командной строки администратора, она действительно разрешила мою проблему.
Уильям В.

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, не могу найти информацию об этом. Откуда это взялось ?
майкинетор

см. например : stackoverflow.com/questions/3698369/… ; Я не знаю, работает ли он с последними версиями git (2.9)
andhdo

core.longpathsс дополнительным: reset --hard prune gc работал для меня - но пришлось закрыть AndroidStudio, чтобы не испортить его встроенные инструменты
Майк Бовкиер


10

Это может быть полезно для кого-то; Если все вышеперечисленное не работает для вас, выполните следующие действия:

  1. Закройте вашу IDE (моя была Eclipse, не уверена, применима ли она к Intellij и другим) или любое другое приложение, которое может использовать git.

  2. Откройте git из командной строки (в моем случае у меня был git bash) и запустите, git gcкак уже упоминалось другими.

Это сделало магию для меня.


Это единственный ответ, который помог в моем случае с использованием Android Studio
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 status cache», который блокировал файл.

Убив его, я без проблем запустил 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папке. Я думаю, что-то не получилось во время push или pull, поэтому я удалил эти временные файлы и сбросил 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папке.
Ошибка

4

Я смог решить эту проблему, открыв Powershell в качестве администратора и оттуда git checkout <branch_name>


Спасибо, черт возьми. Это помогло мне идентифицировать это как проблему разрешения. Как только я установил разрешение Windows для этой папки, это сработало.
Кумар

3

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


4
В то время как это является попыткой ответа, это ничего , что еще не охваченную другими ответами (например, не добавить этот ). Если вы пытаетесь подтвердить, что это решение работает, или хотите поблагодарить автора этого ответа, не публикуйте ответ для этого. После того , как вы заработаете еще больше репутации , вы получите достаточные привилегии для того, чтобы поднять ответы, которые вам нравятся, что является способом переполнения стека, чтобы сказать спасибо.
Скотт Уэлдон


2

Попробовав различные решения, наконец-то git clean -fмне помогли.

РЕДАКТИРОВАТЬ: я снова столкнулся с проблемой несколько раз - похоже, что закрытие всех процессов, зависящих от git (например, gitbash, Eclipse IDE и т. Д.)


2

Как указано выше, что-то еще хранит файлы. Дело в том, что эта программа не выглядит для нас подозрительно. Я пытался сделать git pull из консоли, открыв 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, запущенное для просмотра истории git.

Просто закройте это окно, чтобы решить эту проблему.


1

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



1

Я столкнулся с этой проблемой в Windows, вы можете запустить git bash от имени администратора и затем выполнить команды желания, которые решили эту проблему для меня.


1

Если вы разрабатываете веб-приложение, общая причина - забыть выключить сервер. Например, это может быть простой процесс Node.js или в Windows ваш процесс IIS работает более ненавязчиво, как фоновый процесс.


1

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

Что помогло, так это проверить другую ветку, а затем проверить предыдущую. Очень странно, но это решило проблему.


1

Если закрытие вашей IDE и запуск различных команд git, перечисленных здесь, не помогут, попробуйте вручную убить все запущенные процессы Java. У меня был Java-процесс, вероятно, оставшийся от Eclipse, который каким-то образом оставил файл конфигурации открытым.


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 pull. Закрытие программы помогло. Обычно среда IDE (например, Eclipse), из которой проверяются файлы, будет держать ее в фоновом режиме. Закрытие того же самого и повторное выполнение git pull решило проблему для меня.


0

У меня была та же самая ошибка, и закрытие приложения, у которого был открытый файл, решило это. Я смог вернуться и нажать «Y»

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.