目录上的Windows权限:Mercurial – hg merge – “abort:access is denied”

背景:这是在Windows 2008 Server上运行的。

https://www.mercurial-scm.org/wiki/Workflows#Feature_separation_through_named_branches

我是一个Mercurial新手,并试图按照上面的build议说,“尽可能经常地将默认合并到您的function” – 我已经这样做了几次以前已经与其他文件。

但是,这个最新的变化是不会合并的。

当我做'汞合并默认'我得到错误“中止:访问被拒绝”。 search后,我看到一些人报告实际上有问题的文件的权限问题。 关于有问题的文件的权限没有什么特别的,至less不是我能看到的。 我是通过培训的Linux人员,而不是Windows人员,所以从根本上来说,我不太了解Windows文件的权限。 Cygwin声称有问题的文件是644(即,我可以写入文件),这与以前由hg合并过程成功触及的所有其他文件具有相同的权限集。

我看了一下DOS的“attrib”命令,它并没有在所讨论的文件旁边显示“只读”标志。

如果这不是Mercurial问题,而是Windows权限问题,我很乐意进一步修改标签。

我假设这个“中止:访问被拒绝”错误是指需要合并的变更集中的文件,而不是.hg /文件之一,但这是一个非常神秘的错误信息 – 它doesn'不要说哪个文件存在访问问题(并且更改集中只有一个文件被更改 – 我特意试图在此testing中非常简单)。

更新:

做了一个'hg rollback',并以相同的顺序尝试了同样的命令testing,只保留了一个完全不同的文件(lib / blort.html而不是blah / foo.html)的文件。

“hg merge”工作得很好。

所以对于我开始使用的特定文件(foo.html)或者它的父目录的权限,可能会有一些特别的狡猾。

另一个编辑

肯定有关于父目录的东西,因为我有同样的问题/目录中的另一个文件,但问题不会在目录结构中的其他地方,只在这一个目录。

刚刚检查了lib / vs blah /的权限,他们在Cygwin中看起来都是一样的,但这只是Windows ACL的模糊近似。 通过右键单击每个目录并检查“属性”安全选项卡来检查这些目录时,它们在两个目录中看起来都是一样的,但我认为问题的症结在于我并不十分注意ACL。

有没有一些DOS命令行工具,像'attrib'只是更强大的,就像在linux中的'ls',会给我更多的信息比我在'属性'中的混淆混淆勾号?

希望最后的编辑

如何区分Windows权限

“iCacls”似乎是工作的正确工具,似乎已经解决了这个问题,但是我想在接受/closures之前复制这个问题。

概要

  1. 如果有疑问,请在您的Mercurial命令中使用--debug 。 现在有一点点了,但是感谢@懒惰的獾指出了它。

  2. 您可以使用像icacls path /grant domain\user:(OI)(CI)F这样的命令来修复您的Server 2008权限icacls path /grant domain\user:(OI)(CI)F (请参阅http://www.petri.co.il/forums/showthread.php?t=23207 ),但一定要从升级的CMD窗口('以pipe理员身份运行')执行此操作。 对于Windows用户来说,再次“嘟”一下,对于一个Linux用户来说并不是那么明显(相反,我用Googlesearch了一些相当于sudo DOS)。

Solutions Collecting From Web of "目录上的Windows权限:Mercurial – hg merge – “abort:access is denied”"

只要注意合并时的“拒绝访问” 可以有两个不同的根:@emil提到的和用户的错误或不存在的权限,在这个权限下启动证书hg,在$ TEMP文件夹中创建临时文件

如果某些其他程序打开了该文件,则可能会在Windows上出现拒绝访问错误。 您可以尝试关闭可能会打开该树中的任何文件的程序,或重新启动计算机(当然,这将关闭所有程序)。