git rebase: "errore: impossibile stat 'file': autorizzazione negata"


343

Sto usando git e ho fatto un piccolo commit seguito da uno grande. Ho deciso di usare git rebaseper schiacciare i due commit insieme prima di spingerli. (Non l'ho mai fatto prima.)

Così ho fatto:

git rebase -i HEAD~2

Questo mi ha dato il mio editor, dove ho scelto di scegliere il commit precedente e di comprimere il successivo. Quando ho salvato, git ha detto:

errore: impossibile stat ' nomefile ': autorizzazione negata

Impossibile applicare sha1 per il commit successivo ... riga iniziale di testo per quel commit

Adesso:

  • Nessuno dei due viene visualizzato quando lo faccio git log.
  • git status mi dice che "Al momento non sono presente in nessuna filiale".
  • Un file è elencato come modificato e nell'indice e due file sono elencati come non tracciati. Il mio primo commit aveva solo un file (credo) e il mio secondo commit ne aveva una buona dozzina.

Quello che è successo!? Come lo aggiusto?


10
Per caso, stai usando git su Windows?
CB Bailey,

Sì. Eseguo i comandi in una finestra DOS.
Ryan Lundy,

2
Stai eseguendo un controllo antivirus? A volte i programmi di controllo antivirus di scarsa qualità causano problemi come questo.
Greg Hewgill

53
Ho avuto il problema con git checkout (quindi nessuna interruzione possibile come suggerito dalla risposta accettata) ma la chiusura di tutti i miei IDE mi ha lasciato passare. La seconda risposta dovrebbe essere quella accettata
plus-

1
@IanGrainger, la risposta a cui ti riferisci è stata pubblicata otto mesi dopo la risposta accettata. Devo andare in giro e visitare tutte le mie domande ogni pochi mesi per cambiare potenzialmente le risposte accettate su tutte? I pulsanti di voto sono lì per un motivo. Se la risposta più votata ti aiuta più della risposta accettata, allora usala. Chi ti sta fermando? Ma ho accettato la risposta che ho fatto perché mi ha aiutato, e sono io quello che ha posto la domanda.
Ryan Lundy,

Risposte:


195

Ho sempre visto questo errore su Windows e ciò che sembra significare è che qualcosa ha bloccato git dalla modifica di un file nel momento in cui ha provato ad applicare una patch.

Windows tende a dare ai processi un accesso esclusivo ai file quando non dovrebbe davvero essere necessario, in passato i controllori dei virus sono stati una fonte di sospetto ma non l'ho mai dimostrato in modo conclusivo.

Probabilmente la cosa più semplice da fare è interrompere e riprovare, sperando che non accada la prossima volta.

git rebase --abort

Puoi git applyprovare a usare e conoscere ciò che commit git stava effettivamente cercando di fare prima di fare un, git rebase --continuema in tutta onestà non lo consiglierei. La maggior parte delle volte che ho visto questo tentativo, c'è stata una possibilità migliore che anche che qualcosa venga accidentalmente perso o incasinato.


6
@Kyralessa: Hmmm, hai provato a riavviare? Se qualcosa blocca in modo persistente quel file, dopo un riavvio (o qualcosa di leggermente meno drastico che rilascia il file) dovresti essere in grado di git checkout -- previously-locked-fileeseguire il backup e l'esecuzione.
CB Bailey,

51
Bene, non sono ancora sicuro di cosa sia successo, ma come meglio posso dire, VS 2010 stava bloccando il file (strano perché era un file doc .xml). Process Explorer non ha trovato nulla che bloccasse quel file, ma dopo essere uscito da VS, sono stato in grado di utilizzare git checkoutper recuperare il file (in git statusesso è stato eliminato), e ora tutto è tornato com'era prima di provare a rebase / squash. Forse dovrei riprovare, anche se a questo punto mi sento un po 'nauseato.
Ryan Lundy,

3
Seguito, molte lune dopo: non ho più avuto questo problema. Il rifacimento ha funzionato bene, incluso anche il rifacimento interattivo. Deve essere stato un momentaneo errore di blocco dei file VS.
Ryan Lundy,

49
La chiusura di Visual Studio 2010 ha risolto il problema anche per me
Trev

4
Apparentemente Atom blocca anche i file. Il riavvio ha risolto il problema.
Augustin Bralley,

653

Prova a chiudere tutti i programmi con la cartella aperta, ad esempio editor, finestre di Esplora risorse, prompt dei comandi e programmi FTP. Questo risolve sempre il problema per me su Windows.


72
Stavo ottenendo lo stesso errore. Ho appena chiuso Visual Studio e tutto ha funzionato.
jacobsimeon,

6
Ho chiuso praticamente tutto quello che mi veniva in mente prima di ricordare il convertitore CSS WinLess LESS -> nascosto in background.
Michael Martin-Smucker,

6
Visual Studio ha bloccato un pacchetto nuget quando ho provato a unire. Chiudere VS ha funzionato per me.
CodeHxr,

7
La fonte più comune di questo errore, che ho visto su Windows, è Visual Studio che blocca i file. Come prescritto, chiudere VS prima di cambiare succursale, fusione, ecc.
longda

5
"Anch'io" rispondo per Atom. Sembra bloccare file e directory; chiudendolo si risolve il problema.
Aj

277

Chiudi il tuo IDE (VISUAL STUDIO / ATOM ecc.). Potrebbe funzionare


1
In IntelliJ, interrompere l'esecuzione del servizio Tomcat ha funzionato per me. Leggermente più semplice del riavvio di IDE.
Phil Carter,

Avevo anche una finestra Git Bash aperta - chiusura che ha funzionato per me.
Vince I

Qualsiasi IDE degno del suo sale non dovrebbe bloccare nulla in un repository ... pollice in alto !!
LightCC

Risolvi questo problema dopo aver effettuato il check-in in un ramo temporaneo utilizzando Atom su Windows 10. La chiusura e la riapertura di Atom hanno risolto il problema per me.
mickburkejnr,

24

Quando vedo questo sul mio computer, è peggio di un semplice "alcuni processi hanno il file aperto". La proprietà effettiva del file viene aumentata fino al punto in cui io (in esecuzione come amministratore) posso accedervi solo dopo il riavvio.

Più vicino posso dire, IIS è parte del problema. Se passo tra due rami principali che richiedono molti file da modificare, git eliminerà un file o una directory (di solito DLL) mentre IIS sta provando a fare qualcosa o un altro con esso. A questo punto, il processo IIS sovrascrive automaticamente il file sul disco con una versione che è bloccata e sembra essere di proprietà di nessuno.

L'arresto di IIS a questo punto non lo fa. La cosa migliore che ho scoperto di fare è riavviare e ricordarsi di interrompere IIS prima di cambiare in futuro tra i principali rami.

So che in realtà non risponde alla domanda, ma potrebbe essere utile per gli altri.


Ciao Mike ... stiamo riscontrando lo stesso identico problema, ma è venuto fuori dal nulla. Abbiamo utilizzato lo stesso processo su molti progetti con IIS in esecuzione e non abbiamo mai avuto problemi. Un giorno, però, inizia a succedere ... sconcertante e frustrante. Hai imparato di più da quando hai scritto questo?
Ethan Brown,

Grazie per l'intuizione Mike - nel mio caso il check-out di un vecchio ramo con un progetto ASP.NET MVC che aveva un URL di associazione diverso rispetto al ramo precedente ha causato a Visual Studio quindi IIS di bloccare alcuni file nel progetto. L'arresto dell'apppool appropriato in IIS ha rimosso il blocco.
raccolta fondi

IIS è stato il colpevole anche per me; quando questo si apre una rapida iisresetsembra rilasciare i blocchi dei file.
alexm,

Ho scoperto che la stessa cosa accade con OneDrive: cambiare i rami in un repository archiviato in OneDrive lo confonde davvero
CharlieB,

Questo è successo anche a me su win10, richiedendo il riavvio ma non ho testato la iisresetsoluzione.
qdread

17

Su Windows, può essere un processo TortoiseGIT che blocca quei file. Aprire Task Manager e terminare il processo TGitCache.exe .


2
Buono a sapersi, anche se nel mio caso non sto usando TortoiseGit; Uso solo la riga di comando.
Ryan Lundy,

13

Mi sono appena imbattuto in questo thread di risposte - questo errore è un tale errore fasullo. # Errore: impossibile stat 'reddit / app / views / links': autorizzazione negata

Questo è tutto ciò che ho - quando provo a fondermi. Ho letto alcune delle risposte e poi sono arrivato alla realizzazione - tutto quello che dovevo fare era chiudere il mio editor di codice che sembra essere Atom.

Una volta chiuso l'editor - ho eseguito di nuovo "git merge" e boom, ha funzionato.

Che errore inutile :(


Grazie! Non tutti i giorni vedrai la risposta "giusta" in fondo all'elenco. Consiglio di contrassegnare la risposta giusta. Invece di interrompere l'operazione corrente, ha senso risolvere il vero problema.
Nikhil Kuriakose,

12

se usi vscode, uccidi il terminale e aprine uno nuovo. altrimenti potrebbe chiudere anche il terminale


Era così, sembrava un blocco del processo o qualcosa del genere
Mike Upjohn,

10

Questo mi succede occasionalmente in Windows

errore: impossibile stat 'nomefile': autorizzazione negata

Molto spesso ho più istanze di bit bash aperte e una delle istanze di git bash si trova in una directory che non esiste nel ramo remoto da cui sto estraendo.

Chiudere tutte le istanze tranne git bash risolve il problema per me.


9

Se l'IDE che usi (nel caso in cui ne utilizzi uno) potrebbe anche essere stato di ostacolo. Questo è quello che mi è successo durante l'utilizzo di QtCreator.


Questo è stato il mio caso, usando PhpStorm. Il riavvio ha corretto l'errore.
Lancemonotone,

7

Utilizzando SourceTree in Win 10, risolto il problema chiudendo l'editor Atom.

Errore durante la riproduzione:

  1. Nel ramo B, crea un file md, usando Atom modificalo, salva e commetti.
  2. Passa al ramo A, abbassa i nuovi commit dal server.
  3. Prova a tornare indietro, Opps, dice "errore: impossibile stat 'file': autorizzazione negata".

6

Questo può accadere anche quando stai usando SublimeText e la finestra popup che ti chiede di acquistare il programma non è chiusa.


1
L'ho ottenuto anche con Atom semplicemente aprendo l'albero di progetto / file
Hal

1
Come @Hal, il mio problema era con Atom. Era perché una cartella in un ramo non era in un altro ramo. La chiusura di Atom lo risolverà, ma puoi anche comprimere l'albero del progetto (per nascondere la cartella) e anche quello funziona.
jsalwen,

6

Ciò accade spesso quando si hanno programmi / applicazioni di preelaborazione che guardano il progetto, come Prepros o Codekit. Inoltre, Atom e Sublime (e anche Notepad ++) possono causare ciò se un file nel progetto è attualmente in fase di modifica.

Il modo più semplice per aggirare il problema è chiudere tutto ciò che ha i file di progetto aperti, unire i rami e quindi riaprirli per aggiornarlo. Ciò eviterà anche eventuali problemi in cui il programma non è più a conoscenza di eventuali cambiamenti che sono avvenuti, costringendoti ad aggiornare i progetti a mano.


1
o uomo! Stavo correndo elm-live in background. Questo mi ha fatto risparmiare un sacco di mal di testa.
frostymarvelous,

6

Se stai eseguendo il webpack, spegnilo. Chiudi anche il tuo IDE. Dovrebbe funzionare bene dopo aver fatto quelle cose.


4

Ho avuto un problema simile. Ma è stato molto semplice da risolvere. Su un computer Windows, il mio esploratore di file aveva una cartella aperta che esisteva in un ramo ma non nell'altro che ho estratto. La chiusura di Esplora file ha risolto il problema.


4

Ho appena avuto questo sotto Win 7.

$ git stash pop errore: impossibile stat 'parentFolder / sottocartella': autorizzazione negata errore: impossibile stat 'parentFolder / sottocartella': autorizzazione negata

Diagnosi:

1> Sono andato nella sottocartella ed è lì e non sono riuscito a eliminarlo!

2> Usa "process explorer" -> Trova -> Trova handle e Dll -> inserisci il nome "sottocartella" e cerca.

Risultato: si è scoperto che XMLSpy ha aperto lì uno degli xml, chiudi XML Spy e prova di nuovo a fare pop, funziona ora.


4

Mi è successo su Windows mentre mi rifacevo all'interno del terminale integrato IntelliJ . Ho notato che avevo istanza client Git bash in esecuzione in parallelo.

Chiudere Git bash ha risolto il problema.


2

Il mio incontro con questo problema è stato causato dal mio editore, Intellij. Come parte dei suoi controlli di versione interni, aveva attraversato e bloccato tutti i file git nascosti. (Per vari motivi, non stavo usando il plugin git fornito con Intellij ...)

Così ho aperto una normale finestra DOS come amministratore, modificato nella directory ed eseguito

attrib -R /S

Ciò ha rimosso il blocco dei file e tutto ha funzionato dopo di ciò e ho potuto sincronizzare le mie modifiche utilizzando il client Windows GitHub.


2

Sono d'accordo con le risposte "Chiudi Visual Studio" sopra.

Tuttavia, un ulteriore passaggio che ho dovuto fare anche dopo aver chiuso Visual Studio è stato l' uccisione manuale del processo "devenv.exe" di Visual Studio in Esplora attività. Dopo averlo fatto sono stato di nuovo in grado di eseguire gitbash:

git pull

e l' errore " impossibile stat nomefile " è scomparso. È forse dovuto a un'estensione di Visual Studio che mantiene il processo aperto più a lungo anche dopo la chiusura.


2

Ho appena avuto questo problema. Il fatto è che se hai aperto il file che è stato rimosso \ sostituito dopo rebase (avevi un ramo che non ha più questo file), il sistema git corrompe. Così ho chiuso tutti i file aperti e poi ho provato a fare il checkout su qualche altro ramo


2

Una soluzione alternativa piuttosto che chiudere tutte le app che potrebbero bloccare la directory come dice quasi ogni altra risposta, sarebbe quella di utilizzare un'utilità che sbloccherà i file / la directory senza chiudere tutto. (Odio dover riavviare Visual Studio)

LockHunter è quello che uso: https://lockhunter.com/ Ci sono probabilmente anche altri là fuori, ma questo ha funzionato benissimo per me.


1

Stesso problema su Windows 10 64 bit, con Git Bash versione 2.9.0.windows1 Uso di Atom come editor.

Questo ha funzionato per me: ho aggiunto la cartella del software Git (per me, questo era C: \ Programmi \ Git) alle esclusioni per Windows Defender.

Dopo l'aggiunta dell'esclusione, ha git checkout 'file'funzionato bene.


1

Questo errore può anche essere causato dal fatto che i file sono ancora "bloccati" a causa di precedenti azioni git. Ha a che fare con il funzionamento del livello del filesystem di Windows. Una volta ho letto una bella spiegazione al riguardo, ma non ricordo dove.

In tal caso, tuttavia, poiché è fondamentalmente una condizione di gara, tutto ciò che devi fare è continuare il processo di rebase interrotto . Sfortunatamente questo mi succede sempre, quindi ho scritto questo piccolo aiuto pericoloso per continuare le mie rimesse:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

Se vuoi essere più sicuro, puoi usare git rebase --edit-todoper verificare se il prossimo commit da applicare è davvero quello che non è stato applicato prima. Utilizzare git clean -dnper assicurarsi di non eliminare file importanti.


1

Mi è successo quando ero in Windows, quando usavo Photoshop: quando ho salvato un'immagine e poi sono passato a un ramo (lasciando Photoshop con l'immagine aperta) ho ricevuto l'errore git. Chiudi l'immagine in Photoshop e riprova



1

L'uccisione del processo w3wp.exe relativo al repository ha risolto questo problema per me.


1

Nel mio caso, avevo un server dev webpack in esecuzione dietro.


0

Ho ricevuto questo errore quando il mio VS1013 si trovava su una filiale destinata a 8.1 e stavo provando a fare il checkout di una filiale 8.0. Avevo bisogno di tornare a VS e consentirlo a UpdateAll. Quindi ho potuto verificare il ramo 8.0 senza errori.


0

Ero anche su un computer Windows usando Git Shell quando ho riscontrato lo stesso errore.

Tuttavia, al momento avevo più terminali Git aperti.

Il primo terminale ha ricevuto l'errore che hai postato sopra e l'altro terminale aveva precedentemente eseguito il grunt servecomando terminal da yeoman (collegato sotto). Il secondo terminale doveva rimanere aperto per ospitare un'istanza del server locale.

La chiusura di tutte le finestre del terminale che eseguono processi in corso può far scomparire l'errore.

Almeno questo è ciò che ha funzionato per me. Dopo aver chiuso la seconda finestra del terminale, ho potuto facilmente controllare diversi rami e manipolare i file.

Grunt Serve Command - Yeoman.I / O
http://yeoman.io/learning/


0

Ho appena incontrato questo problema. Nessuna delle risposte qui mi è capitato di risolverlo.

Ho finito per essere pacchetti nuget che ho aggiunto su un ramo che, una volta tornato al ramo principale, sembrava non esistere. Una volta che ho fatto una fusione direbbe newtonsoft ... xml non ha potuto stat. Vorrei andare al file in questione e aprirlo, ma Windows ha restituito un errore dicendo che non riusciva a trovare il file (anche se lo stavo guardando bene)

Come ho risolto questo è stato fare clic con il pulsante destro del mouse su Elimina il file (che ha funzionato ma non sono riuscito ad aprirlo perché Windows non è riuscito a trovarlo ???) e provare a unire nuovamente e risolto il problema.

Molto strano.

Spero che questo aiuti qualcuno in seguito.


0

Sono uscito dal mio editor di testo che stava accedendo alle directory del progetto, quindi ho provato a unirmi al ramo principale e ha funzionato.

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.