Zwykle oznacza to, że proces nadal używa tego konkretnego pliku (nadal ma do niego uchwyt)
(w systemie WindowsProcessExplorer
jest dobry w śledzeniu tego rodzaju procesu)
Spróbuj zamknąć inne programy i spróbuj ponownie git pull
.
Zauważ, że masz alternatywę ze GIT_ASK_YESNO
zmienną .
Aktualizacja styczeń 2019:
To powinno być jeszcze bardziej naprawione dzięki Git 2.21 (Q1 2019), ponieważ „ git gc
” i „ git repack
” nie zamykały otwartych plików paczek, które uznali za niepotrzebne przed ich usunięciem, co nie działało na platformie niezdolnej do usunięcia otwartego pliku.
Zostało to poprawione.
Zobacz commit 5bdece0 (15 grudnia 2018) autorstwa Johannesa Schindelina ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu 5104f8f , 18 stycznia 2019 r.)
gc
/ repack
: zwalniaj pakiety, gdy są potrzebne
W systemie Windows plików nie można usunąć ani zmienić ich nazw, jeśli nadal istnieją uchwyty utrzymywane przez proces.
Aby temu zaradzić, wprowadziliśmy close_all_packs()
funkcję.
Wcześniej upewniliśmy się, że paczki są wydawane tuż przed git gc
spawnowaniem, na wypadek gdyby tak byłogc
ktoś chciał usunąć niepotrzebne już paczki.
Ale ten programista zapomniał, że gc
sam również musi puścić paczki, np. Podczas konsolidacji wszystkich paczek za pośrednictwem--aggressive
opcji.
Podobnie git repack -d
chce usunąć przestarzałe paczki i dlatego też musi zamknąć wszystkie uchwyty paczek.
Aktualizacja styczeń 2016
Powinno to zostać naprawione w Git 2.8 (marzec 2016) (i zobacz Git 2.19, Q3 2018 poniżej)
Zobacz: commit d562102 , commit dcacb1b , commit df617b5 , commit 0898c96 (13 stycznia 2016) autorstwa Johannesa Schindelina ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu 3c80940 , 26 stycznia 2016 r.)
fetch
: wypuść pliki paczek przed zbieraniem śmieci
Przed automatycznym gc'owaniem musimy się upewnić, że pliki paczek są zwolnione na wypadek, gdyby trzeba je było przepakować i zebrać jako śmieci.
Wiele ścieżek kodowych, które są uruchamiane gc --auto
przed zamknięciem " ", zachowywało mapowanie plików pakietów i pozostawiało otwarte deskryptory plików, co nie było przyjazne dla systemów, które nie mogą usunąć otwartych plików.
Teraz zamykają paczki, zanim to zrobią.
To rozwiązuje git-for-widows
problem 500 .
Patrząc na test użyty do zweryfikowania tego nowego podejścia , możliwym obejściem (ponieważ Git 2.8 nie jest jeszcze dostępny) byłoby sztuczne podniesienie gc.autoPackLimit
.
git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
git 2.8.4 (czerwiec 2016) nie wspomina o problemie 755, który również powinien złagodzić ten problem ( zatwierdzenie 2db0641 ):
Upewnij się, że uchwyty plików tymczasowych nie są dziedziczone przez procesy potomne
W rzeczywistości wspomniany powyżej git-for-windows
problem 500 został naprawiony w Git 2.19, trzeci kwartał 2018 r.
Zobacz „ Git - odłączenie pliku .idx
i .pack
niepowodzenie (Jedynym uchwytem do tego pliku jest proces git.exe
) ”.