Échec de la dissociation du fichier

169

J'essaye de faire un git pull et j'obtiens l'erreur suivante:

Échec de la dissociation du fichier 'lib / xxx.jar'. Dois-je réessayer? (o / n)

Peu importe si je sélectionne y ou n, il n'est pas possible d'arriver à un état où je peux tirer ou pousser.

Marko
la source
Avez-vous vérifié si vous disposez des droits d’écriture dans ce fichier?
Raphael Michel
1
exécutez le droit chmodet / ou chownsur ledit fichier.
Not_a_Golfer
Je devrais avoir les droits, sinon je le chown / chmod!
marko
4
duplication possible de Git. Dissocier le fichier Dois-je réessayer?
BuZZ-dEE

Réponses:

204

Cela signifie généralement qu'un processus utilise toujours ce fichier spécifique (il a toujours une poignée dessus)
(sous Windows, ProcessExplorerest bon pour suivre ce type de processus)

Essayez de fermer vos autres programmes et réessayez votre git pull.

Notez que vous avez une alternative avec la GIT_ASK_YESNOvariable .


Mise à jour janvier 2019:

Cela devrait être encore plus corrigé, avec Git 2.21 (Q1 2019), car " git gc" et " git repack" ne fermaient pas les fichiers de paquets ouverts qu'ils trouvaient inutiles avant de les supprimer, ce qui ne fonctionnait pas sur une plate-forme incapable de supprimer un fichier ouvert.
Cela a été corrigé.

Voir commit 5bdece0 (15 décembre 2018) par Johannes Schindelin ( dscho) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 5104f8f , 18 janvier 2019)

gc/ repack: libérez des packs si nécessaire

Sous Windows, les fichiers ne peuvent pas être supprimés ni renommés s'il existe encore des descripteurs détenus par un processus.
Pour y remédier, nous avons introduit la close_all_packs()fonction.

Auparavant, nous nous sommes assurés que les packs soient publiés juste avant l' git gcapparition, au cas oùgc souhaiteriez supprimer les packs dont vous n'avez plus besoin.

Mais ce développeur a oublié qu'il gcdoit également abandonner les packs, par exemple lors de la consolidation de tous les packs via le--aggressive option.

De même, git repack -dsouhaite supprimer les packs obsolètes et doit donc également fermer tous les descripteurs de pack.


Mise à jour janvier 2016

Cela devrait être corrigé dans Git 2.8 (mars 2016) (et voir Git 2.19, T3 2018 ci-dessous)

Voir commit d562102 , commit dcacb1b , commit df617b5 , commit 0898c96 (13 janvier 2016) par Johannes Schindelin ( dscho) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 3c80940 , 26 janvier 2016)

fetch: fichiers du pack de publication avant le ramassage des ordures

Avant l'auto-gc'ing, nous devons nous assurer que les fichiers du pack sont libérés au cas où ils auraient besoin d'être reconditionnés et récupérés.

De nombreux chemins de code qui exécutent " gc --auto" avant de quitter gardaient les fichiers de paquets mappés et leur laissaient les descripteurs de fichiers ouverts, ce qui n'était pas convivial pour les systèmes qui ne peuvent pas supprimer les fichiers ouverts.
Ils ferment maintenant les packs avant de le faire.

Cela résout le git-for-widowsproblème 500 .

En regardant le test utilisé pour valider cette nouvelle approche , une solution de contournement possible (puisque Git 2.8 n'est pas encore sorti) serait de déclencher artificiellement gc.autoPackLimit.

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

git 2.8.4 (juin 2016) mentionne le problème 755 qui devrait également atténuer le problème ( commit 2db0641 ):

Assurez-vous que les descripteurs de fichiers temporaires ne sont pas hérités par les processus enfants


En fait, le git-for-windowsproblème 500 mentionné ci-dessus est vraiment résolu avec Git 2.19, Q3 2018.
Voir « Git - Dissociation du fichier .idxet .packéchec (le seul descripteur de processus appartenant à ce fichier est git.exe) »

VonC
la source
5
Très probablement, une machine virtuelle Java est en cours d’exécution en utilisant ce fichier jar.
Thorbjørn Ravn Andersen
2
Dans mon cas, c'était Skype. J'avais précédemment transféré le fichier à d'autres et certains n'avaient pas encore accepté ou annulé.
Vivek Kodira
6
J'ai trouvé que l'explorateur Windows était le coupable. C'était probablement à cause des superpositions d'icônes de TortoiseGit ou de TGitCache. La fermeture de tous les dossiers ouverts a fait l'affaire, mais vous n'aurez peut-être besoin de fermer le dossier du projet que s'il est ouvert.
Allan Bogh
4
Dans mon cas, c'était VS2013 car il était lié à la solution ouverte.
BrotherOdin
2
Explorer.exe était mon problème - je n'ai pas TortoiseGit. J'ai tué explorer.exe à partir du Gestionnaire des tâches et en ai engendré un nouveau en utilisant CTRL-ALT-DELETE => Gestionnaire de tâches => Fichier => Exécuter une nouvelle tâche => "explorer.exe" (sans les guillemets)
joehanna
57

Ceci est une réponse spécifique à Windows, donc je suis conscient que cela ne vous concerne pas ... Je l'inclus juste pour le bénéfice des futurs chercheurs.

Dans mon cas, c'était parce que j'exécutais Git à partir d'une ligne de commande non élevée. "Exécuter en tant qu'administrateur" l'a corrigé pour moi.

NeilD
la source
4
J'ai rencontré ce problème sur Windows 7 lors d'un pull et git a fait un pack automatique. Il s'est plaint des fichiers "idx". J'ai ensuite ouvert une fenêtre de console en tant qu'administrateur et exécuté un git gc et il n'y avait pas de problème. C'est donc une bonne solution.
grahamesd
1
git gc l'a fait pour moi sur Windows 7. C'est arrivé parce que je faisais un git pull sur cmder en faisant un push sur WebStorm
Alessandro
2
Sensationnel. Merci NeilD. Il l'a corrigé pour moi aussi. Ce serait bien de porter un peu plus GIT sur Windows.
Martin Dobšík
Eh bien ... c'était nécessaire il y a 6 ans. Maintenant? Qui sait? ¯_ (ツ) _ / ¯
NeilD
30

Pour moi, c'était parce que Visual Studio essayait de recharger tous les fichiers modifiés à partir de l'extraction. Faites actualiser Visual Studio, puis exécutez git gc.

Paul Nikonowicz
la source
3
Similaire pour moi. Eclipse devait être fermée avant d'exécuter git gc.
alfoks
5

Sur Windows utilisant GitHub pour Windows, j'ai eu une erreur similaire dans le shell lors de l'exécution git gc:

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

Je l'ai résolu en fermant l'interface graphique de GitHub.

Garrett Smith
la source
2

Essayez de redémarrer votre serveur Apache ou un autre serveur Web car il a peut-être verrouillé certains de vos fichiers.

Arvind Bhardwaj
la source
2

Fermé Visual Studio et Rubymine et n'a plus eu l'erreur. L'un d'eux était le coupable.

Bikey
la source
2

Fermez votre IDE puis faites git pull. Ça va marcher.

Md. Naushad Alam
la source
1

J'ai aussi ce problème, mais j'ai découvert que c'était l'UltraEdit, car j'utilisais UE pour organiser et modifier mon espace de travail éclipse ~~

Peut-être parce que l'UE a un handle sur l'ancienne version d'un fichier spécifique, Git n'a pas pu le dissocier.

Après avoir fermé UltraEdit, le problème ne s'est plus jamais produit.

Ruobin Wang
la source
1

Cela a été causé dans mon cas par SimpLESS, le compilateur LESS. Vous devez le fermer dans la zone de notification.

Sébastien Thomas
la source
0

Le problème est que vous avez un programme qui gère ces fichiers. J'ai une suggestion que vous devriez utiliser le Unlocker pour trouver le programme qui le gère:

Unlocker

Envil
la source
0

Cela s'est produit sur Windows XP, à la fois avec le message bloqué dans une boucle et en pouvant être effacé en répondant.

L'occurrence bloquée dans une boucle a été effacée en fermant Git-GUI. (J'exécutais git merge -i dans un shell bash.)

Les autres événements se sont probablement produits en raison du grand nombre de fichiers dans mon référentiel. Cela s'est produit principalement avec les fichiers .cod, que j'exclus plus tard du contrôle de version. (J'ai une raison de les suivre initialement.) Je pense que la cause pourrait être liée à la vitesse à laquelle Git utilise des descripteurs de fichiers.

Je me demande si le problème de la capacité à être résolu en répondant est lié à Windows, comme deux affiches précédentes l'ont mentionné, et personne n'a dit avoir le problème avec d'autres systèmes d'exploitation.

Ivan
la source
0

J'avais PHPStorm ouvert, fermé et tout allait bien.

Tisch
la source
0

J'ai eu le même problème et j'ai fermé tous les programmes associés à partir du gestionnaire de tâches Windows. Cependant, cela ne fonctionnait toujours pas. La partie intéressante est que j'ai exécuté "Git rebase" au lieu de "Git pull" et cela a fonctionné!

Jeune Choung
la source
0

Aucune des réponses ci-dessus ne fonctionne pour moi, mais j'exécute la commande git gc avec l'option force, et cela a résolu mon cas.

'git gc --force'

[Windows 7, Exécuter en tant qu'administrateur => Invite de commandes]

Juha Hanka
la source
0

Essayez d'exécuter l'éditeur de ligne de commande en mode administratif et exécutez la commande. Cela aide et résout le problème. :)

Harshad Sindhav
la source
0

Dans mon cas, j'avais une ancienne méthode d'élagage des balises à l'origine du problème. Je l'ai résolu en désinstallant l'original:

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

puis en ajoutant ceci pour élaguer les branches supprimées sur le serveur:

git config --global fetch.pruneTags true
Ken
la source
0

J'ai rencontré la même erreur et je l'ai résolue en fermant l'éclipse et en tirant à nouveau pendant que le fichier était utilisé.

Extraterrestre
la source