目录 : Mercurial - hg merge - "abort: access is denied" 的 Windows 权限

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

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

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

我是 Mercurial 新手,我正在尝试遵循上面的建议“尽可能频繁地将默认值 merge 到您的功能中”——我今天之前已经这样做过几次了,与其他文件。

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

当我执行“hg merge default”时,出现错误“中止:访问被拒绝”。谷歌搜索后,我看到有些人报告说这些文件实际上存在权限问题。有问题的文件的权限没有什么特别的,至少我看不到。我是受过培训的 Linux 人员,而不是 Windows 人员,所以从根本上说我并不真正了解 Windows 文件权限。 Cygwin 声称有问题的文件是 644(即,我可以写入该文件),这与过去 hg merge 过程成功触及的所有其他文件具有相同的权限集。

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

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

我假设这个“中止:访问被拒绝”错误是指变更集中需要 merge 的文件,而不是 .hg/文件之一,但这是一个非常神秘的错误消息 --它没有说明哪个文件有访问问题(并且变更集中只有一个文件被更改——我故意让这个测试变得非常简单)。

更新:

进行了“hg rollback”并以相同的顺序尝试了相同的命令测试,让文件保持打开状态,只是使用了一个完全不同的文件(lib/blort.html 而不是 blah/foo.html)。

“hg merge ”工作得很好。

因此,对于我开始使用的特定文件 (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 - hg merge - "abort: access is denied" 的 Windows 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771862/

相关文章:

c++ - 点云库 - 在 Windows 10 中找不到 pcl_visualizer

linux - Jenkins Linux 文件访问或组问题

linux - 权限似乎是对的,是错的

Python 3 winreg : unable to write to the Windows registry

c++ - 检测 DLL 的卸载

c++ - 如何将许多格式字符串打印到窗口中?

Mercurial Hg 和单个存储库上的多个用户

mercurial - .hgignore - 忽略除一个特定文件夹之外的某些文件夹

python - 使用来自 mercurial python hook 的 Django 模型

android - 如何使用 chmod 设置权限