У меня есть несколько пользователей, использующих Mercurial через общие ресурсы Linux Samba, смонтированные на их компьютерах Mac.
На сервере 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
(ссылка на документ) опция. /
Фактически разделяет два правила и не имеет значения разделителя dir, как в путях unix.
По сути, у вас есть два правила: первое, блокирующее ._*
, которое соответствует ._custom.css.i-JdxA5R
.