Avviso di Git Checkout: impossibile scollegare i file, autorizzazione negata


109

Sono consapevole che ci sono problemi simili su git relativi all'avviso "impossibile scollegare", ma non sono stato in grado di utilizzarli.

La differenza principale è che questo è accaduto quando non ho avuto a che fare con i sottomoduli in alcun modo (non li ho mai trattati prima). Ho creato un ramo chiamato "upgrade", cancellato i miei vecchi file di framework e copiato in quelli nuovi. Ho usato git add -A, quindi ho eseguito il commit di tutto. Quando ho provato a controllare il ramo del tronco, ha risposto con i seguenti errori:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

...eccetera. Ce ne sono centinaia.

All'inizio ho pensato che fosse semplicemente un problema di autorizzazioni, quindi ho aggiunto i permessi di scrittura di gruppo all'intera directory dei requisiti in modo ricorsivo, ma non sono state apportate modifiche.

Modifica: come suggerito in una risposta di seguito, ho tentato di fare la stessa cosa ma con tutto il resto chiuso. Non ho avuto più fortuna di prima.

Questo problema è particolarmente debilitante in quanto non riesco a spostarmi sul tronco per tornare allo sviluppo normale.



9
L'ho risolto con un semplicesudo chown -R username directory
Stephen Corwin

Risposte:


84

Di solito vedo questo tipo di errore quando c'è un processo che non rilascia l'handle di quei file.

Assicurati che non sia in esecuzione nulla, quindi riprova a eseguire il pagamento.

Nota: può anche essere correlato al modo in cui è stato installato Git (su Windows, UAC può generare problemi se msysgit è installato in C:\Programo C:\Program Files, vedere " msysgit - sh.exe - fork: Permission denied - Vista 64 bit " e commento 2 di numero 437 )

Nota: come illustrato di seguito , un'altra causa comune del problema è il problema dei diritti sulla directory (proprietario sbagliato), non necessariamente sul file che non può essere scollegato.


1
Sono su Ubuntu, per chiarirlo. E sfortunatamente sono solo in questo browser web e nella mia console, che ha una scheda aperta nella directory pertinente (e due aperte un po 'altrove).
Paragon

3
@ Paragon: anche su Unix, puoi gestire i problemi. Altrimenti, questo dovrebbe essere un problema di autorizzazione di qualche tipo. Dovresti comunque essere in grado di forzare il checkout. git checkout -f master
VonC

2
+1 nel mio caso era la condivisione della cartella con una VM attiva che proibiva l'eliminazione dei file in git sul sistema host. Mi ha fatto impazzire, quindi grazie per il suggerimento!
Jook

1
Stesso problema. L'esecuzione di Process Explorer> Ctrl + F> <filename> - visualizzerà il processo, che manterrà questo file aperto.
setevoy

1
GitExtensions ha visualizzato questo errore durante il tentativo di recuperare tutto ... Ho anche aperto GitKraken. Una volta chiuso GitKraken, il recupero ha funzionato senza errori.
mkaj

99

Nel mio primo incontro con questo errore il mio utente aveva i diritti di "scrivere" nel file ma non nella directory che lo contiene. Controlla i permessi della directory contenente il file.


95
Oh mio, troppo divertente, mi sono imbattuto in questa risposta oggi e poi ho capito che era la mia! Tuttavia, ha funzionato di nuovo!
Elijah Lynn

Ok, mi è successo su Windows 10, vado alla cartella principale del progetto. e aggiungi PER TUTTI I POSSIBILI UTENTI, tutte le autorizzazioni. Quindi per sistema, amministratore, utenti, tutte le possibilità. Applica i chnages. E sembra funzionare, in qualche modo forse con l'aggiornamento di Windows 10, anche se non creiamo un nuovo utente, siamo minacciati come il nuovo, senza permessi. Ad esempio, ho un nome wird S-1-15-32 ..... Non il nome di accesso che ho quando sblocciamo il nostro laptop.
PsychedelicSubstance

30

"Scollega" significa essenzialmente "elimina file" in questo caso.

Questo errore non è causato da git stesso. Dovresti avere errori simili eliminando quei file manualmente, in una riga di comando o in un file explorer.


18
Nel mio primo incontro con questo errore, il mio utente aveva i diritti di "scrivere" sul file ma la directory che lo contiene no.
Elijah Lynn

3
@ Elijah: grazie! Questo è quello che è stato per me.
Jesse Lee,

4
Nel mio caso ho scoperto che il file in questione era bloccato da un'altra applicazione. La chiusura dell'applicazione ha liberato il file e ha consentito il proseguimento del checkout.
Simon Tewsi

25

Non hai il permesso di accesso, forse perché non sei il proprietario.

Risolvi cambiando il proprietario con te stesso:

sudo chown -R your_login_name /path/to/folder

2
Sulla mia macchina di sviluppo locale, i file in questione erano stati originariamente creati dal mio server Apache locale, quindi erano di proprietà dell'utente www-data. Dopo averli scaricati sul mio account, tutto ha funzionato di nuovo normalmente. "Permesso negato" era il vero problema. L '"incapace di smentire" era solo una falsa pista.
Dale Anderson

23

Avevo il problema con un file default-settings.php in drupal 7. In questo caso non ero in grado di eliminarlo o ripristinarlo proprio come ha detto @rtconner. Non avevo un'applicazione o altro che utilizzava questo file e alla fine si è trattato di un errore di autorizzazione.

L'ho aggiunto chmod 777 *alla cartella e poi sono riuscito a ripristinarlo senza problemi.


3
Anche se potresti non volerne uno 777in nessuna cartella. Questo ha risolto il mio problema, ma ho subito ripristinato l'impostazione predefinita dopo che è stato risolto. Grazie!
Bram

13

Puoi modificare i permessi di scrittura per farlo.

sudo chmod -R ug+w . 

Questo comando darà i 'w'permessi a tutte le cartelle nella directory corrente.


6

Mi sono imbattuto in questo problema ogni volta che eseguivo "git repack" o "git gc" sulle mie macchine OS X, anche quando eseguivo git con privilegi di amministratore, e alla fine l'ho risolto dopo aver trovato questa pagina: http://hints.macworld.com /comment.php?mode=view&cid=1734

La soluzione consiste nell'aprire un terminale, andare al repository git, cd nella cartella .git e quindi fare:

chflags -R nouchg *

Se questo era il problema, dopo di che i tuoi comandi git funzioneranno normalmente.


1
Il collegamento macworld non è più valido. Ecco un rif aggiornato: superuser.com/a/40754
webb

5

Ciò può verificarsi anche quando:

  1. Hai eseguito un processo all'interno di un container Docker e:

  2. Alcuni file sono stati generati da quel processo e:

  3. La destinazione dei file viene montata come volume sull'host Docker e:

  4. Stai eseguendo gitsull'host Docker.


Se questo è il caso, metti in scena i file che desideri impegnare ed eseguire:

git diff --name-only --cached | xargs ls -l 

I file che soddisfano i criteri di cui sopra avranno il prefisso:

-rw-r--r-- 1 root root ...

Sono di proprietà roote non scrivibili, il che non va bene. Per correggere quella corsa:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Una soluzione più pulita sarebbe probabilmente quella di utilizzare l' --useropzione, vedere questo per Docker e questo per Docker compose .


4

A coloro che utilizzano Intellij , come ha detto @rtconner, questo problema non è causato da git. Poiché il tuo IDE è bloccato, git non può scollegarlo. Quindi, devi chiudere il tuo IDE e quindi provare a unirlo (o quello che preferisci) tramite la riga di comando.


Questo è tutto. È successo con lo sviluppo Android, poiché AndroidStudio è Intellij.
Reinherd

2

Nel mio caso era un carattere ":" nel nome di una cartella che impediva al repository git di effettuare il checkout su Windows.


2

sul terminale su Mac faccio solo questo

sudo git checkout. (per ripulire tutto)

e poi

sudo git pull origin


2

Ho avuto questo errore all'interno di una macchina virtuale (con Ubuntu in esecuzione), quando ho provato a farlo git reset --hard.

La correzione consisteva semplicemente nell'eseguire invece git reset --harddalla macchina host OS X.


1

Nessuno degli altri suggerimenti ha funzionato per me, ma questo ha funzionato:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

Nel mio caso, la mia directory di Windows si trova nella cartella Dropbox. Non è un problema specifico di Git. Quando un file (in questo caso, il file di blocco) è stato appena creato, Dropbox impiega un altro secondo per eseguire la sincronizzazione. Durante questo periodo, il file è in uso da Dropbox e qualsiasi programma di terze parti (in questo caso, Git) non può eliminare il file.

La mia soluzione è uscire da Dropbox e quindi evitare la magia dietro le quinte della sincronizzazione dei file di Dropbox.


0

Ho riscontrato questo errore ed è causato da un "proprietario / gruppo" errato del file / cartella . È necessario richiedere assistenza all'amministratore del server per modificare il "proprietario / gruppo" di questo file / cartella e riprovare a utilizzare "git pull" di nuovo. Oppure, se sei un sudoer, sudo chown "il nome del tuo proprietario / nome del tuo gruppo" e riprova ad estrarre il tuo repository. Provalo, funziona al 100% per me!


0

Assicurarsi che tutti i processi o thread associati non siano in esecuzione ed eseguire l'operazione di fine o forzare la chiusura secondo necessità.

Assicurati di modificare l'autorizzazione di proprietà.


0

In generale, se questo accade in Windows e stai usando tortoisegit , è la cache di stato di tortoisegit . Uccidi quel processo e sarà liberato.


Puoi effettivamente disabilitare completamente la cache di stato di TortoiseGit, ed è generalmente qualcosa che consiglierei. È spesso la causa di molti blocchi di file imprevisti e tende a creare molti più problemi di quanto ne valga la pena. Usa invece git statusdalla riga di comando.

0

Dovevo solo cambiare utente da Ubuntu al mio vero nome utente con cui avevo fatto le prime cose. Questo l'ha risolto.


e per quanto riguarda gli utenti di Windows?
Herr Nentu '27

L'OP era su Ubuntu. Non avrei commentato un thread di Windows.
Marc

0

Risolto per me impostando il mio client git (GitExtensions) per essere eseguito sempre in modalità amministratore.


0

Ho avuto questo problema durante l'utilizzo IntelliJ(14.1.3 Ultimate), volevo annullare le modifiche in alcuni file.

Risolto chiudendo Git Bashaperto in un'altra finestra - un altro processo di ripristino ha IntelliJfunzionato.


0

Ho riscontrato questo errore e penso che il problema fosse che avevo "eseguito come amministratore" quando ho avviato Eclipse e ho creato i file, quindi erano di proprietà di Admin (notato eseguendo "ls -la" sulla cartella). Quando in seguito ho provato a riporre i file, non me lo sono permesso ("impossibile scollegare i file" e tutto il resto). Fare un chmod sui file è stata la soluzione per me.



0

Tutto quello che devi fare è fornire le autorizzazioni, eseguire il comando seguente dalla radice del tuo progetto:

    chmod ug+w <directory path>

0

Ho avuto lo stesso problema, ho provato poche alternative come altri suggerivano.

Ma finalmente dare il permesso corretto alla cartella .git risolve i problemi.

sudo chown -R "${USER:-$(id -un)}" .git

0

Nel mio caso il problema dei permessi è stato risolto impostando www-datacome proprietario:

chown -R www-data project_folder_name

0

Penso che riguardi il tuo permesso di file:

sudo chmod 777 -R <your-git-folder>
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.