【问题标题】:Windows permissions on a directory: Mercurial - hg merge - "abort: access is denied"目录上的 Windows 权限:Mercurial - hg merge - “中止:访问被拒绝”
【发布时间】: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' 似乎是这项工作的正确工具,并且似乎已经解决了问题,但我想在接受/关闭之前复制它。

摘要

  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 窗口(“以管理员身份运行”)执行此操作。再次对 Windows 用户说“duh”,对 Linux 用户来说并不那么明显(相反,我在谷歌上搜索了一些相当于 sudo 的 DOS)。

【问题讨论】:

    标签: windows mercurial file-permissions acl windows-server-2008-r2


    【解决方案1】:

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

    【讨论】:

    • 这没有帮助。我关闭了文件,然后关闭了应用程序(Notepad++),但都没有帮助。重新启动具有存储库副本的两台机器并没有帮助(我什至还重新启动了我的笔记本电脑,以防万一)。这实际上是一个好主意,我认为它会奏效——在我的 Mac/Linux 头脑中,大多数与 Windows 相关的问题的答案似乎是“重新启动”。
    【解决方案2】:

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

    【讨论】:

    • 您能解释一下我如何诊断是否是这种情况吗?根据进一步的测试(请参阅我的编辑),问题似乎确实是 Windows 文件权限之一,但排除其他可能性可能有助于确定这是否属实。
    • 嗯,根据您的更新,TEMP 不是问题。我花时间冥想
    • 谢谢,很高兴知道这个问题可能有 Mercurial 组件,而且它并不总是很明显只是一个 Windows 问题。
    • 使用 --debug 运行您的命令。请发布整个错误消息(是 mpm 对我的回应)
    • 通过 iCacls 修复权限似乎已经解决了眼前的问题。但是,非常感谢,这是我早该想到的那种有用的标志。当我回到家时,我会将权限重置为不正确的形式并尝试使用这个标志——这正是我所期望和希望的答案。 Mercurial 命令上的一个标志,希望能更充分地说明问题。
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2017-11-10
    • 2014-08-10
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2020-08-27
    • 2016-06-25
    相关资源
    最近更新 更多