Nor*_*sey 46 mercurial file-permissions
我已经看过很多博客文章,并且亲身经历过,Mercurial没有保留从一个repo推送到另一个repo的文件的权限.有没有人知道保留权限的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
Run Code Online (Sandbox Code Playgroud)此示例显示hg clone不保留权限,但也不保留权限hg push.
在我的应用程序中,一个回购是在公共可访问的路径上,并且它是非常重要的
多个用户有权更改回购
公共仓库中的文件只有在明确可读时才可读.
Nor*_*sey 33
看起来可以使用挂钩和辅助工具(以及一点点口香糖和打包线)来完成:
获取David Hardeman的Metastore,它可以保存和恢复文件元数据.
改变来源,因此会忽略目录.hg以及.git.
使用以下Mercurial钩子:
precommit.meta = metastore -s
changegroup.update = hg update
update.meta = /usr/unsup/nr/bin/metastore -a
Run Code Online (Sandbox Code Playgroud)您必须将.metadata文件添加到仓库.
这个lashup大部分时间都可以工作,但是如果你只更改权限并希望传播它,你必须运行metastore -s才能将这些更改推送到.metadata文件中,其中hg将看到更改; 否则提交认为没有什么是新的.
Ale*_*ski 17
如何使用Mercurial FAQ中的此解决方案:
如果您使用Mercurial进行配置文件管理,则可能还需要跟踪文件属性(所有权和权限).Mercurial仅跟踪每个文件的可执行位.
以下是如何将属性与文件一起保存的示例(如果安装了acl软件包,则在Linux上运行):
Run Code Online (Sandbox Code Playgroud)# cd /etc && getfacl -R . >/tmp/acl.$$ && mv /tmp/acl.$$ .acl # hg commit这远非完美,但你明白了.有关更复杂的解决方案,请查看etckeeper.
| 归档时间: |
|
| 查看次数: |
14201 次 |
| 最近记录: |