【发布时间】:2011-12-07 23:35:04
【问题描述】:
背景:这是在 Windows 2008 Server 上运行的。
https://www.mercurial-scm.org/wiki/Workflows#Feature_separation_through_named_branches
我是 Mercurial 新手,我正在尝试按照上面的建议“尽可能频繁地将默认值合并到您的功能中”——我今天之前已经这样做了几次,与其他文件。
但是,这个最新的变化不会合并。
当我执行“hg 合并默认值”时,我收到错误“中止:访问被拒绝”。谷歌搜索后,我看到有些人报告实际上对相关文件存在权限问题。有问题的文件的权限没有什么特别之处,至少我看不到。我是受过培训的 Linux 人,而不是 Windows 人,所以从根本上说,我并不真正了解 Windows 文件权限。 Cygwin 声称有问题的文件是 644(即我可以写入该文件),这与过去通过 hg 合并过程成功触及的所有其他文件的权限集相同。
我查看了 DOS 的“attrib”命令,它也没有在相关文件旁边显示“只读”标志。
如果这不是一个 Mercurial 问题而不是 Windows 权限问题,我也很乐意进一步修改标签。
我假设这个“中止:访问被拒绝”错误是指变更集中需要合并的文件,而不是 .hg/ 文件之一,但这是一个非常神秘的错误消息——它没有说哪个文件有访问问题(并且变更集中只有一个文件被更改了——我故意试图让这个测试变得非常简单)。
更新:
执行了“hg 回滚”并以相同的顺序尝试了相同的命令测试,使文件保持打开状态,仅使用完全不同的文件(lib/blort.html 而不是 blah/foo.html)。
“hg 合并”运行良好。
因此,我开始使用的特定文件 (foo.html) 或其父目录的权限可能有一些特别的问题。
另一个编辑
父目录肯定有问题,因为我在目录中的另一个文件中遇到了同样的问题,但问题没有在目录结构的其他地方出现,仅在这个目录中。
刚刚检查了 lib/ 与 blah/ 的权限,它们在 Cygwin 中似乎相同,但这只是 Windows ACL 的模糊近似。通过右键单击每个目录并检查“属性”安全选项卡来检查它们时,两个目录的它们似乎再次相同,但我认为问题的关键在于我真的不太了解 ACL。
是否有一些 DOS 命令行工具,比如 'attrib' 只是更强大,就像 linux 中的 'ls' 一样,比我在“属性”中得到的混乱的复选标记提供更多的信息?
希望是最后的编辑
How to diff Windows permissions
'iCacls' 似乎是这项工作的正确工具,并且似乎已经解决了问题,但我想在接受/关闭之前复制它。
摘要
如有疑问,请在 Mercurial 命令中使用
--debug。现在有点“废话”,但感谢@lazy-badger 指出。您可以使用
icacls path /grant domain\user:(OI)(CI)F之类的命令修复您的 Server 2008 权限(参见例如 http://www.petri.co.il/forums/showthread.php?t=23207),但请务必从升级的 CMD 窗口(“以管理员身份运行”)执行此操作。再次对 Windows 用户说“duh”,对 Linux 用户来说并不那么明显(相反,我在谷歌上搜索了一些相当于sudo的 DOS)。
【问题讨论】:
标签: windows mercurial file-permissions acl windows-server-2008-r2