Errore push Git: impossibile scollegare il vecchio (autorizzazione negata)


193

Nel server remoto ho un hook post-ricezione impostato per effettuare un checkout git del mio repository:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

Ma quando faccio un push dal mio computer locale al repository git nel server, ottengo i seguenti messaggi di errore:

remote: error: unable to unlink old '<file>' (Permission denied)

Questo appare più volte, un messaggio di errore per quasi tutti i file.

Comunque ho un file README.txt che posso cambiare usando git, ecco i suoi permessi:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

Ma altri file con esattamente lo stesso proprietario e le stesse autorizzazioni, mi danno quell'errore.

In un altro repository locale per un altro sito Web, ho i file con il mio nome utente della macchina locale come proprietario e quando spingo sul server remoto rispetta il proprietario dei file del server remoto e funziona come un incantesimo.

Ovviamente sembra un errore relativo alle autorizzazioni, ma non riesco a trovare un modo per risolverlo, qualche suggerimento?

Risposte:


336

Quando devi scollegare il file, devi avere l'autorizzazione 'w' per la directory, in cui si trova il file, non per il file ...


65
In effetti quello era il problema, l'ho risolto usando sudo chmod -R g+wle cartelle colpevoli.
rfc1484,

1
Grazie OMG. Era così infastidito dal pensare che i permessi fossero corretti sul file. Ha senso che gli aggiornamenti siano in realtà più simili alle mvazioni che alle semplici sovrascritture.
doublejosh

1
La modifica delle autorizzazioni dir ha funzionato per me (grazie!) Ma è strano perché ho potuto sovrascrivere manualmente i file in questione tramite sftp senza alcun problema. Strano che quando Git ha provato a fare lo stesso, non è stato possibile.
Jonathan Stark,

1
Inoltre, tieni presente che se il file è ancora aperto, verrà visualizzato anche questo errore. Ho avuto lo stesso errore ed è per questo che non sono stato in grado di inviare le mie modifiche.
Matias,

1
Il primo carattere del ls -ldisplay indica il tipo di file e non è correlato alle autorizzazioni. I restanti nove caratteri sono in tre set, ognuno dei quali rappresenta una classe di autorizzazioni come tre caratteri. Il primo set rappresenta la classe utente. Il secondo set rappresenta la classe di gruppo. Il terzo set rappresenta la classe degli altri. In g+wchmod concede al gruppo impostato (il gparametro) il permesso di scrivere (il wparametro)
rfc1484


42

Se stai usando qualche IDE molto probabilmente il problema è che il file è stato usato da qualche processo. Come se il tuo Tomcat stesse usando il file. Prova a identificare quel particolare processo e chiudilo. Questo dovrebbe risolvere il tuo problema.


13

Ho avuto lo stesso problema e nessuna delle soluzioni sopra ha funzionato per me. Ho cancellato la cartella offensiva. Poi:

git reset --hard

Eliminato tutti i file persistenti per ripulire lo stato git, quindi:

git pull

Alla fine ha funzionato.

NOTA: se la cartella era, ad esempio, una cartella pubblica con file di build, ricordarsi di ricostruire i file


Grazie, nient'altro funzionava neanche per me, eliminarlo sembrava essere l'unica opzione.
Math0ne,

Nel mio caso, quella cartella offensiva è .git
Tushar Kathuria,

13

Penso che il problema potrebbe riguardare la proprietà della cartella, quindi impostala sulla proprietà dell'utente corrente

sudo chown -R your_login_name /path/to/folder
Puoi trovare la soluzione [qui] [1]

8

FWIW - Ho avuto un problema simile e non sono sicuro che questo abbia alleviato (oltre la mod di autorizzazione): Chiusura di Eclipse che utilizzava il ramo con questo problema.


Allo stesso modo ho ricevuto questo errore quando un file CSV controllato dalla versione era aperto in Excel. La semplice chiusura di Excel lo ha risolto. Ciò è probabilmente vero anche per altre applicazioni su Windows e probabilmente dipende da come il programma contrassegna il file come aperto durante la modifica.
Carel,

4

Questa è una vecchia domanda, ma può aiutare gli utenti Mac.

Se stai copiando i file da Time Machine manualmente, invece di ripristinarli tramite Time Machine, aggiungerà ACL a tutto, il che può incasinare le tue autorizzazioni.

Ad esempio, la sezione di questo articolo che dice "Come risolvere i permessi dei file di Mac OS X" mostra che "tutti" hanno permessi personalizzati, il che rovina tutto:

Autorizzazioni errate, da http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

Devi rimuovere gli ACL da quelle directory / file. Questa risposta del Super User entra in essa, ma ecco il comando:

sudo chmod -RN .

Quindi puoi assicurarti che le tue directory e i tuoi file dispongano delle autorizzazioni appropriate. Uso 750per le directory e 644per i file.


3

Ottengo questo errore e altri strani errori git quando ho un server in esecuzione (in Intellij). Arrestare il server e riprovare il comando git lo risolve spesso per me.


3
git reset --hard

Ha funzionato per me


4
Potrebbe essere un po 'estremo poiché fa molto di più.
cdaddr,

3
sudo chown -R $USER:$USER .

Ha fatto il lavoro per me.


2

L'estrazione potrebbe aver creato un cambiamento locale.

Aggiungi il tuo file non tracciato:

git add.

Cambiamenti di scorta.

git stash

Elimina le modifiche locali.

git stash drop

Tirare con il permesso sudo

sudo git pull ramo remoto


si tratta solo del permesso dei file locali, non c'è niente a che fare con git. Ho appena eseguito il comando con sudo e ha funzionato, quindi non ho richiesto tutti questi passaggi
Raviramani,

Questa è stata l'unica cosa che ha funzionato per me.
Eric

2

Alcuni file sono protetti da scrittura che nemmeno git non può sovrascriverlo. Modificare l'autorizzazione della cartella per consentire la scrittura, ad esempio sudo chmod 775 foldername

E poi eseguire

git pull 

ancora


1

Ricorda anche di controllare l'autorizzazione della directory principale stessa!

Puoi trovare:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

e verrà visualizzato l'errore "permesso negato".

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.