Зазвичай це означає, що процес все ще використовує певний файл (на ньому все ще є ручка)
(у Windows ProcessExplorer
добре відстежувати такий процес)
Спробуйте закрити інші програми та повторіть спробу git pull
.
Зауважте, що у вас є альтернатива зі GIT_ASK_YESNO
змінною .
Оновлення січня 2019 року:
Це повинно бути ще більш виправленим, Git 2.21 (Q1 2019), оскільки " git gc
" і " git repack
" не закрили відкриті файли пакунків, які вони виявили непотрібними перед їх видаленням, які не працювали на платформі, нездатній видалити відкритий файл.
Це було виправлено.
Див. Комітет 5bdece0 (15 грудня 2018 р.) Йоганнеса Шинделіна ( dscho
) .
(Об'єднав Хуніо С Хамано - 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 р.) Йоганнеса Шинделіна ( dscho
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 3c80940 , 26 січня 2016 р.)
fetch
: випустіть файли пакета перед збиранням сміття
Перед початком автоматичного gc'ing нам потрібно переконатися, що файли пакунків випущені у випадку, якщо їх потрібно буде перепакувати та зібрати сміття.
Багато кодових шляхів, які " 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, який також повинен полегшити проблему ( призначати 2db0641 ):
Переконайтеся, що дочірні процеси не успадковують тимчасові ручки файлів
Насправді, згаданий вище git-for-windows
випуск 500 справді виправлений з Git 2.19, Q3 2018.
Див. " Git - від’єднання файлу .idx
та .pack
помилка (Єдина ручка, що належить процесу, до цього файлу git.exe
) "