Scollegamento del file non riuscito. Dovrei riprovare?


572

Sta succedendo qualcosa di sbagliato in uno dei file nel mio repository git locale. Quando sto cercando di cambiare il ramo dice:

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

Cosa potrebbe significare?


1
Dai un'occhiata a questa domanda
RDL

possibile duplicato di [errore Git rebase ottenuto 'scollegamento del file non riuscito'] ( stackoverflow.com/questions/3698369/… )
Josh Lee

la risposta fornita ha funzionato per te, se il visualizzatore di processi non funziona, riavvia e puoi rimuovere il file, inoltre puoi accettare la risposta se ha funzionato per te
dhaval

1
Verifica inoltre che il processo git disponga delle autorizzazioni di scrittura per quel file.
Bollettino

5
possibile duplicato di Unlink del file non riuscito
BartoszKP,

Risposte:


752

Ciò potrebbe significare che un altro programma sta usando il file, il che impedisce a git di "spostare" il file dentro o fuori dalla directory di lavoro quando si tenta di cambiare i rami.

Ho avuto questo accadere su Windows Vista dove eclipse è il programma "utilizza" il file. Il file potrebbe non essere effettivamente aperto in eclipse ma potrebbe essere stato aperto da un processo eseguito da eclipse.

In questo caso, prova a chiudere il file in tutte le applicazioni che potrebbero averlo utilizzato. Se il problema persiste, chiudere completamente tutte le applicazioni che potrebbero aver aperto il file.


53
Su Windows, utilizzare ProcessExplorer per trovare quale processo ha il file aperto.
Dave C

2
C'è un modo per scrivere uno script come "se questo file non può essere eliminato (ad esempio il file non esiste), basta saltare il file".
2x Max

14
Nel mio caso quello era Visual Studio e il suo plugin Git.
Michał Powaga,

8
Su Windows, se ProcessExplorer non è disponibile o non si desidera scaricarlo, è possibile eseguire (Windows + R) "resmon", accedere alla scheda CPU e cercare il nome del file nella casella di testo "Identificatori associati".
Raffaello,

6
Se lo usi GitKrakenpotresti ottenerlo se esegui comandi come rebase
mtpultz,

285

Ho avuto questo problema e risolto dal comando: git gc il comando sopra rimuove temp e file non necessari. (Netturbino.)


43
git pullavviato git gcautomaticamente e gc ha provato ad accedere ad alcuni file .pack e .inx. Questi erano bloccati dal processo "windows git", quel git pullcomando di proprietà . Esecuzione git gcmanuale e successiva: git pullrisolve davvero il problema.
Nikita,

4
Durante la corsa git gcho avuto di nuovo lo stesso errore quando gcera in corso
Prakash K

4
"L'esecuzione manuale di git gc e di - git pull risolve davvero il problema." Questo ha aiutato. Grazie Nikita.
sangam,

Anche questo mi ha aiutato. Ho eseguito questo su Windows con Git Bash
Ascalonian

Dopo aver avviato git pull ho riscontrato questo errore. Ho premuto CTRL + C per interrompere il pull, eseguire git gc e quindi git pull di nuovo, il problema era scomparso e nulla è stato interrotto interrompendo il pull.
Daniel Sp

84

questa soluzione da qui ha funzionato per me:

Questa è una risposta specifica per Windows, quindi sono consapevole che non è rilevante per te ... La sto solo includendo a beneficio dei futuri ricercatori.

Nel mio caso, è stato perché stavo eseguendo Git da una riga di comando non elevata. "Esegui come amministratore" risolto il problema per me.


2
Ha funzionato per me. Esegui VS come amministratore e quindi avviava il prompt dei comandi da VS
Sentinel il

3
I: digitato Ctrl+Cper terminare l'elenco molto lungo di file non collegabili; è uscito gitbash, il mio IDE e l'applicazione Windows GitHub; riavviato gitbash in modalità "Esegui come amministratore" elevata; e corse git gc --aggressive. Ci è voluto un po 'per completare, ma ce l'ho fatta senza errori.
Mark McClelland,

Se ritieni che questo sia un duplicato, dovresti contrassegnarlo come tale, non aggiungere una risposta che punti a un'altra risposta
Liam

2
@Liam Questa domanda è più vecchia ma questa risposta era solo sull'altra domanda, e non c'è una sola risposta a questa domanda che rende più difficile impostarne una come duplicata.
sepehr

Questo ha funzionato abbastanza bene per me. Nessuna delle risposte precedenti ha fatto. Molte grazie.
Roberto Rodriguez,

35

Ho riscontrato questo problema mentre facevo un git pull.

Ho provato git gce risolto il mio problema.


Ho riscontrato questo problema sul computer Windows e questa soluzione inizialmente non funzionava. Tuttavia, una volta eseguito questo comando dal prompt dei comandi dell'amministratore ha risolto il mio problema.
William W,

23

Nel mio caso non ci sono processi che toccano il file o la directory. Forse succede se il percorso è molto lungo, a causa di una restrizione del sistema operativo (windows). Prova ad abilitare il flag di supporto longpath nella configurazione globale di git come indicato di seguito:

git config --global core.longpaths true

oppure prova a impostare il flag di risposta sì / no se non è conflittuale per te

set GIT_ASK_YESNO=false

Se il percorso è troppo lungo, non ho trovato una soluzione di successo.


5
Non so perché, ma l'impostazione "git config --global core.longpaths true" mi è stata utile.
Massimo

GIT_ASK_YESNO, non riesco a trovare informazioni su questo. Da dove viene ?
Majkinetor,

vedere: stackoverflow.com/questions/3698369/… per esempio; Ora non funziona se funziona con le versioni recenti di git (2.9)
andhdo,

core.longpathscon ulteriore: reset --hard prune gc ha funzionato per me - ma ho dovuto chiudere AndroidStudio per non
sbagliare


10

Questo potrebbe essere utile per qualcuno; se tutto quanto sopra non ha funzionato per te, segui questi passaggi:

  1. Chiudi il tuo IDE (il mio era Eclipse, non sono sicuro se si applica a Intellij e altri) o a qualsiasi altra app che potrebbe usare git.

  2. Apri git dalla riga di comando (nel mio caso avevo git bash) ed esegui git gccome indicato da altri.

Questo ha fatto la magia per me.


Questa è l'unica risposta che mi ha aiutato nel mio caso, utilizzando Android Studio
0101100101

10

Mentre sto usando gitkraken e il prompt dei comandi, ho riscontrato lo stesso problema. E poi corro git gc comando risolto il mio problema. Quindi sono felice e voglio condividere alcuni dei punti che potrebbero essere utili.

Cosa git gcfarà?

git gc rimuovendo oggetti non raggiungibili che potrebbero essere stati creati da precedenti invocazioni di git add.

Quando correre git gc ?

Dal doc , gli utenti sono incoraggiati a eseguire questa attività su base regolare all'interno di ciascun repository per mantenere un buon utilizzo dello spazio su disco e buone prestazioni operative.

Come renderlo auto-configurabile?

Alcuni comandi git possono eseguire automaticamente git gc; vedere la bandiera --auto sotto per i dettagli. Se sai cosa stai facendo e tutto quello che vuoi è disabilitare questo comportamento in modo permanente senza ulteriori considerazioni, basta farlo

git config --global gc.auto 0

8

Nel mio caso (Win8.1, TortoiseGit in esecuzione), era il processo chiamato "cache di stato TortoiseSVN" a bloccare il file.

Ucciderlo mi ha permesso di eseguire "git gc" senza ulteriori problemi. Il processo sopra descritto viene avviato da TortoiseGit, quindi non è necessario riavviarlo manualmente.


7

Ho avuto questo tipo di problema su Windows 7 e si è scoperto che era dovuto a un git.exeprocesso orfano .

Per risolverlo, apri Task Manager e termina tutti i git.exeprocessi.

Poiché i gitcomandi sono di breve durata, normalmente non dovresti mai vederne nessuno git.exein Task Manager. Quando sono lì, di solito significa che qualcosa non va, e dovresti uccidere quei processi.


7

Ho riscontrato questo problema in Windows. Ho chiuso il mio IDE (Android Studio) e selezionato SÌ nella shell git. Ha funzionato.


5

Su Windows 8: ho eseguito git gc e diceva che git gc era già in esecuzione, ho eseguito git gc --force e il garbage collector ha funzionato.

Potrei quindi cambiare succursale e unirmi senza problemi, provare git gc --force.

Forse il processo di gc non si è fermato con grazia per una ragione o per l'altra.


È valido anche per Windows 10.
Oguzhan

4

Ho avuto questo problema con i .tmpfile nella /.git/objects/packcartella. Penso che qualcosa sia fallito durante un push o pull, quindi ho rimosso questi file temporanei e ripristinato HEAD al mio ultimo commit. Non sono sicuro se questo è consigliato ma ha funzionato per me. git count-objects -vMi ha anche dato un elenco dei .tmpfile che non appartenevano alla cartella del pacchetto.

Oppure per eliminare i messaggi y / n in Windows git open cmd.exeed eseguire:

SETX GIT_ASK_YESNO false

visto qui: https://twitter.com/petercamfield/status/494805475733807104


Dopo averlo eseguito git gc, git count-objects -vaiuta a identificare gli oggetti temporanei rimasti nella packcartella.
mista

4

Sono stato in grado di risolverlo aprendo Powershell come amministratore e da lì git checkout <branch_name>


Grazie @ bar-horing. Questo mi ha aiutato a identificarlo come un problema di autorizzazione. Una volta risolto il permesso di Windows per quella cartella, ha funzionato.
Kumar,

3

Ho affrontato lo stesso problema mentre facevo "git pull". Ho provato il comando di pulizia manuale git 'git gc' e ho risolto il mio problema.


4
Mentre questo è un tentativo di risposta, non aggiunge nulla che non sia già coperto da altre risposte (come questa ). Se stai cercando di confermare che questa soluzione funziona o desideri ringraziare l'autore di quella risposta, non pubblicare una risposta per farlo. Dopo aver acquisito maggiore reputazione , otterrai i privilegi sufficienti per migliorare le risposte che ti piacciono, che è il modo Stack Overflow di dire grazie.
Scott Weldon,


2

Dopo aver provato varie soluzioni finalmente git clean -fmi ha aiutato.

EDIT: ho riscontrato di nuovo il problema alcune volte: chiudere tutti i processi dipendenti da git sembra aiutare (come gitbash, Eclipse IDE, ecc.)


2

Come detto sopra, qualcos'altro contiene i file. La cosa è che il programma non sembra sospetto per noi. Stavo cercando di fare un pull git dalla console, mentre GitKraken era aperto. La chiusura di GitKraken ha risolto il problema.


2

Dopo l'esecuzione del comando

git rm -rf foo.bar

Vedo errore

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Perché un altro programma sta usando questo file . Ad esempio, quando eseguo un'applicazione Web Java nel modello di debug o eseguo un'applicazione Web sul server, non riesco a eliminare il file di registro. Disattiva il server delle applicazioni (o disattiva il processo di debug), riprova

git rm -rf foo.bar

Vedo che il file è stato eliminato.


1

Questa potrebbe essere una finestra separata di gitk in esecuzione per vedere un po 'di cronologia git.

Chiudi quella finestra per risolvere quel problema.


1

Ho riscontrato questo problema eseguendo git Bash ed Eclipse EGit contemporaneamente. Soluzione: chiudere Eclipse. Inoltre non farebbe male a correre git gccome menzionato @khilo.



1

Ho riscontrato questo problema in Windows, potresti voler eseguire git bash come amministratore e quindi eseguire i comandi desiderati, che hanno risolto il problema per me.


1

Se si sta sviluppando un'applicazione Web, un motivo comune è dimenticare di chiudere il server. Ad esempio, questo potrebbe essere un semplice processo Node.js o su Windows il tuo processo IIS è più discreto come processo in background.


1

Ho provato ogni singolo suggerimento in questa pagina e niente mi ha aiutato. Stavo facendo un git fetche un git reset --hard origin/developmentmi ha dato l'errore sgraziato. Non sono riuscito a ripristinare l'ultimo commit.

Ciò che ha aiutato è stato il controllo di un altro ramo e quindi il controllo del ramo precedente. Molto strano ma ha risolto il problema.


1

Se la chiusura dell'IDE e l'esecuzione di vari comandi git elencati qui non sono di aiuto, provare a uccidere manualmente tutti i processi Java in esecuzione. Probabilmente ho avuto un processo Java lasciato da eclissi che in qualche modo ha tenuto aperto un file di configurazione.


1

Se stai usando Docker e stai eseguendo Windows 10, potresti voler arrestare il / i contenitore / i in cui potrebbe essere in esecuzione il file. Per mostrare gli stati dei contenitori, esegui

docker ps -a

Per fermarli, corri semplicemente

docker stop <container name or container id>

Questo ha funzionato per me mentre eseguo i miei file locali usando un file .sh


1

Ha funzionato per me, provato su Windows:

Ferma il tuo server esecuzione del dall'IDE o chiudere l'IDE

Intellij / Ecllipse o qualsiasi altro, funzionerà.


0

Su Windows, ho visto questo errore su un git clonerepo (abbastanza grande). Chiuso SmartGit e messo in pausa il mio software di backup (CrashPlan), e poi ha funzionato. Non sono sicuro di quale dei 2 ha fatto il trucco, ma se uno dei due esegue, questo potrebbe farlo anche per te.


0

Ho avuto lo stesso problema mentre eseguivo un pull git e come detto sopra, era a causa di un programma che conteneva quei file e non permetteva un pull git. La chiusura del programma ha aiutato. Di solito, l'IDE (come Eclipse) da cui vengono archiviati i file lo manterrà in background. Chiudere lo stesso e ri-eseguire git pull ha risolto il problema per me.


0

Ho avuto lo stesso errore e la chiusura dell'app con il file aperto risolto. Sono stato in grado di tornare indietro e premere "Y"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.