Mercurial:忽略文件权限/模式(chmod)更改
Posted
技术标签:
【中文标题】Mercurial:忽略文件权限/模式(chmod)更改【英文标题】:Mercurial: Ignore file permission / mode (chmod) changes 【发布时间】:2011-07-01 16:21:34 【问题描述】:有没有办法忽略 Mercurial 存储库的文件权限/模式 (chmod) 更改?
我正在寻找类似于 Git 的设置:
core.filemode -> false
如此处所述:
Can I make git diff ignore permission changes
更新:正确答案是 Ry4an 以及我对他的答案的第二条评论。
【问题讨论】:
【参考方案1】:Mercurial 仅跟踪文件的执行权限,而不是以用户/组/其他方式跟踪,就像一个位一样,因此根据您要压制的内容,您可能真的需要调整 umask
的用户运行hg update
'
如果是执行位吸引您,那么我认为唯一的选择是使用预提交挂钩,例如:
[hooks]
pre-commit = find $(hg root) -type f -print0 | xargs -0 chmod a-x
即,在提交之前从所有文件中删除执行。
要仅对版本化文件执行相同操作,请使用hg locate
,正如Ish's 评论中指出的那样:
[hooks]
pre-commit = hg locate --print0 | xargs -0 chmod a-x
但请注意,这在某些情况下可能会失败。例如,在重命名 (hg rename
) 期间,重命名之前和之后的文件都将使用 hg locate
记录为版本控制。因此,钩子将失败chmod
文件的旧名称,并且提交将作为一个整体失败。这可以通过暂时禁用挂钩或在挂钩结束时调用/bin/true
来“修复”。
【讨论】:
我不确定该命令是否会修复它。我不想更改我的 umask(如果您愿意,这是一个安全的 700 或 077),但我不会在提交之前运行 chmod 命令(甚至手动)。然而,问题是我手动运行了该命令并且它没有解决任何问题。hg status
仍然显示修改后的文件,hg diff
显示没有差异,hg diff --git
总是说权限已更改(到当前的权限 - 无论旧的和新的是什么)我该怎么办?
更新:你的回答基本正确;问题是我的存储库包含数以万计的文件,每个文件都有自己特定的“x”位权限。在我的新本地副本中,我基本上是在尝试对所有文件进行全局 chmod - 这与每个文件(Mercurial 存储的)的特定“x”权限相矛盾。我想我只会为所有文件提交“x”位。这绝对不会伤害生产服务器。
我让 www-data 用户创建了属于 www-data 的文件,因此试图通过权限错误修改它们并提前退出。这对我来说只针对版本化文件:pre-commit = hg locate --print0 | xargs -0 chmod a-x
这对我不起作用。我怎样才能解决这个问题?我错过了什么?
您需要更具体地了解它如何不适合您。以上是关于Mercurial:忽略文件权限/模式(chmod)更改的主要内容,如果未能解决你的问题,请参考以下文章