git rebase: "error: no se puede stat 'archivo': permiso denegado"

342

Estoy usando git, e hice un pequeño commit seguido de uno grande. Decidí usar git rebasepara aplastar los dos commits juntos antes de empujarlos. (Nunca he hecho esto antes.)

Así que lo hice:

git rebase -i HEAD~2

Esto me dio mi editor, donde elegí elegir el commit anterior y aplastar el posterior. Cuando salvé, git dijo:

error: no puede stat ' nombre de archivo ': permiso denegado

No se pudo aplicar sha1 para una confirmación posterior ... línea de texto inicial para esa confirmación

Ahora:

  • Ninguno de los compromisos aparece cuando lo hago git log.
  • git status me dice que "Actualmente no estoy en ninguna rama".
  • Un archivo aparece como modificado y en el índice, y dos archivos aparecen como no rastreados. Mi primera confirmación tenía solo un archivo (creo), y mi segunda confirmación tenía una buena docena.

¿¡Que pasó!? ¿Cómo lo soluciono?

Ryan Lundy
fuente
10
¿Estás, por casualidad, usando git en windows?
CB Bailey
Si. Ejecuto los comandos en una ventana de DOS.
Ryan Lundy
2
¿Estás ejecutando un antivirus? A veces, los programas de control de virus de baja calidad causan problemas como este.
Greg Hewgill
53
Tuve el problema con git checkout (por lo que no es posible abortar según lo sugerido por la respuesta aceptada) pero al cerrar todos mis IDE me dejaron pasar. La segunda respuesta debería ser la aceptada
más el
1
@IanGrainger, la respuesta a la que te refieres fue publicada ocho meses después de la respuesta aceptada. ¿Debo dar una vuelta y visitar todas mis preguntas cada pocos meses para cambiar potencialmente las respuestas aceptadas en todas ellas? Los botones de votación están ahí por una razón. Si la respuesta más votada le ayuda más que la respuesta aceptada, úsela. ¿Quién te detiene? Pero acepté la respuesta que hice porque me ayudó, y yo fui quien hizo la pregunta.
Ryan Lundy

Respuestas:

195

Solo he visto este error en Windows y lo que parece significar es que algo bloqueó a git para modificar un archivo en el momento en que intentó aplicar un parche.

Windows tiende a dar a los procesos acceso exclusivo a los archivos cuando realmente no debería ser necesario, en el pasado, los verificadores de virus han sido una fuente de sospecha, pero nunca he demostrado esto de manera concluyente.

Probablemente la cosa más fácil de hacer es abortar e intentar nuevamente, esperando que no suceda la próxima vez.

git rebase --abort

Puede intentar usar git applyy conocer lo que commit git realmente estaba tratando de hacer antes de hacerlo, git rebase --continuepero honestamente, no recomendaría esto. La mayoría de las veces que he visto esto intentado, ha habido una posibilidad mejor de lo normal de que algo se pierda o se arruine accidentalmente.

CB Bailey
fuente
66
@ Kyralessa: Hmmm, ¿has intentado reiniciar? Si algo bloquea ese archivo de manera persistente, luego de un reinicio (o algo un poco menos drástico que libera el archivo), debería poder git checkout -- previously-locked-filey volver a estar en funcionamiento.
CB Bailey
51
Bueno, todavía no estoy seguro de qué sucedió exactamente, pero lo mejor que puedo decir es que VS 2010 estaba bloqueando el archivo (extraño porque era un archivo .xml doc). Process Explorer no encontró nada que bloqueara ese archivo, pero después de que salí de VS, pude usar git checkoutpara recuperar el archivo ( git statusse eliminó), y ahora todo está de vuelta como estaba antes de intentar volver a modificar / aplastar. Quizás debería intentarlo de nuevo, aunque en este punto me siento un poco mareado.
Ryan Lundy
3
Seguimiento, muchas lunas después: no he tenido este problema nuevamente. La reformulación ha funcionado bien, incluso el rebase interactivo. Debe haber sido una falla momentánea de bloqueo de archivos VS.
Ryan Lundy
49
El cierre de Visual Studio 2010 también lo arregló para mí
Trev
44
Atom aparentemente también bloquea archivos. El reinicio lo arregló.
Augustin Bralley
653

Intente cerrar cualquier programa que tenga la carpeta abierta, como editores, ventanas del explorador, mensajes de comando y programas FTP. Esto siempre me soluciona el problema en Windows.

Cameron Wright
fuente
72
Estaba recibiendo el mismo error. Acabo de cerrar Visual Studio y todo funcionó.
jacobsimeon
66
Cerré casi todo lo que podía pensar antes de recordar el convertidor WinLess LESS -> CSS escondido en el fondo.
Michael Martin-Smucker
66
Visual Studio mantuvo un bloqueo en un paquete nuget cuando intenté fusionarme. Cerrar VS funcionó para mí.
CodeHxr
77
La fuente más común de este error, que he visto en Windows, es Visual Studio bloqueando los archivos. Según lo prescrito, cierre VS antes de cambiar de sucursal, fusionar, etc.
longda
55
La respuesta "yo también" para Atom. Parece bloquear archivos y directorios; cerrándolo soluciona el problema.
ajm
277

Simplemente cierre su IDE (VISUAL STUDIO / ATOM, etc.). Podría funcionar

ManJan
fuente
1
En IntelliJ, detener el funcionamiento del servicio Tomcat funcionó para mí. Un poco más fácil que reiniciar IDE.
Phil Carter
También tenía una ventana de Git Bash abierta, cierre que funcionó para mí.
Vince I
Cualquier IDE que valga la pena no debería estar bloqueando nada en un repositorio ... ¡¡¡ aprobado!
LightCC
funciona en código vs
Muhammed Moussa
Golpee este problema después de ingresar a una sucursal temporal usando Atom en Windows 10. Cerrar y volver a abrir Atom resolvió el problema por mí.
mickburkejnr
24

Cuando veo esto en mi máquina, es peor que un simple "algún proceso tiene el archivo abierto". La propiedad real del archivo se eleva hasta el punto en que yo (ejecutándome como administrador) solo puedo acceder a él después de reiniciar.

Lo más cerca que puedo decir, IIS es parte del problema. Si cambio entre dos ramas principales que requieren una gran cantidad de archivos para modificar, git eliminará un archivo o directorio (generalmente DLL) mientras IIS intenta hacer algo u otro con él. En este punto, el proceso de IIS sobrescribe automáticamente el archivo en el disco con una versión que está bloqueada y parece no ser propiedad de nadie.

Detener IIS en este punto no lo hace. Lo mejor que he descubierto es reiniciar y recordar detener IIS antes de cambiar en las sucursales principales en el futuro.

Sé que eso realmente no responde la pregunta, pero podría ser útil para otros.

Mike Ruhlin
fuente
Hola, Mike ... estamos teniendo exactamente el mismo problema, pero salió de la nada. Hemos estado utilizando el mismo proceso en muchos proyectos con IIS ejecutándose, y nunca tuvimos un problema. Sin embargo, un día comienza a suceder ... desconcertante y frustrante. ¿Has aprendido algo más desde que escribiste esto?
Ethan Brown
Gracias por la información, Mike: en mi caso, verificando una rama vieja con un proyecto ASP.NET MVC que tenía una URL de enlace diferente a la rama anterior causó que Visual Studio y luego IIS mantuvieran un bloqueo en algunos archivos en el proyecto. Al detener el grupo de aplicaciones apropiado en IIS, se eliminó el bloqueo.
fundead
IIS también fue el culpable para mí; cuando esto aparece un rápido iisresetparece liberar los bloqueos de archivo.
alexm
Descubrí que lo mismo sucede con OneDrive: cambiar ramas en un repositorio almacenado en OneDrive realmente lo confunde
CharlieB
Esto también me sucedió en win10, que requiere reiniciar pero no probé la iisresetsolución.
qdread
17

En Windows, puede ser un proceso TortoiseGIT que bloquea esos archivos. Abra el administrador de tareas y finalice el proceso TGitCache.exe .

romanlv
fuente
2
Es bueno saberlo, aunque en mi caso no estoy usando TortoiseGit; Solo uso la línea de comando.
Ryan Lundy
13

Me topé con este hilo de respuestas: este error es un error falso. # Error: no se puede stat 'reddit / app / views / links': permiso denegado

Eso es todo lo que tengo, cuando trato de fusionarme. Leí algunas de las respuestas y luego me di cuenta: todo lo que tenía que hacer era cerrar mi editor de código, que resulta ser Atom.

Una vez que cerré el editor, volví a ejecutar "git merge" y boom, funcionó.

Qué error sin sentido :(

soy Batman
fuente
¡Gracias! No todos los días verá la respuesta "correcta" en la lista. Recomiendo que se marque la respuesta correcta. En lugar de abortar la operación actual, tiene sentido resolver el problema real.
Nikhil Kuriakose
12

si usa vscode, elimine el terminal y abra uno nuevo. de lo contrario tal vez también cierre la terminal

Muhammed Moussa
fuente
Esto fue todo, parecía un proceso bloqueado o algo así
Mike Upjohn
10

Esto me sucede ocasionalmente en Windows

error: no puede stat 'nombre de archivo': permiso denegado

Muy a menudo tengo varias instancias de bit bash abiertas, y una de las instancias de git bash está en un directorio que no existe en la rama remota de la que estoy sacando.

Cerrar todas las instancias de git bash menos una me resuelve el problema.

Ninja crujiente
fuente
9

Si el IDE que usa (en caso de que use uno) también podría haberse interpuesto. Eso es lo que me pasó cuando usé QtCreator.

rgngl
fuente
Este fue el caso conmigo, usando PhpStorm. Reiniciarlo solucionó el error.
lancemonotone
7

Usando SourceTree en Win 10, solucionó el problema cerrando el editor Atom.

Error de reproducción:

  1. En la rama B, cree un archivo md, usando Atom, edítelo, guárdelo y confirme.
  2. Cambie a la rama A, extraiga nuevas confirmaciones del servidor.
  3. Intente Cambiar de nuevo, Opps, dice "error: no se puede 'archivo' de estadísticas: permiso denegado".
attolee
fuente
6

Esto también puede suceder cuando usa SublimeText y la ventana emergente que le pide que compre el programa no está cerrada.

ahnbizcad
fuente
1
También lo conseguí con Atom con solo abrir el árbol del proyecto / archivo
Hal
1
Al igual que @Hal, mi problema fue con Atom. Fue porque una carpeta en una rama no estaba en otra rama. Cerrar Atom lo solucionará, pero también puede contraer el árbol del proyecto (para ocultar la carpeta), y eso también funciona.
jsalwen
6

Esto sucede a menudo cuando tiene aplicaciones / software de preprocesamiento que miran el proyecto, como Prepros o Codekit. Además, Atom y Sublime (e incluso Notepad ++) pueden hacer que esto suceda si un archivo del proyecto se está editando actualmente.

La forma más fácil de solucionar el problema es cerrar todo lo que tenga abiertos los archivos del proyecto, fusionar sus ramas y luego volver a abrirlos para actualizarlo. Esto también evitará cualquier problema en el que el programa ya no esté al tanto de los cambios que han sucedido, lo que le obligará a actualizar los proyectos a mano.

Steven Ventimiglia
fuente
1
oh hombre! Estaba ejecutando elm-live en segundo plano. Esto me ahorró un montón de dolor de cabeza.
frostymarvelous
6

Si está ejecutando webpack, apáguelo. Cierra tu IDE también. Debería funcionar bien después de hacer esas cosas.

KennethDale1
fuente
4

Tuve un problema similar. Pero fue muy simple de resolver. En una máquina con Windows, mi explorador de archivos tenía una carpeta abierta que existía en una rama pero no en la otra que verifiqué. Al cerrar el Explorador de archivos se resolvió el problema.

mmmdearte
fuente
4

Acabo de tener esto en Win 7.

$ git stash pop error: no puede stat 'parentFolder / subfolder': Permiso denegado error: no puede stat 'parentFolder / subfolder': Permiso denegado

Diagnóstico:

1> ¡Fui a la subcarpeta y está allí y no pude eliminarla!

2> Utilice "explorador de procesos" -> Buscar -> Buscar identificadores y Dlls -> coloque el nombre de "subcarpeta" allí y busque.

Resultado: Resulta que XMLSpy ha abierto uno de los xml allí, cierra XML Spy e intenta stash pop nuevamente, está funcionando ahora.

Gob00st
fuente
4

Me pasó en Windows mientras rebase dentro del terminal integrado IntelliJ . Me di cuenta de que tenía Git bash instancia de cliente ejecutándose en paralelo.

Cerrar Git bash resolvió el problema.

Louis
fuente
2

Mi encuentro con este problema fue causado por mi editor, Intellij. Como parte de sus controles internos de versión, había revisado y bloqueado todos los archivos git ocultos. (Por varias razones, no estaba usando el complemento git que viene con Intellij ...)

Entonces abrí una ventana normal de DOS como Administrador, cambié al directorio y ejecuté

attrib -R /S

Eso eliminó el bloqueo en los archivos y todo funcionó después de eso y pude sincronizar mis cambios usando el cliente de Windows GitHub.

Perry Tew
fuente
2

Estoy de acuerdo con las respuestas anteriores "Cerrar Visual Studio".

Sin embargo, un paso adicional que tuve que hacer incluso después de cerrar Visual Studio fue eliminar manualmente el proceso de Visual Studio "devenv.exe" en el Explorador de tareas. Después de hacer esto, pude volver a ejecutar en gitbash:

git pull

y desapareció el error " no se puede generar el nombre del archivo ". Quizás se deba a una extensión de Visual Studio que mantiene el proceso abierto por más tiempo incluso después del cierre.

ladygargar
fuente
2

Acabo de tener este problema. La cuestión es que si había abierto el archivo, que se eliminó \ reemplazó después de un rebase (tenía una rama que ya no tiene este archivo), el sistema git se corrompe. Así que cerré todos los archivos abiertos y luego intenté pagar en alguna otra rama

BlondinkaBrain
fuente
2

Una solución alternativa en lugar de cerrar todas las aplicaciones que podrían estar bloqueando el directorio, como dice casi cualquier otra respuesta, sería usar una utilidad que desbloqueará los archivos / directorio sin cerrar todo. (Odio tener que reiniciar Visual Studio)

LockHunter es el que uso: https://lockhunter.com/ Probablemente también haya otros, pero este me ha funcionado muy bien.

HotN
fuente
1

Mismo problema en Windows 10 64 Bit, ejecutando Git Bash versión 2.9.0.windows1 Usando Atom como mi editor.

Esto funcionó para mí: agregué la carpeta del software Git (para mí, esto era C: \ Archivos de programa \ Git) a las exclusiones para Windows Defender.

Después de que se agregó la exclusión, git checkout 'file'funcionó bien.

Paul Spaven
fuente
1

Este error también puede ser causado por el hecho de que los archivos todavía están "bloqueados" debido a acciones anteriores de git. Tiene que ver con cómo funciona la capa del sistema de archivos de Windows. Una vez leí una buena explicación sobre esto, pero no recuerdo dónde.

Sin embargo, en ese caso, dado que es básicamente una condición de carrera, todo lo que tiene que hacer es continuar con su proceso de rebase interrumpido . Desafortunadamente, esto me sucede todo el tiempo, así que escribí este pequeño ayudante peligroso para mantener mis rebases:

#!/bin/sh

set -e

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

Si desea estar más seguro, puede git rebase --edit-todoverificar si la próxima confirmación que se aplicará es realmente la que no se aplicó antes. Úselo git clean -dnpara asegurarse de no eliminar ningún archivo importante.

raphinesse
fuente
1

Me pasó cuando estaba en Windows, cuando usaba Photoshop: cuando guardé una imagen y luego cambié a una rama (dejando Photoshop con la imagen abierta) recibí el error git. Cierre la imagen en Photoshop y vuelva a intentar

pscheit
fuente
1

Matar el proceso w3wp.exe relacionado con el repositorio me arregló esto.

Ric
fuente
1

En mi caso, tenía un servidor de desarrollo webpack ejecutándose detrás.

Charith
fuente
0

Recibí este error cuando mi VS1013 estaba en una sucursal destinada a 8.1 y estaba tratando de pagar una sucursal de 8.0. Necesitaba volver a VS y permitir que se actualizara todo. Entonces podría pagar la rama 8.0 sin error.

Aleksandr Gembinski
fuente
0

También estaba en una máquina con Windows usando Git Shell cuando encontré el mismo error.

Sin embargo, en ese momento tenía múltiples terminales Git abiertas.

El primer terminal recibió el error que publicó anteriormente y el otro terminal había ejecutado previamente el grunt servecomando de terminal de yeoman (vinculado a continuación). El segundo terminal necesitaba permanecer abierto para alojar una instancia de servidor local.

Cerrar todas las ventanas de terminal que ejecutan procesos en curso puede hacer que el error desaparezca.

Al menos eso fue lo que funcionó para mí. Después de cerrar la segunda ventana de terminal, pude ver fácilmente diferentes ramas y manipular archivos.

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

Shawesome
fuente
0

Acabo de encontrarme con este problema. Ninguna de las respuestas aquí me resolvió esto.

Terminé siendo paquetes nuget que agregué en una rama que, una vez que volví a la rama maestra, parecía no existir. Una vez que hice una fusión, diría que newtonsoft ... xml no podía stat. Iría al archivo en cuestión y lo abriría, pero Windows arrojó un error diciendo que no puede encontrar el archivo (aunque lo estaba mirando directamente)

Lo que resolví fue hacer clic con el botón derecho en eliminar el archivo (que funcionó pero no pude abrirlo porque Windows no pudo encontrarlo) e intenté fusionarlo nuevamente y resolvió el problema.

Muy extraño.

Espero que esto ayude a alguien más tarde.

El novato
fuente
0

Salí de mi editor de texto que estaba accediendo a los directorios del proyecto, luego intenté fusionarme con la rama maestra y funcionó.

PudparK
fuente