Avertissement Git Checkout: impossible de dissocier les fichiers, autorisation refusée

109

Je suis conscient qu'il existe des problèmes similaires à propos de git liés à l'avertissement `` Impossible de dissocier '', mais je n'ai pas pu les utiliser.

La principale différence est que cela s'est produit lorsque je n'ai jamais traité de sous-modules (je ne les ai jamais traités auparavant). J'ai créé une branche appelée 'mise à niveau', supprimé mes anciens fichiers de framework et copié dans les nouveaux. J'ai utilisé git add -A, puis j'ai tout validé. Lorsque j'ai essayé de vérifier la branche du tronc, elle a répondu avec les erreurs suivantes:

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. Il y en a des centaines.

Au début, je pensais qu'il s'agissait simplement d'un problème d'autorisations, et j'ai donc ajouté des autorisations d'écriture de groupe à l'ensemble du répertoire des exigences de manière récursive, mais il n'y a pas eu de changement.

Edit: Comme suggéré dans une réponse ci-dessous, j'ai essayé de faire la même chose mais avec tout le reste fermé. Je n'ai pas eu plus de chance qu'avant.

Ce problème est particulièrement débilitant car je ne peux pas passer au tronc pour revenir à un développement normal.

Parangon
la source
9
Je l'ai résolu avec un simplesudo chown -R username directory
Stephen Corwin

Réponses:

84

Je vois généralement ce genre d'erreur quand un processus ne libère pas le handle de ces fichiers.

Assurez-vous que rien n'est en cours d'exécution, puis réessayez.

Remarque: cela peut également être lié à la façon dont Git a été installé (sous Windows, UAC peut générer des problèmes si msysgit est installé dans C:\Programou C:\Program Files, voir " msysgit - sh.exe - fork: Permission refusée - Vista 64 bits " et commenter 2 sur numéro 437 )

Remarque: comme illustré ci - dessous , une autre cause courante du problème est un problème de droits sur le répertoire (mauvais propriétaire), pas nécessairement sur le fichier qui ne peut pas être dissocié.

VonC
la source
1
Je suis sur Ubuntu, pour clarifier cela. Et malheureusement, je ne suis que dans ce navigateur Web et ma console, qui a un onglet ouvert vers le répertoire concerné (et deux ouverts tout à fait ailleurs).
Paragon
3
@Paragon: même sous unix, vous pouvez avoir des problèmes de gestion. Sinon, cela devrait être une question d'autorisation. Vous devriez cependant pouvoir forcer le paiement. git checkout -f master
VonC
2
+1 dans mon cas, c'était le partage de dossier avec une VM active qui interdisait de supprimer les fichiers dans git sur le système hôte. Cela m'a rendu fou, alors merci pour l'allusion!
Jook
1
Même problème. Exécution de Process Explorer> Ctrl + F> <filename> - affichera le processus, qui gardera ce fichier ouvert.
setevoy
1
GitExtensions a affiché cette erreur lors de la tentative de tout récupérer ... J'ai également ouvert GitKraken. Une fois que j'ai fermé GitKraken, la récupération a fonctionné sans erreur.
mkaj
99

Lors de ma première rencontre avec cette erreur, mon utilisateur avait le droit "d'écrire" dans le fichier mais pas dans le répertoire contenant. Vérifiez les autorisations du répertoire contenant le fichier.

Elijah Lynn
la source
95
Oh mon Dieu, trop drôle, je viens de tomber sur cette réponse aujourd'hui et puis j'ai réalisé que c'était la mienne! Néanmoins, cela a fonctionné à nouveau!
Elijah Lynn
Ok, ça m'est arrivé sous Windows 10, je vais dans le dossier principal du projet. et ajoutez POUR TOUS LES UTILISATEURS POSSIBLES, toutes les autorisations. Donc pour le système, l'administrateur, les utilisateurs, toutes les possibilités. Appliquez des chnages. Et cela semble fonctionner, peut-être avec la mise à jour de Windows 10, même si nous ne créons pas de nouvel utilisateur, nous sommes menacés comme le nouveau, sans autorisations. Par exemple, j'ai un nom Wird S-1-15-32 ..... Pas le nom de connexion que j'ai lorsque nous déverrouillons notre ordinateur portable.
PsychedelicSubstance
30

«Dissocier» signifie essentiellement «supprimer le fichier» dans ce cas.

Cette erreur n'est pas causée par git lui-même. Vous devriez avoir des erreurs similaires en supprimant ces fichiers manuellement, dans une ligne de commande ou un explorateur de fichiers.

rtconner
la source
18
Lors de ma première rencontre avec cette erreur, mon utilisateur avait le droit "d'écrire" dans le fichier, mais pas le répertoire contenant.
Elijah Lynn
3
@Elijah: Merci! C'est ce que c'était pour moi.
Jesse Lee
4
Dans mon cas, j'ai trouvé que le fichier en question était verrouillé par une autre application. La fermeture de l'application a libéré le fichier et a permis à l'extraction de se poursuivre.
Simon Tewsi
25

Vous ne disposez pas de l'autorisation d'accès, peut-être parce que vous n'êtes pas le propriétaire.

Corrigez en changeant le propriétaire pour vous-même:

sudo chown -R your_login_name /path/to/folder
Vince Yuan
la source
2
Sur ma machine de développement locale, les fichiers en question avaient été créés à l'origine par mon serveur apache local et appartenaient donc à l'utilisateur www-data. Une fois que je les ai chown'd sur mon propre compte, tout a fonctionné à nouveau normalement. «Permission Denied» était le vrai problème. Le "incapable de ne pas aimer" n'était qu'un hareng rouge.
Dale Anderson
23

J'avais le problème avec un fichier default-settings.php dans drupal 7. Dans ce cas, je n'ai pas pu le supprimer ou le rétablir comme @rtconner l'a dit. Je n'avais pas d'application ou quoi que ce soit utilisant ce fichier, et cela a fini par être une erreur d'autorisations.

J'ai ajouté chmod 777 *au dossier et j'ai pu le rétablir sans problème.

Rob Erskine
la source
3
Bien que vous ne souhaitiez peut-être 777aucun dossier. Cela a résolu mon problème, mais je l'ai rapidement rétabli par défaut après sa résolution. Merci!
Bram
13

Vous pouvez modifier les autorisations d'écriture pour le faire.

sudo chmod -R ug+w . 

Cette commande donnera des 'w'autorisations à tous les dossiers du répertoire courant.

Rajendra kumar Vankadari
la source
6

J'ai rencontré ce problème à chaque fois que j'exécutais "git repack" ou "git gc" sur mes machines OS X, même en exécutant git avec des privilèges d'administrateur, et je l'ai finalement résolu après être tombé sur cette page: http://hints.macworld.com /comment.php?mode=view&cid=1734

Le correctif consiste à ouvrir un terminal, à accéder à votre dépôt git, à installer un cd dans le dossier .git, puis à faire:

chflags -R nouchg *

Si tel était le problème, après cela, vos commandes git fonctionneront normalement.

Apprenez OpenGL ES
la source
1
Le lien macworld n'est plus valide. Voici une ref mise à jour: superuser.com/a/40754
webb
5

Cela peut également se produire lorsque:

  1. Vous avez exécuté un processus dans un conteneur Docker et:

  2. Certains fichiers ont été générés par ce processus, et:

  3. La destination des fichiers est montée en tant que volume sur l'hôte Docker, et:

  4. Vous exécutez gitsur l'hôte Docker.


Si tel est le cas, mettez en scène les fichiers que vous souhaitez valider et exécutez:

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

Les fichiers qui répondent aux critères ci-dessus seront précédés de:

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

Ils appartiennent à rootet ne sont pas inscriptibles, ce qui n'est pas bon. Pour réparer cette course:

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

Une solution plus propre serait probablement d'utiliser l' --useroption, voir ceci pour Docker et ceci pour Docker compose .

Davetapley
la source
4

Pour ceux qui utilisent Intellij , comme @rtconner l'a dit, ce problème n'est pas causé par git. Puisque votre IDE est verrouillé, un ou plusieurs fichiers, git ne peut pas le dissocier. Donc, vous devez fermer votre IDE, puis essayer de le fusionner (ou ce que vous voulez) via la ligne de commande.

Hesam
la source
C'était ça. C'est arrivé avec le développement Android, car AndroidStudio est Intellij.
Reinherd
2

Dans mon cas, c'était un caractère ":" dans un nom de dossier empêchant le dépôt git de récupérer sous Windows.

simonC
la source
2

sur le terminal sur mac je fais juste ça

sudo git checkout. (pour tout nettoyer)

puis

origine sudo git pull

Jry
la source
2

J'ai eu cette erreur dans une machine virtuelle (exécutant Ubuntu), quand j'ai essayé de le faire git reset --hard.

Le correctif consistait simplement à s'exécuter à git reset --hardpartir de la machine hôte OS X à la place.

Henrik N
la source
1

Aucune des autres suggestions n'a fonctionné pour moi, mais cela a fonctionné:

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

0x1mason
la source
1

Dans mon cas, mon répertoire Windows se trouve sous le dossier Dropbox. Ce n'est pas un problème spécifique à Git. Lorsqu'un fichier (dans ce cas, le fichier de verrouillage) vient d'être créé, Dropbox prend une seconde de plus pour effectuer la synchronisation. Pendant ce temps, le fichier est utilisé par Dropbox et tout programme tiers (dans ce cas, Git) ne peut pas supprimer le fichier.

Ma solution est de quitter Dropbox et donc d'éviter la magie des coulisses de la synchronisation des fichiers de Dropbox.

Vincent
la source
0

J'ai rencontré cette erreur et elle est causée par un "propriétaire / groupe" incorrect du fichier / dossier . Vous devez demander de l'aide à l'administrateur de votre serveur pour changer le "propriétaire / groupe" de ce fichier / dossier et réessayer en utilisant "git pull". Ou si vous êtes un sudoer, sélectionnez simplement sudo "votre nom de propriétaire / nom de votre groupe" et essayez à nouveau d'extraire votre dépôt. Essayez-le, cela fonctionne à 100% pour moi!

Jeff Simons Decena
la source
0

Assurez-vous que les processus ou threads associés ne sont pas en cours d'exécution et exécutez la tâche de fin ou forcez la fermeture si nécessaire.

Assurez-vous de modifier l'autorisation de propriété.

Creative_Cimmons
la source
0

En général, si cela se produit sous Windows et que vous utilisez tortoisegit , il s'agit du cache d'état de tortoisegit . Tuez ce processus et il sera libéré.

WiseFraise
la source
Vous pouvez en fait désactiver complètement le cache d'état de TortoiseGit, et c'est généralement quelque chose que je recommanderais. C'est souvent la cause de nombreux verrous de fichiers inattendus, et cela a tendance à être beaucoup plus problématique que cela en vaut la peine. Utilisez simplement à git statuspartir de la ligne de commande à la place.
0

Je devais juste changer d'utilisateur d'ubuntu pour mon nom d'utilisateur réel sous lequel j'avais d'abord fait des choses. Cela a réglé le problème.

Marc
la source
et qu'en est-il des utilisateurs de Windows?
Herr Nentu '27
L'OP était sur Ubuntu. Je n'aurais pas commenté un fil Windows.
Marc
0

Résolu pour moi en configurant mon client git (GitExtensions) pour qu'il s'exécute toujours en mode administrateur.

frodo2975
la source
0

J'ai eu ce problème lors de l'utilisation de IntelliJ(14.1.3 Ultimate), je voulais annuler les modifications dans certains fichiers.

Résolu en fermant Git Bashouvert dans une autre fenêtre - un autre essai de retour a IntelliJfonctionné.

Eel Lee
la source
0

J'ai rencontré cette erreur et je pense que le problème était que j'avais `` exécuté en tant qu'administrateur '' lorsque j'ai démarré Eclipse et créé les fichiers, ils appartenaient donc à l'administrateur (remarqué en exécutant `` ls -la '' sur le dossier). Quand j'ai essayé plus tard de cacher les fichiers, cela ne m'a pas laissé («impossible de dissocier les fichiers» et tout ça). Faire un chmod sur les fichiers était la solution pour moi.

LConrad
la source
0

Tout ce que vous avez à faire est de fournir des autorisations, exécutez la commande ci-dessous à partir de la racine de votre projet:

    chmod ug+w <directory path>
Hansa
la source
0

J'ai eu le même problème, j'ai essayé quelques alternatives comme d'autres l'ont suggéré.

Mais enfin, donner l'autorisation correcte au dossier .git résout les problèmes.

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

Dans mon cas, le problème d'autorisation résolu en définissant en www-datatant que propriétaire:

chown -R www-data project_folder_name
Avag Sargsyan
la source
0

Je pense qu'il s'agit de votre autorisation de fichier:

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