Mercurial:忽略文件权限/模式(chmod)更改

8
有没有一种方法可以忽略Mercurial存储库的文件权限/模式(chmod)更改?我正在寻找类似于Git的设置:
core.filemode -> false
  • 如此描述:

我能让git diff忽略权限更改吗?

更新:正确的答案是Ry4an的,加上我的第二条评论。

1个回答

6

Mercurial只跟踪文件的执行权限而不是按用户/组/其他方式,仅作为一个单一的位,因此根据您尝试压制的内容,您可能确实需要调整运行hg update的用户的umask

如果是执行位导致的问题,那么我认为唯一的选项是使用类似于预提交挂钩的东西:

[hooks]
pre-commit = find $(hg root) -type f -print0 | xargs -0 chmod a-x

在提交之前,删除所有文件的执行权限。

如果只想对版本化的文件进行操作,请使用hg locate,正如Ish的评论所指出的那样:

[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 总是会说权限已更改(为当前权限-无论旧权限和新权限是什么)我该怎么办? - user621495
一个更新:你的答案基本上是正确的;问题在于我的代码库包含成千上万个文件,每个文件都有自己特定的“x”位权限。在我的新本地副本中,我基本上试图为所有文件进行全局chmod操作 - 这与Mercurial存储的每个文件的特定“x”权限相矛盾。我想我会提交所有文件的“x”位。这绝对是不会对生产服务器造成任何伤害的事情。 - user621495
1
我曾经使用www-data用户创建了文件,这些文件属于www-data所有,所以尝试通过权限修改它们时出现了错误,从而提前退出。以下是适用于我仅针对有版本控制的文件进行操作的命令:pre-commit = hg locate --print0 | xargs -0 chmod a-x - lsh
这对我不起作用。我该怎么修复它?我漏掉了什么吗? - Romisha Aggarwal
4
请提供更具体的信息,说明您遇到了哪些问题。 - Ry4an Brase

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