【发布时间】:2010-11-20 08:41:09
【问题描述】:
我看过许多博客文章,并且亲身体验过,Mercurial 不会保留从一个存储库推送到另一个存储库的文件的权限。有谁知道会保留权限的 Mercurial 扩展?我假设它不能用钩子完成,因为钩子对原始仓库的权限了解多少?
要求详细说明:
如果对文件的唯一更改是权限更改(例如,
chmod o+r filename),则尝试提交文件失败并显示文件未更改的消息。-
如果我提交一个权限为 600 (rw-------) 的文件,然后克隆 repo,克隆中的同一文件具有权限 664 (rw-rw-r--):
: nr@yorkie 6522 ; hg clone one two updating working directory 1 files updated, 0 files merged, 0 files removed, 0 files unresolved : nr@yorkie 6523 ; ls -l one two one: total 4 -rw------- 1 nr nr 8 Aug 18 21:50 foo two: total 4 -rw-rw-r-- 1 nr nr 8 Aug 18 21:51 foo
这个例子表明hg clone 不保留权限,但hg push 也不保留它们。
在我的应用程序中,一个 repo 位于可公开访问的路径上,这一点非常重要
多个用户有权更改repo
公共存储库中的文件只有在明确设为可读时才变得可读。
【问题讨论】:
-
你能详细说明一下吗?我可以更改本地文件的权限,提交更改,将它们推送到克隆,当我更新它时,克隆将更改权限。关键是我必须同时提交和更新。您是否希望推送到克隆以仅从推送中更改权限?要在没有提交的情况下注意到本地更改?推断所有现有权限?确切的问题是什么/我错过了什么?
-
@quark:它是怎么做的?我在 Debian Linux 上使用 hg 1.2.1,我什至无法承认 permissinos 的更改是值得提交的更改。 (注意,我已根据您的要求进行了详细说明。)
-
Norman:原来我缺少的是你想坚持更改为“r”和“w”的事实,而我所说的是对“x”的更改(Mercurial 自 0.6 以来一直在跟踪)。我应该意识到你的意思是读/写不可执行。
-
我同意不能轻松管理远程权限可能是一个真正的痛苦。在工作中通过使用
setfacl来解决我们的许多权限问题,但它 (a) 要求您在服务器上实际进行更改,并且 (b) 更改权限仍然只是文件所有者的领域. (b) 意味着即使 hg 确实允许记录对“rw”的更改,它仍然需要运行setuid以在远程端进行更改,除了存储库所有者之外的所有人。
标签: mercurial file-permissions