繁体   English   中英

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

[英]Windows permissions on a directory: Mercurial - hg merge - “abort: access is denied”

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

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

我是一个Mercurial新手,我正在尝试按照上面的建议说“尽可能经常将默认合并到您的功能中” - 而且我已经在今天做了几次,已经和其他文件一样了。

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

当我执行'hg merge default'时,我收到错误“abort:Access is denied”。 谷歌搜索后,我看到有些人报告实际上有问题的文件有权限问题。 关于该文件的权限没有什么特别之处,至少不是我能看到的。 我是一名受过培训的Linux人员,而不是Windows用户,因此从根本上说我并不了解Windows文件权限。 Cygwin声称有问题的文件是644(即,我可以写入文件),这是与以前hg合并过程成功触及的每个其他文件相同的权限集。

我查看了DOS'attrib'命令,它也没有显示相关文件旁边的'只读'标志。

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

我假设这个“中止:访问被拒绝”错误是指变更集中需要合并的文件,而不是其中一个.hg /文件,但它是一个非常神秘的错误消息 - 它没有' t说哪个文件有访问权限问题(变更集中只有一个文件被更改了 - 我故意试着用这个测试非常简单)。

更新:

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

'hg merge'工作得很好。

因此,对于我开始使用的特定文件(foo.html)或其父目录的权限,可能会有一些特别的暗示。

另一个编辑

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

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

是否有一些DOS命令行工具,比如'attrib'只是更强大,像linux中的'ls',会给我提供更多的信息,而不是我在'属性'中得到的混乱的勾选标记?

希望最后的编辑

如何区分Windows权限

'iCacls'似乎是这项工作的正确工具,似乎已经解决了问题,但我想在接受/关闭之前复制它。

摘要

  1. 如有疑问,请在Mercurial命令上使用--debug 现在这有点'呃',但感谢@ lazy-badger指出它。

  2. 您可以使用icacls path /grant domain\\user:(OI)(CI)F等命令修复Server 2008权限(请参阅http://www.petri.co.il/forums/showthread.php?t=23207) ),但一定要从升级的CMD窗口('Run As Adminstrator')执行此操作。 再次'呃'对Windows的人来说,对Linux人来说并不那么明显(相反,我去谷歌搜索一些相当于sudo DOS)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM