为什么当我否决 Samba 上的资源分叉时 hg 会阻塞?

为什么当我否决 Samba 上的资源分叉时 hg 会阻塞?

我有几个用户通过安装在他们 Mac 上的 Linux Samba 共享使用 Mercurial。

Samba 服务器具有以下否决规则(在本网站和其他地方都有详细讨论),以防止 Mac 创建资源分支,因为此类分支会对各种事物造成严重破坏,尤其是对开发人员的目录:

veto files = /._*/.DS_Store/
delete veto files = yes

问题是,有时,Mercurial 会随机出现以下错误:

$ hg ci
trouble committing stylesheets/custom.css!
transaction abort!
rollback completed
abort: Permission denied: '/Volumes/xxx/yyy/.hg/store/data/stylesheets/._custom.css.i-JdxA5R'

为什么 Mercurial 尝试在自己的数据存储内创建资源分支?

如果我注释掉否决规则,提交会成功,但服务器上不会留下任何此类资源分支。因此,它看起来是临时资源分支,或者临时文件的分支。

我怎样才能阻止 hg 创建它,或者忽略错误,或者让 Samba 默默地吞下它?

编辑:我猜想(但我不确定)hg 正在创建一个名为 custom.css.i-JdxA5R 的临时文件,出于某种原因,OS X 尝试将资源分支附加到该文件。当该操作失败时(由于被 Samba 否决),OS X 会为整个临时文件操作返回错误。

答案1

你没有理解veto files(文档链接) 选项。/实际上分隔了两个规则,并且没有 unix 路径中的目录分隔符含义。

本质上,这里有两个规则,第一个是阻止._*,第二个是匹配._custom.css.i-JdxA5R

相关内容