Error al desvincular el archivo

169

Estoy tratando de hacer un git pull y aparece el siguiente error:

Error al desvincular el archivo 'lib / xxx.jar'. ¿Debería intentarlo de nuevo? (s / n)

No importa si selecciono yn, no es posible llegar a un estado en el que pueda tirar o empujar.

marko
fuente
¿Verificó si tiene los derechos para escribir en ese archivo?
Raphael Michel
1
ejecutar a la derecha chmody / o chownen dicho archivo.
Not_a_Golfer
Debería tener los derechos, de lo contrario, ¡lo reconoceré / cambiaré!
marko

Respuestas:

204

Eso generalmente significa que un proceso todavía está usando ese archivo específico (todavía tiene un identificador)
(en Windows, ProcessExploreres bueno para rastrear ese tipo de proceso)

Intente cerrar sus otros programas e intente nuevamente su git pull.

Tenga en cuenta que tiene una alternativa con la GIT_ASK_YESNOvariable .


Actualización de enero de 2019:

Eso debería solucionarse aún más, con Git 2.21 (Q1 2019), ya que " git gc" y " git repack" no cerraron los archivos abiertos que encontraron innecesarios antes de eliminarlos, que no funcionaban en una plataforma incapaz de eliminar un archivo abierto.
Esto ha sido corregido.

Ver commit 5bdece0 (15 dic 2018) por Johannes Schindelin ( dscho) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 5104f8f , 18 ene 2019)

gc/ repack: liberar paquetes cuando sea necesario

En Windows, los archivos no se pueden eliminar ni cambiar de nombre si todavía hay un identificador en manos de un proceso.
Para remediar eso, presentamos la close_all_packs()función.

Anteriormente, nos aseguramos de que los paquetes se liberen justo antes de que git gcse generen, en caso de que gcquiera eliminar los paquetes que ya no son necesarios.

Pero este desarrollador olvidó que él gcmismo también debe soltar los paquetes, por ejemplo, al consolidar todos los paquetes a través de la --aggressiveopción.

Del mismo modo, git repack -ddesea eliminar paquetes obsoletos y, por lo tanto, también debe cerrar todos los identificadores de paquetes.


Actualización enero 2016

Eso debería arreglarse en Git 2.8 (marzo de 2016) (y ver Git 2.19, Q3 2018 a continuación)

Ver commit d562102 , commit dcacb1b , commit df617b5 , commit 0898c96 (13 de enero de 2016) por Johannes Schindelin ( dscho) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 3c80940 , 26 de enero de 2016)

fetch: liberar archivos de paquete antes de la recolección de basura

Antes de auto-gc'ing, debemos asegurarnos de que los archivos del paquete se liberen en caso de que necesiten ser reempaquetados y recolectados.

Muchas rutas de código que se ejecutan " gc --auto" antes de salir mantuvieron los archivos de paquete asignados y dejaron abiertos los descriptores de archivo, lo que no era amigable para los sistemas que no pueden eliminar archivos que están abiertos.
Ahora cierran los paquetes antes de hacerlo.

Eso soluciona el git-for-widowsproblema 500 .

Mirando la prueba utilizada para validar ese nuevo enfoque , una posible solución (ya que Git 2.8 aún no está disponible) sería plantear artificialmente gc.autoPackLimit.

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

git 2.8.4 (junio de 2016) menciona el problema 755 que también debería aliviar el problema ( commit 2db0641 ):

Asegúrese de que los procesos secundarios no hereden los identificadores de archivos temporales


En realidad, el git-for-windowsproblema 500 mencionado anteriormente está realmente solucionado con Git 2.19, Q3 2018.
Consulte " Git: desvinculación del archivo .idxy .packfalló (el único identificador de propiedad del proceso para este archivo es git.exe) "

VonC
fuente
55
Lo más probable es que haya una JVM ejecutándose usando ese archivo jar.
Thorbjørn Ravn Andersen
2
En mi caso fue Skype. Anteriormente había transferido el archivo a otros y algunos aún no habían aceptado o cancelado.
Vivek Kodira
66
Encontré que el Explorador de Windows es el culpable. Lo más probable es que se deba a las superposiciones de iconos de TortoiseGit o TGitCache. El cierre de todas las carpetas abiertas hizo el truco, pero es posible que solo necesite cerrar la carpeta del proyecto si está abierto.
Allan Bogh
44
En mi caso, era VS2013, ya que estaba vinculado a la solución abierta.
BrotherOdin
2
Explorer.exe fue mi problema, no tengo TortoiseGit. Maté explorer.exe desde el Administrador de tareas y engendré uno nuevo usando CTRL-ALT-DELETE => Administrador de tareas => Archivo => Ejecutar nueva tarea => "explorer.exe" (sin las comillas)
joehanna
57

Esta es una respuesta específica de Windows, por lo que sé que no es relevante para usted ... Solo la incluyo para el beneficio de los futuros buscadores.

En mi caso, fue porque estaba ejecutando Git desde una línea de comando no elevada. "Ejecutar como administrador" me lo arregló.

NeilD
fuente
44
Llegué a este problema en Windows 7 cuando hice un pull y git hizo un paquete automático. Se quejó en los archivos "idx". Luego abrí una ventana de consola como administrador y ejecuté un git gc y no hubo ningún problema. Entonces esta es una buena solución.
grahamesd
1
git gc lo hizo por mí en Windows 7. Sucedió porque estaba haciendo un git pull en cmder mientras empujaba WebStorm
Alessandro
2
Guau. Gracias NeilD Me lo arregló también. Sería bueno portar GIT a Windows un poco más.
Martin Dobšík
Bueno ... se necesitaba hace 6 años. ¿Ahora? ¿Quién sabe? ¯_ (ツ) _ / ¯
NeilD
30

Para mí, fue porque Visual Studio estaba tratando de volver a cargar todos los archivos modificados desde la extracción. Haga que Visual Studio actualice y luego corra git gc.

Paul Nikonowicz
fuente
3
Similar para mi. Eclipse necesitaba estar cerrado antes de ejecutar git gc.
alfoks
5

En Windows usando GitHub para Windows, recibí un error similar en el shell cuando ejecuto git gc:

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

Lo resolví cerrando la GUI de GitHub.

Garrett Smith
fuente
2

Intente reiniciar Apache u otro servidor web, ya que puede haber bloqueado algunos de sus archivos.

Arvind Bhardwaj
fuente
2

Cerré Visual Studio y Rubymine y no volví a recibir el error. Uno de ellos fue el culpable.

Bikey
fuente
2

Cierra tu IDE y luego hazlo git pull. Funcionará.

MD Naushad Alam
fuente
1

También tengo este problema, pero descubrí que era el UltraEdit en el camino, ya que usé UE para organizar y editar mi espacio de trabajo de eclipse ~~

Tal vez porque el UE tiene un identificador en la versión anterior de un archivo específico, Git no pudo desvincularlo.

Después de cerrar UltraEdit, el problema nunca volvió a ocurrir.

Ruobin Wang
fuente
1

Esto fue causado en mi caso por SimpLESS, el compilador LESS. Tienes que cerrarlo en la bandeja del sistema.

Sebastian Thomas
fuente
0

El problema es porque tienes algún programa que maneja estos archivos. Tengo una sugerencia de que debe usar el Desbloqueador para encontrar el programa que lo maneja:

Desbloqueo

Envil
fuente
0

Me ha sucedido esto en Windows XP, tanto con el mensaje atrapado en un bucle como para poder borrarlo respondiendo.

La ocurrencia atascada en un bucle se eliminó cerrando la Git-GUI. (Estaba ejecutando git merge -i en un shell bash).

Las otras ocurrencias posiblemente ocurrieron debido a la gran cantidad de archivos en mi repositorio. Sucedió principalmente con archivos .cod, que luego excluyo del control de versiones. (Tengo una razón para rastrearlos inicialmente). Creo que la causa podría estar relacionada con la velocidad a la que Git usa identificadores de archivos.

Me pregunto si el problema de poder ser resuelto respondiendo está relacionado con Windows, ya que dos pósters anteriores han mencionado Windows, y nadie ha dicho que tengan el problema con otros sistemas operativos.

Ivan
fuente
0

Tenía PHPStorm abierto, cerrado y todo estaba bien.

Tisch
fuente
0

Tuve el mismo problema y cerré todos los programas relacionados desde el Administrador de tareas de Windows. Sin embargo, todavía no estaba funcionando. Lo interesante es que ejecuté "Git rebase" en lugar de "Git pull" y funcionó.

Choung en el joven
fuente
0

Ninguna de las respuestas anteriores no funciona para mí, pero ejecuté el comando git gc con la opción force, y resolvió mi caso.

'git gc --force'

[Windows 7, Ejecutar como administrador => Símbolo del sistema]

Juha Hanka
fuente
0

Intente ejecutar el editor de línea de comandos en modo administrativo y ejecute el comando. Ayuda y resuelve el problema. :)

Harshad Sindhav
fuente
0

En mi caso, tenía un método antiguo de poda de etiquetas que causaba el problema. Lo resolví desarmando el original:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

luego agrega esto para podar ramas eliminadas en el servidor:

git config --global fetch.pruneTags true
Conocido
fuente
0

Enfrenté el mismo error y lo resolví cerrando el eclipse y tirando de nuevo mientras se usaba el archivo.

Extraterrestre
fuente