Ich habe einige Benutzer, die Mercurial über Linux Samba-Freigaben verwenden, die auf ihren Macs gemountet sind.
Der Samba-Server verfügt über die folgenden Vetoregeln (die sowohl hier auf dieser Site als auch anderswo ausführlich diskutiert werden), um zu verhindern, dass Macs Ressourcengabeln erstellen, die allerlei Chaos anrichten, insbesondere in den Verzeichnissen der Entwickler:
veto files = /._*/.DS_Store/
delete veto files = yes
Das Problem besteht darin, dass Mercurial manchmal zufällig mit diesem Fehler abstürzt:
$ 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'
Warum versucht Mercurial, einen Ressourcenzweig innerhalb seines eigenen Datenspeichers zu erstellen?
Wenn ich die Veto-Regel kommentiere, ist das Commit erfolgreich, hinterlässt aber keinen solchen Ressourcenzweig auf dem Server. Es scheint sich also um einen temporären Ressourcenzweig oder den einer temporären Datei zu handeln.
Wie kann ich verhindern, dass hg es erstellt, oder den Fehler ignorieren oder Samba dazu bringen, es stillschweigend zu schlucken?
Bearbeiten: Ich nehme an (bin mir aber nicht sicher), dass hg eine temporäre Datei namens custom.css.i-JdxA5R erstellt und OS X aus irgendeinem Grund versucht, einen Ressourcenzweig daran anzuhängen. Wenn das fehlschlägt, da es von Samba abgelehnt wird, gibt OS X einen Fehler für den gesamten Vorgang der temporären Datei zurück.
Antwort1
Sie haben die Syntax des veto files
( nicht verstanden.Link zur Dokumentation) Option. Dies /
trennt tatsächlich zwei Regeln und hat nicht die Bedeutung des Verzeichnistrennzeichens wie in Unix-Pfaden.
Im Wesentlichen gibt es hier zwei Regeln. Die erste blockiert ._*
, was mit übereinstimmt ._custom.css.i-JdxA5R
.