Mercurial和从Windows客户端修改UNIX文件权限

4
我在使用Mercurial时遇到了一个特殊的情况。我的团队正在开发嵌入式Linux系统,涉及到一些不同硬件架构;因此,我们大部分的代码开发都在桌面Linux和个人电脑上完成,然后在运行不同硬件架构的服务器上进行构建。
有一种情况是有人使用Windows需要将所有更改推送到Mercurial服务器上。但是,服务器和所有的构建机器都运行Linux,并期望某些类型文件具有特定的(UNIX)文件权限。
我的问题是:是否可以在PC上修改UNIX文件权限或者是否可以在添加文件和推送更改时在Mercurial中设置一些文件权限规则?
请注意,大多数PC用户使用TortoiseHG GUI或hg命令行界面。
谢谢!
1个回答

6

Mercurial只能跟踪文件的两个状态:可执行状态和符号链接状态。这意味着您不能存储更复杂的权限(例如,组权限)。

在Windows上,Mercurial不会尝试读取或写入可执行文件和符号链接位。因此,新添加的文件将显示为非可执行文件(Unix模式644)和普通文件。使用hg manifest -v查看权限转换回Unix约定,但请记住,Mercurial实际上只为每个文件存储两个位。

在Windows上无法操作存储的位。没有规则系统来设置这些位,但可以编写扩展程序来实现这样的系统。

如果您需要比这更专业的文件权限,则需要在构建机器上的hg update之后设置它们。可以使用钩子进行此操作,也可以编写扩展程序。我认为目前没有现有的扩展程序可以实现此功能,但保存和恢复检出文件的修改时间的扩展程序应该是一个很好的起点。


1
是的,我一直在想人们在Windows和Linux中创建文件时权限是如何解决的。我发现当Linux服务器接收到推送的文件时,操作系统本身会给出默认权限,并且像你所说的那样,只有可执行状态被跟踪。我将研究钩子和扩展。谢谢! - akagixxer
@akagixxer:完全正确,Mercurial使用普通的open(path, 'w')调用在工作副本中创建新文件,然后由umask来删除诸如组和其他写权限之类的内容(或者不使用宽松的umask)。 - Martin Geisler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接