Questo di solito significa che un processo sta ancora utilizzando quel file specifico (ha ancora un handle su di esso)
(su Windows,ProcessExplorer
è bravo a tenere traccia di quel tipo di processo)
Prova a chiudere gli altri programmi e riprova git pull
.
Nota che hai un'alternativa con la GIT_ASK_YESNO
variabile .
Aggiornamento gennaio 2019:
Ciò dovrebbe essere ancora più corretto, con Git 2.21 (Q1 2019), in quanto " git gc
" e " git repack
" non hanno chiuso i file di pacchetto aperti che hanno trovato non necessari prima di rimuoverli, che non funzionavano su una piattaforma incapace di rimuovere un file aperto.
Questo è stato corretto.
Vedi commit 5bdece0 (15 dic 2018) di Johannes Schindelin ( dscho
) .
(Unita da Junio C Hamano - gitster
- in commit 5104f8f , 18 gen 2019)
gc
/ repack
: rilasciare i pacchetti quando necessario
Su Windows, i file non possono essere rimossi o rinominati se ci sono ancora handle gestiti da un processo.
Per rimediare, abbiamo introdotto la close_all_packs()
funzione.
In precedenza, ci siamo assicurati che i pacchetti fossero rilasciati poco prima della git gc
generazione, nel caso in cui gc
volessero rimuovere i pacchetti non più necessari.
Ma questo sviluppatore ha dimenticato che gc
è necessario lasciar perdere i pacchetti, ad esempio quando si consolidano tutti i pacchetti tramite l' --aggressive
opzione.
Allo stesso modo, git repack -d
vuole eliminare i pacchetti obsoleti e quindi deve chiudere anche tutti gli handle dei pacchetti.
Aggiornamento gennaio 2016
Questo dovrebbe essere risolto in Git 2.8 (marzo 2016) (e vedi Git 2.19, Q3 2018 di seguito)
Vedi commit d562102 , commit dcacb1b , commit df617b5 , commit 0898c96 (13 gennaio 2016) di Johannes Schindelin ( dscho
) .
(Unita da Junio C Hamano - gitster
- in commit 3c80940 , 26 gennaio 2016)
fetch
: rilasciare i file del pacchetto prima della raccolta dei rifiuti
Prima di auto-gc, dobbiamo assicurarci che i file del pacchetto vengano rilasciati nel caso in cui debbano essere reimballati e raccolti.
Molti codepath che eseguono " gc --auto
" prima di uscire mantengono i file pack mappati e lasciano aperti i descrittori dei file, il che non è amichevole con i sistemi che non possono rimuovere i file aperti.
Ora chiudono i pacchetti prima di farlo.
Ciò risolve il git-for-widows
problema 500 .
Guardando il test usato per validare quel nuovo approccio , una possibile soluzione alternativa (dato che Git 2.8 non è ancora uscito) sarebbe quella di aumentare artificialmente gc.autoPackLimit
.
git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
git 2.8.4 (giugno 2016) menziona il problema 755 che dovrebbe anche alleviare il problema ( commit 2db0641 ):
Assicurarsi che gli handle di file temporanei non siano ereditati dai processi figlio
In realtà, il git-for-windows
problema 500 menzionato sopra è stato risolto con Git 2.19, Q3 2018.
Vedi " Git - Scollegamento del file .idx
e .pack
errore (l'unico processo gestito da questo file è git.exe
) "