Échec de la dissociation du fichier. Dois-je réessayer?

572

Quelque chose ne va pas avec l'un des fichiers de mon référentiel git local. Lorsque j'essaie de changer de branche, cela dit:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

Qu'est-ce que cela pourrait signifier?

Pol
la source
1
Consultez cette question
RDL
doublon possible de [Git rebase a obtenu l'erreur "dissociation du fichier a échoué"] ( stackoverflow.com/questions/3698369/… )
Josh Lee
la réponse donnée a-t-elle fonctionné pour vous, si la visionneuse de processus ne fonctionne pas, redémarrez et vous pouvez ensuite supprimer le fichier, vous pouvez également accepter la réponse si cela a fonctionné pour vous
dhaval
1
Vérifiez également que le processus git dispose d'autorisations d'écriture sur ce fichier.
boileau
5
échec
BartoszKP

Réponses:

752

Cela pourrait signifier qu'un autre programme utilise le fichier, ce qui empêche git de "déplacer" le fichier dans ou hors du répertoire de travail lorsque vous essayez de changer de branche.

J'ai eu cela sur Windows Vista où eclipse est le programme "utilisant" le fichier. Le fichier peut ne pas être réellement ouvert dans eclipse mais peut avoir été ouvert par un processus exécuté par eclipse.

Dans ce cas, essayez de fermer le fichier dans toutes les applications qui pourraient l'avoir utilisé. Si cela ne fonctionne pas, fermez complètement toutes les applications susceptibles d'avoir ouvert le fichier.

Mélisse
la source
53
Sous Windows, utilisez ProcessExplorer pour trouver quel processus a le fichier ouvert.
Dave C
2
Existe-t-il un moyen d'écrire un script comme "si ce fichier ne peut pas être supprimé (par exemple, le fichier n'existe tout simplement pas), il suffit de sauter le fichier".
2xMax
14
Dans mon cas, c'était Visual Studio et son plugin Git.
Michał Powaga
8
Sous Windows, si ProcessExplorer n'est pas disponible ou si vous ne souhaitez pas le télécharger, vous pouvez exécuter (Windows + R) "resmon", allez dans l'onglet CPU et recherchez le nom du fichier dans la zone de texte "Identificateurs associés".
Raphael
6
Si vous utilisez, GitKrakenvous pourriez obtenir ceci si vous exécutez des commandes comme un rebase
mtpultz
285

J'ai eu ce problème et l'ai résolu par la commande: git gc La commande ci-dessus supprime les fichiers temporaires et inutiles. (Éboueur.)

khilo
la source
43
git pulllancé git gcautomatiquement, et gc a tenté d'accéder à certains fichiers .pack et .inx. Celles-ci étaient détenues par le processus "windows git", qui possédait la git pullcommande. L'exécution git gcmanuelle et que - git pullrésout vraiment le problème.
Nikita
4
Pendant la course, git gcj'ai de nouveau la même erreur quand gcétait en cours
Prakash K
4
"Lancer git gc manuellement et than-git pull résout vraiment le problème." Cela a aidé. Merci Nikita.
sangam
Cela m'a également aidé. A exécuté cela sur Windows avec Git Bash
Ascalonian
Après avoir démarré le git pull, j'ai eu cette erreur. J'ai appuyé sur CTRL + C pour arrêter la traction, exécuter le git gc puis la git pull à nouveau, le problème avait disparu et rien n'était cassé en interrompant la traction.
daniel sp
84

cette solution d' ici a fonctionné pour moi:

Il s'agit d'une réponse spécifique à Windows, donc je suis conscient qu'elle n'est pas pertinente pour vous ... 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.

sepehr
la source
2
A travaillé pour moi. A exécuté VS en tant qu'administrateur, puis a lancé l'invite de commande de VS
Sentinel
3
I: tapé Ctrl+Cpour mettre fin à la très longue liste de fichiers non liés; quitté gitbash, mon IDE et l'application GitHub Windows; redémarré gitbash en mode élevé "Exécuter en tant qu'administrateur"; et a couru git gc --aggressive. Il a fallu un certain temps pour terminer, mais il a réussi sans erreur.
Mark McClelland du
Si vous pensez qu'il s'agit d'un doublon, vous devez le signaler comme tel, ne pas ajouter de réponse qui pointe vers une autre réponse
Liam
2
@Liam Cette question est plus ancienne mais cette réponse ne concernait que l'autre question, et il n'y a pas qu'une seule réponse à cette question, ce qui rend plus difficile d'en définir une en double.
sepehr
Cela a plutôt bien fonctionné pour moi. Aucune des réponses précédentes ne l'a fait. Merci beaucoup.
Roberto Rodriguez
35

J'ai rencontré ce problème en faisant un git pull.

J'ai essayé git gcet cela a résolu mon problème.

Rahul Chandran
la source
J'ai rencontré ce problème sur une machine Windows et cette solution n'a pas fonctionné initialement. Cependant, une fois que j'ai exécuté cette commande à partir d'une invite de commande d'administration, cela a résolu mon problème.
William W
23

Dans mon cas, aucun processus ne touche le fichier ou le répertoire. Peut-être que cela se produit si le chemin est très long, à cause d'une restriction du système d'exploitation (Windows). Essayez d'activer l'indicateur de support longpath dans la configuration globale de git comme indiqué ci-dessous:

git config --global core.longpaths true

ou essayez de définir l'indicateur de réponse oui / non s'il n'est pas conflictuel pour vous

set GIT_ASK_YESNO=false

Si le chemin est trop long, je n'ai pas trouvé de solution réussie.

andhdo
la source
5
Je ne sais pas pourquoi mais définir "git config --global core.longpaths true" m'a été utile.
Maxim
GIT_ASK_YESNO, impossible de trouver des informations sur celui-ci. D'où est ce que ça vient ?
majkinetor
voir: stackoverflow.com/questions/3698369/… par exemple; Je ne sais pas maintenant si cela fonctionne avec les versions récentes de git (2.9)
andhdo
core.longpathsavec supplémentaire: reset --hard prune gc a fonctionné pour moi - mais a dû fermer AndroidStudio pour ne pas gâcher ses outils
intégrés
11

J'ai essayé git gcet cela a résolu mon problème.

Mukesh Yadav
la source
10

Cela pourrait être utile pour quelqu'un; si tout ce qui précède n'a pas fonctionné pour vous, procédez comme suit:

  1. Fermez votre IDE (le mien était Eclipse, je ne sais pas si cela s'applique à Intellij et à d'autres) ou toute autre application qui pourrait utiliser git.

  2. Ouvrez git à partir de la ligne de commande (dans mon cas, j'avais git bash) et exécutez git gccomme mentionné par d'autres.

Cela a fait la magie pour moi.

papigee
la source
C'est la seule réponse qui a aidé dans mon cas, en utilisant Android Studio
0101100101
10

Comme j'utilise gitkraken et l'invite de commande, j'ai rencontré le même problème. Et puis je cours git gc commande, cela a résolu mon problème. Je suis donc heureux et souhaite partager certains des points qui pourraient être utiles.

Que git gcva faire?

git gc supprimer les objets inaccessibles qui peuvent avoir été créés à partir d'appels antérieurs de git add.

Quand courir git gc ?

De doc , les utilisateurs sont encouragés à exécuter cette tâche régulièrement dans chaque référentiel pour maintenir une bonne utilisation de l'espace disque et de bonnes performances de fonctionnement.

Comment le rendre auto-configurable?

Certaines commandes git peuvent exécuter automatiquement git gc; voir le drapeau --auto ci-dessous pour plus de détails. Si vous savez ce que vous faites et tout ce que vous voulez, c'est de désactiver définitivement ce comportement sans autre considération, faites simplement

git config --global gc.auto 0
Ramesh Papaganti
la source
8

Dans mon cas (Win8.1, TortoiseGit en cours d'exécution), c'était le processus appelé "cache d'état TortoiseSVN" qui bloquait le fichier.

Le tuer m'a permis de lancer "git gc" sans plus de problèmes. Le processus ci-dessus est déclenché par TortoiseGit, il n'est donc pas nécessaire de le redémarrer manuellement.

nickD
la source
7

J'ai eu ce genre de problème sur Windows 7 et il s'est avéré être dû à un git.exeprocessus orphelin .

Pour le résoudre, ouvrez le Gestionnaire des tâches et supprimez tous les git.exeprocessus.

Étant donné que les gitcommandes sont de courte durée, vous ne devriez normalement jamais en voir git.exedans le Gestionnaire des tâches. Quand ils sont là, cela signifie généralement que quelque chose ne va pas et vous devez tuer ces processus.

jakub.g
la source
7

J'ai eu ce problème sous Windows. J'ai fermé mon IDE (Android Studio) et sélectionné OUI dans git shell. Ça a marché.

vovahost
la source
5

Sous Windows 8: j'ai exécuté git gc et il était dit que git gc était déjà en cours d'exécution, j'ai exécuté git gc --force et le garbage collector a fonctionné.

Je pourrais alors changer de branche et fusionner sans aucun problème, essayez git gc --force.

Peut-être que le processus gc ne s'est pas arrêté gracieusement pour une raison ou une autre.

Mark Howard
la source
Il est également valable pour Windows 10.
oguzhan
4

J'ai eu ce problème avec des .tmpfichiers dans le /.git/objects/packdossier. Je pense que quelque chose a échoué lors d'un push ou pull, j'ai donc supprimé ces fichiers temporaires et réinitialisé le HEAD à mon dernier commit. Je ne sais pas si cela est conseillé, mais cela a fonctionné pour moi. M'a également git count-objects -vdonné une liste des.tmp fichiers qui n'appartenaient pas au dossier du pack.

Ou pour supprimer les messages y / n dans les fenêtres git open cmd.exeet exécuter:

SETX GIT_ASK_YESNO false

vu ici: https://twitter.com/petercamfield/status/494805475733807104

myrtilles
la source
Après avoir exécuté git gc, git count-objects -vaide à identifier les objets temporaires restants dans le packdossier.
mistaecko
4

J'ai pu résoudre ce problème en ouvrant Powershell en tant qu'administrateur et à partir de là git checkout <branch_name>

Bar Horing
la source
Merci @ bar-horing. Cela m'a aidé à l'identifier comme un problème d'autorisation. Une fois que j'ai fixé l'autorisation Windows pour ce dossier, cela a fonctionné.
Kumar
3

J'ai fait face au même problème en faisant «git pull». J'ai essayé la commande manuelle git de maintenance 'git gc' et cela a résolu mon problème.

Fais-le bien
la source
4
Bien que cela est une tentative de réponse, il n'ajoute rien qui ne soit déjà couvert par d' autres réponses (comme celui - ci ). Si vous essayez de confirmer que cette solution fonctionne ou si vous souhaitez remercier l'auteur de cette réponse, veuillez ne pas poster de réponse pour le faire. Après avoir gagné en réputation , vous obtiendrez des privilèges suffisants pour voter en amont les réponses que vous aimez, ce qui est la façon de dire merci de Stack Overflow.
Scott Weldon
2

Après avoir finalement essayé diverses solutions git clean -f m'a aidé.

EDIT: J'ai rencontré le problème à plusieurs reprises - la fermeture de tous les processus dépendants de git semble aider (comme gitbash, Eclipse IDE, etc.)

FazoM
la source
2

Comme indiqué ci-dessus, quelque chose d'autre contient les fichiers. Le fait est que ce programme ne nous semble pas suspect. J'essayais de faire un git pull depuis la console, tout en ayant ouvert GitKraken. La fermeture de GitKraken a résolu le problème.

100r
la source
2

Commande après exécution

git rm -rf foo.bar

Je vois une erreur

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Parce qu'un autre programme utilise ce fichier . Par exemple, lorsque j'exécute une application Web Java dans un modèle de débogage ou que j'exécute une application Web sur le serveur, je ne peux pas supprimer le fichier journal. Désactivez le serveur d'applications (ou désactivez le processus de débogage), réessayez

git rm -rf foo.bar

Je vois que le fichier a été supprimé.

Do Nhu Vy
la source
1

Cela peut être une fenêtre gitk distincte en cours d'exécution pour voir un historique de git.

Fermez simplement cette fenêtre pour résoudre ce problème.

weinerk
la source
1

J'ai rencontré ce problème en exécutant git Bash et Eclipse EGit en même temps. Solution: fermez Eclipse. git gcCela ne ferait pas de mal non plus de courir comme l'a mentionné @khilo.

jhyry
la source
1

J'ai rencontré ce problème dans Windows, vous voudrez peut-être exécuter le git bash en tant qu'administrateur, puis exécuter les commandes de désir, qui ont résolu le problème pour moi.

Pablo Fallas
la source
1

Si vous développez une application Web, une raison courante consiste à oublier d'arrêter le serveur. Par exemple, cela peut être un simple processus Node.js, ou sur Windows, votre processus IIS s'exécute plus discrètement en tant que processus d'arrière-plan.

alex3683
la source
1

J'ai essayé chaque astuce sur cette page et rien n'y fait. Je faisais un git fetchet ungit reset --hard origin/development m'a donné l'erreur de malentendu. Je n'ai pas pu réinitialiser le dernier commit.

Ce qui a aidé était de vérifier une autre branche, puis de vérifier la branche précédente. Très étrange mais cela a résolu le problème.

T3rm1
la source
1

Si la fermeture de votre IDE et l'exécution de diverses commandes git répertoriées ici ne vous aideront pas, essayez de tuer manuellement tous les processus Java en cours d'exécution. Il me restait probablement un processus Java d'éclipse qui gardait en quelque sorte un fichier de configuration ouvert.

Marc.S
la source
1

Si vous utilisez Docker et exécutez Windows 10, vous souhaiterez peut-être arrêter le ou les conteneurs sur lesquels le fichier s'exécute. Pour afficher les statuts de vos conteneurs, exécutez

docker ps -a

Pour les arrêter, lancez simplement

docker stop <container name or container id>

Cela a fonctionné pour moi car j'exécute mes fichiers locaux en utilisant un fichier .sh

Le fil du rasoir
la source
1

A travaillé pour moi, essayé sur les fenêtres:

Arrêtez votre serveur cours d'exécution à partir de l'IDE ou fermez votre IDE

Intellij / Ecllipse ou autre, cela fonctionnera.

Codiee
la source
0

Sous Windows, vous avez vu cette erreur sur un git clonedépôt (assez volumineux). Fermé SmartGit et suspendu mon logiciel de sauvegarde (CrashPlan), et après cela a fonctionné. Je ne sais pas lequel des 2 a fait l'affaire, mais si vous exécutez l'un ou l'autre, cela pourrait le faire pour vous aussi.

Frederik Struck-Schøning
la source
0

J'ai eu le même problème lors d'un git pull et comme indiqué ci-dessus, c'était à cause d'un programme qui contenait ces fichiers et ne permettait pas un git pull. La fermeture du programme a aidé. Habituellement, l'IDE (comme Eclipse) d'où les fichiers sont archivés le tiendra en arrière-plan. Fermer le même et relancer git pull a résolu le problème pour moi.

Somesh Rao
la source
0

J'ai eu cette même erreur et la fermeture de l'application qui avait ouvert le fichier l'a résolu. J'ai pu revenir en arrière et appuyer sur "Y"

Paul McDaniel
la source