Advertencia de Git Checkout: no se pueden desvincular archivos, permiso denegado

109

Soy consciente de que hay problemas similares con git relacionados con la advertencia de 'no se puede desvincular', pero no he podido usarlos.

La principal diferencia es que esto sucedió cuando no he estado tratando con submódulos de ninguna manera (nunca antes los había tratado). Creé una rama llamada 'actualización', eliminé mis archivos de marco antiguos y los copié en los nuevos. Usé git add -A, luego comprometí todo. Cuando traté de verificar la rama troncal, respondió con los siguientes errores:

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

... etc. Hay cientos de ellos.

Al principio pensé que esto era simplemente un problema de permisos, por lo que agregué permisos de escritura de grupo a todo el directorio de requisitos de forma recursiva, pero no hubo cambios.

Editar: Como se sugiere en una respuesta a continuación, intenté hacer lo mismo pero con todo lo demás cerrado. No tuve más suerte que antes.

Este problema es particularmente debilitante ya que no puedo moverme al tronco para volver al desarrollo normal.

Dechado
fuente
posible duplicado del error de inserción
Ese chico brasileño
9
Lo resolví con un simplesudo chown -R username directory
Stephen Corwin

Respuestas:

84

Normalmente veo ese tipo de error cuando hay un proceso que no libera el identificador de esos archivos.

Asegúrese de que no se esté ejecutando nada y luego intente realizar el pago nuevamente.

Nota: también puede estar relacionado con la forma en que se ha instalado Git (en Windows, UAC puede generar un problema si msysgit está instalado en C:\Programo C:\Program Files, consulte " msysgit - sh.exe - fork: Permiso denegado - Vista 64 bit " y el comentario 2 de número 437 )

Nota: como se ilustra a continuación , otra causa común del problema es la cuestión de los derechos en el directorio (propietario incorrecto), no necesariamente en el archivo que no se puede desvincular.

VonC
fuente
1
Estoy en Ubuntu, para aclarar eso. Y, desafortunadamente, solo estoy en este navegador web y en mi consola, que tiene una pestaña abierta en el directorio relevante (y dos abiertas en otro lugar).
Paragon
3
@Paragon: incluso en Unix, puedes manejar problemas. De lo contrario, esto debería ser un problema de permiso de algún tipo. Sin embargo, debería poder forzar el pago. git checkout -f master
VonC
2
+1 en mi caso fue la carpeta compartida con una VM activa que prohibió el descarte de archivos en git en el sistema host. Me volvió loco, ¡así que gracias por la pista!
Jook
1
Mismo problema. Ejecutando Process Explorer> Ctrl + F> <nombre de archivo> - mostrará el proceso, que mantiene este archivo abierto.
setevoy
1
GitExtensions mostró este error al intentar recuperar todo ... También tenía abierto GitKraken. Una vez que cerré GitKraken, la búsqueda funcionó sin errores.
mkaj
99

En mi primer encuentro con este error, mi usuario tenía derechos para "escribir" en el archivo pero no en el directorio que lo contenía. Verifique los permisos del directorio que contiene el archivo.

Elijah Lynn
fuente
95
Oh, Dios mío, muy gracioso, me encontré con esta respuesta hoy y luego me di cuenta de que era la mía. No obstante, ¡funcionó de nuevo!
Elijah Lynn
Ok, me pasó en Windows 10, voy a la carpeta principal del proyecto. y agregue PARA TODOS LOS USUARIOS POSIBLES, todos los permisos. Entonces, para el sistema, el administrador, los usuarios, todas las posibilidades. Aplicar cambios. Y parece funcionar, de alguna manera tal vez con la actualización de Windows 10, incluso si no creamos un nuevo usuario, somos amenazados como el nuevo, sin permisos. Por ejemplo, tengo un nombre extraño S-1-15-32 ..... No es el nombre de inicio de sesión que tengo cuando desbloqueamos nuestra computadora portátil.
PsychedelicSubstance
30

"Desvincular" significa esencialmente "eliminar archivo" en este caso.

Este error no es causado por git en sí. Debería tener errores similares al eliminar esos archivos manualmente, en una línea de comandos o en un explorador de archivos.

rtconner
fuente
18
En mi primer encuentro con este error, mi usuario tenía derechos para "escribir" en el archivo, pero el directorio que lo contenía no.
Elijah Lynn
3
@Elijah: ¡Gracias! Eso es lo que fue para mí.
Jesse Lee
4
En mi caso, encontré que el archivo en cuestión estaba bloqueado por otra aplicación. Al cerrar la aplicación, se liberó el archivo y se permitió que continuara la compra.
Simon Tewsi
25

No tiene el permiso de acceso, tal vez porque no es el propietario.

Arregle cambiando el propietario a usted mismo:

sudo chown -R your_login_name /path/to/folder
Vince Yuan
fuente
2
En mi máquina de desarrollo local, los archivos en cuestión habían sido creados originalmente por mi servidor apache local, por lo que eran propiedad del usuario de www-data. Una vez que los puse en mi propia cuenta, todo volvió a funcionar normalmente. "Permiso denegado" fue el problema real. El "incapaz de no gustar" era sólo una pista falsa.
Dale Anderson
23

Estaba teniendo el problema con un archivo default-settings.php en drupal 7. En este caso no pude borrarlo o revertirlo como dijo @rtconner. No tenía una aplicación ni nada que usara este archivo, y terminó siendo un error de permisos.

Lo agregué chmod 777 *a la carpeta y luego pude revertirlo sin problema.

Rob Erskine
fuente
3
Si bien es posible que no desee un 777en ninguna carpeta. Esto resolvió mi problema, pero lo cambié rápidamente a los valores predeterminados después de que se resolvió. ¡Gracias!
Bram
13

Puede cambiar los permisos de escritura para hacerlo.

sudo chmod -R ug+w . 

Este comando otorgará 'w'permisos a todas las carpetas del directorio actual.

Rajendra kumar Vankadari
fuente
6

Me encontré con este problema cada vez que ejecutaba "git repack" o "git gc" en mis máquinas OS X, incluso cuando ejecutaba git con privilegios de administrador, y finalmente lo resolví después de encontrar esta página: http://hints.macworld.com /comment.php?mode=view&cid=1734

La solución es abrir una terminal, ir a su repositorio de git, cd en la carpeta .git y luego hacer:

chflags -R nouchg *

Si ese fue el problema, después de eso, sus comandos git funcionarán normalmente.

Aprenda OpenGL ES
fuente
1
El enlace de macworld ya no es válido. He aquí un ref actualización: superuser.com/a/40754
Webb
5

Esto también puede ocurrir cuando:

  1. Ejecutó un proceso dentro de un contenedor Docker y:

  2. Algunos archivos fueron generados por ese proceso y:

  3. El destino de los archivos se monta como un volumen en el host de Docker y:

  4. Está ejecutando giten el host de Docker.


Si este es el caso, prepare los archivos que desea confirmar y ejecutar:

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

Los archivos que cumplan con los criterios anteriores tendrán el prefijo:

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

Son propiedad de rooty no se pueden escribir, lo cual no es bueno. Para arreglar esa ejecución:

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

Una solución más limpia probablemente sería usar la --useropción, vea esto para Docker y esto para Docker compose .

davetapley
fuente
4

Para aquellos que están usando Intellij , como dijo @rtconner, este problema no es causado por git. Dado que su IDE está bloqueado, un archivo (s), git no puede desvincularlo. Por lo tanto, debe cerrar su IDE y luego intentar fusionarlo (o lo que quiera) a través de la línea de comando.

Hesam
fuente
Eso fue todo. Sucedió con el desarrollo de Android, ya que AndroidStudio es Intellij.
Reinherd
2

En mi caso, era un carácter ":" en el nombre de una carpeta que evitaba que el repositorio de git se retirara en Windows.

simonC
fuente
2

en la terminal en mac acabo de hacer esto

sudo git checkout. (limpiar todo) a.

y entonces

sudo git pull origen

Jry
fuente
2

Tuve este error dentro de una máquina virtual (ejecutando Ubuntu), cuando intenté hacerlo git reset --hard.

La solución fue simplemente ejecutar git reset --harddesde la máquina host de OS X en su lugar.

Henrik N
fuente
1

Ninguna de las otras sugerencias funcionó para mí, pero esto sí:

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

0x1 albañil
fuente
1

En mi caso, mi directorio de Windows está en la carpeta de Dropbox. No es un problema específico de Git. Cuando se acaba de crear un archivo (en este caso, el archivo de bloqueo), Dropbox tarda otro segundo en realizar la sincronización. Durante ese tiempo, Dropbox usa el archivo y ningún programa de terceros (en este caso, Git) no puede eliminarlo.

Mi solución es salir de Dropbox y, por lo tanto, evitar la magia detrás de escena de la sincronización de archivos de Dropbox.

Vincent
fuente
0

He encontrado este error y está causado por un "propietario / grupo" incorrecto del archivo / carpeta . Debe buscar ayuda al administrador de su servidor para cambiar el "propietario / grupo" de este archivo / carpeta y volver a intentarlo usando "git pull" nuevamente. O si usted es un sudoer, simplemente sudo chown "su nombre de propietario / nombre de su grupo" y vuelva a intentar extraer su repositorio. Pruébalo, ¡me funciona al 100%!

Jeff Simons Decena
fuente
0

Asegúrese de que los procesos o subprocesos asociados no se estén ejecutando y realice la tarea final o fuerce el cierre según sea necesario.

Asegúrese de cambiar el permiso de propiedad.

Creative_Cimmons
fuente
0

En general, si esto sucede en Windows y está utilizando tortoisegit , es el caché de estado de tortoisegit . Mata ese proceso y será liberado.

WiseStrawberry
fuente
De hecho, puede deshabilitar la caché de estado de TortoiseGit por completo, y generalmente es algo que recomendaría. A menudo es la causa de muchos bloqueos de archivos inesperados y suele ser mucho más problemático de lo que vale la pena. Solo use git statusdesde la línea de comando en su lugar.
0

Solo tuve que cambiar de usuario de ubuntu a mi nombre de usuario real con el que primero hice las cosas. Eso lo arregló.

Bagazo
fuente
y ¿qué pasa con los usuarios de Windows?
Herr Nentu '27 de
El OP estaba en Ubuntu. No habría comentado sobre un hilo de Windows.
Marc
0

Resuelto para mí configurando mi cliente git (GitExtensions) para que siempre se ejecute en modo de administrador.

frodo2975
fuente
0

Tuve ese problema mientras usaba IntelliJ (14.1.3 Ultimate), quería revertir los cambios en algún archivo.

Resuelto cerrando Git Bashabierto en otra ventana - se IntelliJtrabajó otra prueba de reversión .

Eel Lee
fuente
0

Encontré este error y creo que el problema era que había 'ejecutado como administrador' cuando inicié Eclipse y creé los archivos, por lo tanto, eran propiedad de Admin (se notó al ejecutar 'ls -la' en la carpeta). Cuando más tarde intenté guardar los archivos, no me dejó ('no puedo desvincular archivos' y todo eso). Hacer un chmod en los archivos fue la solución para mí.

LConrad
fuente
0

Todo lo que necesita hacer es proporcionar permisos, ejecute el siguiente comando desde la raíz de su proyecto:

    chmod ug+w <directory path>
Hansa
fuente
0

Tuve el mismo problema, probé algunas alternativas como sugirieron otros.

Pero finalmente dar el permiso correcto a la carpeta .git resuelve los problemas.

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

En mi caso, el problema de permisos se resolvió estableciendo www-datacomo propietario:

chown -R www-data project_folder_name
Avag Sargsyan
fuente
0

Creo que se trata de su permiso de archivo:

sudo chmod 777 -R <your-git-folder>
Johnny Cage
fuente