Pourquoi Mercurial retour “Abort: Accès Refusé” lorsque vous essayez de pousser un référentiel?
Je suis confronté à un problème avec un utilisateur de ne pas être en mesure de pousser sa s'engage dans un dépôt Mercurial et je suis perplexe quant à pourquoi il ne travaille pas pour lui. J'ai essayé plusieurs choses pour comprendre ce qui est en place, Googler n'est pas quelque chose d'utile... alors je suis ici.
Tout d'abord, la configuration. Nous avons un Windows XP SP2 x64 machine sur notre réseau agissant à titre officiel du repository server. Il contient plusieurs référentiels. Nous cloner /pousser /tirer à l'aide d'un dossier sur le lecteur partagé. Les autorisations sont donné à tout le monde pour l'accès en lecture. Les utilisateurs qui peuvent pousser (y compris l'utilisateur qui a des problèmes), le plein contrôle. La machine de l'utilisateur est Win XP. Ma machine (utilisé pour aider à résoudre les choses), c'est aussi Gagner des XP.
Deuxième, les symptômes. L'utilisateur est à l'aide de TortoiseHg 2.1.1 pour faire son travail. Il peut cloner un peu fine, s'engage à son local de pensions sont un-o-k, etc. Quand il essaie de pousser, cependant, TortoiseHg retourne un "abandon, ret 255" du code. Pas très utile. Nous sommes donc passés à la ligne de commande et ont émis des "hg push -v --debug". Ici, il renvoie à "abandonner: l'Accès est Refusé". Ce même utilisateur peut écrire dans le dossier partagé du serveur pas de problème, il peut créer des fichiers, de répertoires et de les supprimer. Ainsi, la lecture /écriture de l'accès au disque /dossier n'est pas un problème.
Troisièmement, nos résultats de l'expérimentation. Ici sont quelques-uns bizarre résultats de l'essai. L'utilisateur a créé un nouveau test local repo. Je suis connecté sur la machine serveur et créé un test de repo pour lui pour le pousser à. L'utilisateur vérifiée dans un fichier et ensuite poussé jusqu'à l'épreuve repo sur la machine serveur. Cela a bien fonctionné. N'abandonne. La vie était bonne. Il a été en mesure de faire un peu plus pousse et il a continué à fonctionner comme prévu. J'ai ensuite cloné le repo de ma machine, mise à jour d'un fichier, et poussé à revenir. Après que l'utilisateur a alors tiré dans mes changements et a essayé de pousser vers le serveur, il a encore une fois rencontré le redoutable "Accès Refusé" message. En attendant, je peux toujours mettre à jour le projet sans aucun problème.
Comme une autre expérience, nous avons eu l'utilisateur de se déconnecter et d'un autre utilisateur à se connecter. Ils l'ont fait et ont réussi à pousser vers le serveur repo sans problème. Original utilisateur se connecte à nouveau, fait quelques changements, etc. et encore une fois frappe le mur de brique "Accès Refusé".
Aussi loin que nous pouvons dire, le problème n'est pas lié à des informations d'identification Windows. Sinon, nous nous attendons à ce que la création de fichiers arbitraires sur le serveur du dossier partagé ne fonctionnerait pas. De plus, jusqu'à ce que j'ai fait une mise à jour du test de pensions de l'utilisateur créé, il pourrait pousser à particulier des pensions de l'amende juste.
Des idées? Quelles sont les autres informations d'identification des contrôles Mercurial décisions qui pourraient en être la cause?
Mise à JOUR:
Après un bout de Wim, j'ai commencé à regarder les autorisations sur les différents objets de l'opération à l'aide de la "cacls'. C'est un outil de Windows qui "affiche ou modifie les listes de contrôle d'accès de fichiers". J'ai eu l'utilisateur créer un nouveau repo et puis il a pris un instantané des autorisations. J'ai ensuite vérifié dans un fichier au même repo et a pris un autre aperçu de ces changements.
Il s'avère qu'il y a plusieurs pensions de permissions de fichiers mis à jour à la suite de cette: annuler.signets, annuler.branche, annuler.desc, annuler.dirstate, branchheads, 00changelog.j', 00manifest.j', annuler, et le seul fichier du référentiel. Tous ces fichiers avaient autorisations semblable à la suivante:
C:\Projects\Mercurial\hgtest4\.hg\store\undo BUILTIN\Administrators:F
NT AUTHORITY\SYSTEM:F
DOMAINxxxx\USERIDxxxx:F
BUILTIN\Users:R
(réelle DOMAINxxxx et USERIDxxxx les valeurs ont été modifiées). Avant mon arrivée, DOMAINxxxx & USERIDxxxx reflète le domaine de l'utilisateur et nom d'utilisateur. Après mon check-in, la ces s'est mis à jour à la mienne (nous sommes sur le même domaine, mais le nom d'utilisateur est évidemment différente.) J'ai été en mesure de vérifier les choses et même si mon userid n'était pas dans la liste parce que je suis un membre du groupe BUILTIN\Administrateurs. L'utilisateur avec le problème n'est pas. Donc, j'imagine qu'après que j'ai vérifié les choses, le système n'est plus vu comme un utilisateur identifié après les accès en écriture (BUILTIN\Utilisateurs:R indique que l'accès en Lecture seule) et donc causé le déni d'accès.
J'ai terriblement Q&D pour la fixer en place dès maintenant (l'utilisateur est maintenant partie du groupe Admin...) La vraie solution va être d'obtenir les pensions de titres hors de Partage de Windows et sur un bon serveur de configuration.
OriginalL'auteur MutantXenu | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
Il semble que votre push crée ou modifie des fichiers dans le .hg dossier de telle manière qu'ils sont (ou deviennent), inaccessible pour les autres utilisateurs.
Je ne suis pas expert sur les autorisations de fichiers NTFS, mais je pense que vous pouvez résoudre de telles situations, en forçant tout le contenu du dossier héritent de ses autorisations. Essayez de sélectionner "Remplacer tous les enfants les autorisations de l'objet avec les autorisations pouvant être héritées de cet objet" dans les paramètres de Sécurité Avancés du dossier.
Cependant, le partage du référentiel des fichiers directement avec le partage de fichiers Windows est pas recommandé. Vous avez besoin d'un serveur de processus entre les utilisateurs et les fichiers de référentiel pour des raisons de performance, l'intégrité des données et de la sécurité. Sans un portier, l'octroi de l'accès au commit signifie également l'octroi de la capacité de détruire/corrompre les fichiers du référentiel (ou comme vous l'avez découvert dans ce cas, la modification de leurs autorisations).
Voir La Publication Des Dépôts Mercurial sur l'Mercurial wiki pour plus d'informations sur les autres options.
C'était certainement un problème d'autorisations. Merci pour l'astuce!
OriginalL'auteur Wim Coenen
Lors de la tentative de commettre sur mon localement cloné référentiel de code des pensions sur mon réseau, j'ai fait le même message d'erreur:
Probablement trop simpliste, mais en enlevant une partie de la lecture seule des autorisations pour la délinquance des fichiers de mon
hg commit
beau travail.OriginalL'auteur BennyLava
J'ai juste eu le même problème
abort: Access is denied
. La cause était mon pare-feu (Privatefirewall) en silence le blocage de certaines actions de la hg.OriginalL'auteur Roman Mishin
J'ai été exactement le même message d'erreur lorsque vous essayez de hg push à l'invite de commande windows. J'avais reçu récemment un nouveau profil utilisateur après que la vieille avait corrompu. J'ai ensuite couru dans ce "Accès Refusé" erreur. Dans TortoiseHg, j'ai reçu un message similaire de "Avorté: Erreur 255".
J'ai essayé les conseils donnés ici par Wim Coenen comme il semblait à adapter, compte tenu de mon nouveau les informations d'identification utilisateur. Finalement, j'ai suivi l'erreur d'un mal installé Windows Git. C'était uniquement défaut lorsque j'ai utilisé des référentiels avec git sous-titres.
Dans le cas où d'autres sont un problème similaire avec Git sous-repos:
OriginalL'auteur Stephen Simpson