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)更改的主要内容,如果未能解决你的问题,请参考以下文章

sh Git忽略文件模式(chmod)

sh 如何让Git忽略文件模式(chmod)的变化?

忽略Mercurial中文件的未来更改,但仍然跟踪它[重复]

git忽略掉文件权限检查

JavaScript Mercurial忽略文件

如何更改某些文件模式/扩展名的权限?