stackoverflow - git rebase: "error: no se puede mostrar el ''archivo'': Permiso denegado"
git rebase tutorial (29)
Estoy usando git, e hice un pequeño commit seguido de uno grande. Decidí usar git rebase
para aplastar los dos compromisos antes de presionarlos. (Nunca he hecho esto antes.)
Así que lo hice:
git rebase -i HEAD~2
Esto me dio mi editor, donde elegí elegir el compromiso anterior y aplastar el último. Cuando guardé, git dijo:
error: no puede ser '' nombre de archivo '': permiso denegado
No se pudo aplicar sha1 para la confirmación posterior ... línea inicial de texto para esa confirmación
Ahora:
- Ninguno de los dos aparece cuando hago
git log
. -
git status
me dice que estoy "actualmente no en ninguna rama". - Un archivo se muestra como modificado y en el índice, y dos archivos se muestran como sin seguimiento. 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 arreglo?
Acabo de tener este problema. El problema es que, si había abierto un archivo, se eliminó / reemplazó después de una rebase (tenía una rama que ya no tiene este archivo), el sistema git está dañado. Así que cerré todos los archivos abiertos y luego intenté verificar en otra rama
Acabo de tener esto bajo Win 7.
$ git stash pop error: must stat ''parentFolder / subfolder'': Permiso denegado error: must stat ''parentFolder / subfolder'': Permiso denegado
Diagnóstico:
1> Fui a la subcarpeta y está ahí y no pude borrarlo.
2> Use "explorador de procesos" -> Buscar -> Buscar controladores y Dlls -> ponga el nombre de "subcarpeta" allí y busque.
Resultado: Resulta que XMLSpy ha abierto uno de los xml allí, cierra XML Spy y vuelve a intentar ocultarlo, está funcionando ahora.
Cuando veo esto en mi máquina, es peor que solo "un proceso tiene el archivo abierto". La propiedad real del archivo se incrementa hasta el punto en que yo (ejecutando como administrador) solo puedo acceder a él después de reiniciar.
Lo más cercano que puedo decir, IIS es parte del problema. Si cambio entre dos ramas principales que requieren la modificación de muchos archivos, git eliminará un archivo o directorio (generalmente DLL) mientras IIS está tratando de 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 el IIS antes de cambiar a través de las principales sucursales en el futuro.
Sé que realmente no responde la pregunta, pero podría ser útil para otros.
El 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 agregar la exclusión, git checkout ''file''
funcionó bien.
El mismo problema pero usando SourceTree (o cualquier otro cliente git). Estoy agregando mi respuesta ya que ninguna de las respuestas corresponde a mi caso.
Cambiar la rama de "desarrollar" a "principal" cambia los archivos y subcarpetas reales de su carpeta local. Puede suceder que una carpeta que no existía en el "maestro" no se borre completamente y Windows cree que solo perdió sus derechos de acceso (incluso si usted es el administrador). Cuando se fusiona de main para desarrollar, el cliente git intenta acceder a la carpeta. Sin derechos de acceso, devuelve el error mencionado.
- Cambiar de una rama a la más reciente puede solucionar el problema, y luego volver a maestro (vuelva a verificar si las carpetas / archivos se eliminan localmente).
- ¡Cerrar el cliente y / o su editor no soluciona el problema!
- Reiniciar ayuda pero es una pérdida de tiempo (IMHO)
En Windows, puede ser un proceso TortoiseGIT que bloquea esos archivos. Abra el administrador de tareas y finalice el proceso TGitCache.exe .
En mi caso, el archivo es un script shell (archivo *.sh
) destinado a implementar nuestro proyecto en un servidor de desarrollo local, para mis desarrolladores.
El script de shell debe funcionar de forma coherente y puede actualizarse; así que lo rastreé en el mismo proyecto Git que el código que el script debe implementar.
El script de shell ejecuta un ejecutable, y luego permite que ese ejecutable se ejecute; por lo que el script todavía se está ejecutando; así que mi shell todavía tiene el script abierto; por lo que está bloqueado.
Ctrl+C
para eliminar el script (por lo que ahora mi servidor de desarrollo local ya no es accesible), ahora puedo realizar el checkout libremente.
En mi caso, tenía un servidor webpack dev corriendo detrás.
Este error también puede deberse al hecho de que los archivos aún 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, ya que es básicamente una condición de carrera, todo lo que tiene que hacer es continuar su proceso de rebase interrumpido . Desafortunadamente, esto me pasa todo el tiempo, así que escribí a 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 usar git rebase --edit-todo
para verificar si la próxima confirmación que se aplicará es realmente la que no se aplicó anteriormente. Use git clean -dn
para asegurarse de no eliminar ningún archivo importante.
Esto me pasa en Windows ocasionalmente.
error: no puede ser ''nombre de archivo'': permiso denegado
La mayoría de las veces tengo varias instancias de bit bash abierto, y una de las instancias de git bash está en un directorio que no existe en la rama remota de la que estoy tirando.
Cerrar todas las instancias de git bash menos una resuelve el problema para mí.
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 se está editando un archivo en el proyecto.
La forma más fácil de solucionar el problema es cerrar todo lo que tenga abiertos los archivos del proyecto, fusionar las sucursales y, a continuación, volver a abrirlas para actualizarlas. Esto también evitará cualquier problema en el que el programa ya no tenga conocimiento de los cambios que se hayan producido, lo que obligará a actualizar el proyecto (s) a mano.
Esto también puede suceder cuando utiliza SublimeText y la ventana emergente que le pide que compre el programa no está cerrada.
Estoy de acuerdo con las respuestas anteriores de "Cerrar Visual Studio".
Sin embargo, un paso adicional que tuve que hacer, incluso después de cerrar Visual Studio, fue matar manualmente el proceso de Visual Studio "devenv.exe" en el Explorador de tareas. Después de haber hecho esto, pude volver a correr en gitbash:
git pull
y el error "no se puede mostrar el nombre del archivo " desapareció. Tal vez se deba a una extensión de Visual Studio que mantiene el proceso abierto durante más tiempo incluso después del cierre.
Intente cerrar cualquier programa que tenga la carpeta abierta, como editores, ventanas de explorador, indicaciones de comando y programas de FTP. Esto siempre soluciona el problema para mí en Windows.
Matar el proceso w3wp.exe relacionado con el repositorio solucionó esto para mí.
Me acabo de encontrar con este problema. Ninguna de las respuestas aquí sucedió para resolver esto por mí.
Terminé siendo paquetes nuget que agregué a una rama que, una vez que volví a la rama maestra, parecía no existir. Una vez que hiciera una fusión, diría que newtonsoft ... xml no pudo stat. Iría al archivo en cuestión y lo abriría, pero Windows me devolvió un error diciendo que no puede encontrar el archivo (aunque lo estaba mirando)
¿Cómo resolví esto? Haga clic derecho para eliminar el archivo (que funcionó pero no pude abrirlo porque Windows no pudo encontrarlo?) E intente fusionar de nuevo y resolvió el problema.
Muy extraño.
Espero que esto ayude a alguien más tarde.
Me pasó cuando estaba en Windows, cuando utilizaba photoshop: cuando guardé una imagen y luego cambié a una rama (dejando photoshop con la imagen abierta) recibí el error de git. Cerrar la imagen en photoshop y volver a intentarlo.
Me topé con este hilo de respuestas: este error es un error tan falso. # Error: no se puede mostrar ''reddit / app / views / links'': permiso denegado
Eso es todo lo que tengo, cuando intento fusionarme. Leí algunas de las respuestas y luego me di cuenta de que todo lo que tenía que hacer era cerrar el editor de código, que es Atom.
Una vez que cerré el editor, ejecuté "git merge" de nuevo y boom, funcionó.
Qué error inútil :(
Mi encuentro con este problema fue causado por mi editor, Intellij. Como parte de los controles internos de la versión, había revisado y bloqueado todos los archivos ocultos de git. (Por varias razones, no estaba usando el complemento git que viene con Intellij ...)
Así que abrí una ventana normal de dos como administrador, cambié al directorio y ejecuté
attrib -R /S
Eso eliminó el bloqueo de los archivos y todo funcionó después de eso y pude sincronizar mis cambios utilizando el cliente de Windows de GitHub.
Recibí este error cuando mi VS1013 estaba en una rama orientada a 8.1 y estaba intentando verificar una rama 8.0. Necesitaba volver a VS y permitir que UpdateAll. Entonces pude comprobar la rama 8.0 sin error.
Resolvimos los problemas de permisos haciendo clic derecho en sh.exe en Archivos de programa y configurando "Ejecutar como administrador" en la pestaña Seguridad.
Salí de mi editor de texto que estaba accediendo a los directorios del proyecto, luego intenté fusionarme con la rama maestra y funcionó.
Si el IDE que usa (en caso de que use uno) también podría haber estado en el camino. Eso es lo que me pasó al usar QtCreator.
Si tiene la herramienta de fusión Meld abierta, ciérrela. Bloquea el archivo sobrescrito.
Simplemente cierre su IDE (VISUAL STUDIO / ATOM, etc.). Podría funcionar
Solo he visto este error en Windows y lo que parece significar es que algo impidió que git modificara un archivo en el momento en que intentaba 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 comprobadores de virus han sido una fuente de sospecha, pero nunca lo he demostrado de manera concluyente.
Probablemente, lo más fácil es abortar e intentar nuevamente, esperando que no suceda la próxima vez.
git rebase --abort
Puede intentar usar git apply
y conocer qué cometa git estaba tratando de hacer antes de hacer un git rebase --continue
pero con toda honestidad no lo recomendaría. La mayoría de las veces que he visto este intento ha habido una mejor oportunidad de igualar que algo se pierda o estropee accidentalmente.
También estaba en una máquina Windows usando Git Shell cuando encontré el mismo error.
Sin embargo, en ese momento tenía múltiples terminales Git abiertos.
La primera terminal recibió el error sobre el que publicó más arriba y la otra terminal ejecutó previamente el comando de la terminal de grunt serve
desde yeoman (enlace a continuación). El segundo terminal necesitaba permanecer abierto para alojar una instancia de servidor local.
Si se cierran todas las ventanas de terminal que ejecutan procesos en curso, el error puede desaparecer.
Al menos eso fue lo que funcionó para mí. Después de cerrar la segunda ventana de terminal, pude comprobar fácilmente diferentes ramas y manipular archivos.
Grunt Serve Command - Yeoman.I / O
http://yeoman.io/learning/
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é. Cerrar el explorador de archivos resolvió el problema.
Usando SourceTree en Win 10, solucionó el problema cerrando el editor Atom.
Error de reproducción:
- En la rama B, crea un archivo md, con Atom edítalo, guárdalo y confirma.
- Cambie a la rama A, despliegue nuevas confirmaciones del servidor.
- Intente volver a conmutar, Opps, dice "error: no se puede mostrar el ''archivo'': Permiso denegado".