Это обычно означает, что процесс все еще использует этот конкретный файл (все еще имеет дескриптор)
(в Windows ProcessExplorer
хорошо отслеживает такой процесс)
Попробуйте закрыть другие программы и попробуйте снова свою git pull
.
Обратите внимание, что у вас есть альтернатива с GIT_ASK_YESNO
переменной .
Обновление января 2019 года:
Это должно быть еще более исправлено, с Git 2.21 (Q1 2019), так как " git gc
" и " git repack
" не закрывали открытые файлы пакета, которые они нашли ненужными перед их удалением, которые не работали на платформе, неспособной удалить открытый файл.
Это было исправлено.
См. Коммит 5bdece0 (15 декабря 2018 г.) Йоханнеса Шинделина ( dscho
) .
(Слиты Junio C Hamano - gitster
- в фиксации 5104f8f , 18 января 2019)
gc
/ repack
: релиз пакетов при необходимости
В Windows файлы не могут быть удалены или переименованы, если все еще есть дескрипторы, удерживаемые процессом.
Чтобы исправить это, мы ввели close_all_packs()
функцию.
Ранее мы позаботились о том, чтобы пакеты выпускались незадолго до их git gc
появления, на случай, если gc
захочется удалить ненужные пакеты.
Но этот разработчик забыл, что gc
самому также нужно отпустить пакеты, например, при объединении всех пакетов через --aggressive
опцию.
Кроме того, он git repack -d
хочет удалить устаревшие пакеты и поэтому должен также закрыть все дескрипторы пакетов.
Обновление январь 2016
Это должно быть исправлено в Git 2.8 (март 2016 г.) (и см. Git 2.19, Q3 2018 ниже)
См. Коммит d562102 , коммит dcacb1b , коммит df617b5 , коммит 0898c96 (13 января 2016 г.) от Johannes Schindelin ( dscho
) .
(Слиты Junio C Hamano - gitster
- в фиксации 3c80940 , 26 Jan 2016)
fetch
: выпустить файлы пакета перед сборкой мусора
Перед автоматическим сбором файлов мы должны убедиться, что файлы пакетов выпущены на случай, если их нужно перепаковать и собрать мусором.
Многие кодовые пути, которые запускаются gc --auto
перед выходом "", сохраняют сопоставленные файлы пакета и оставляют дескрипторы файлов открытыми, что не подходит для систем, которые не могут удалить открытые файлы.
Теперь они закрывают пакеты, прежде чем сделать это.
Это исправляет git-for-widows
проблему 500 .
Если посмотреть на тест, используемый для проверки этого нового подхода , возможный обходной путь (поскольку Git 2.8 еще не выпущен) состоит в искусственном повышении gc.autoPackLimit
.
git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
В git 2.8.4 (июнь 2016 г.) упоминается проблема 755, которая также должна устранить проблему ( commit 2db0641 ):
Убедитесь, что дескрипторы временных файлов не наследуются дочерними процессами
На самом деле, упомянутая выше git-for-windows
проблема 500 действительно исправлена с помощью Git 2.19, Q3 2018.
См. « Git - отсоединение файла .idx
и .pack
сбой (единственный дескриптор, принадлежащий процессу этому файлу git.exe
) »