git, Permissions und Dotfiles

Wenn man zur Zeit nach einer Lösung sucht, um die eigenen Dotfiles mit git zu verwalten, dann hat man so ein bißchen das Gefühl, da wäre schon alles gesagt worden. Ich habe lange Zeit selbst eine fertige Lösung benutzt, nämlich Nate’s dfm. Das hatte den großen Vorteil, in Perl geschrieben zu sein, und irgendwie ist Perl ja überall dabei.

Leider hatte dfm, genau wie viele andere Implementierungen, das Problem, keine Permissions managen zu können (was irgendwie klar ist, nachdem git selbst nur “ausführbar”, “nicht ausführbar” und “Symlink” kann). Wenn man routinemäßig de reinzige User auf einer Kiste ist, dann ist das nicht ganz so ein großes Problem (bis dann die PHP-Anwendung ihren Input nicht validiert und …), aber ich hab leider den Fall, das abdecken zu müssen (und außerdem nervt es, wenn sich die Hälfte der Tools permanent über unsichere Berechtigungen beschwert, und man dann selbige per Hand einstellen muss).

Und so entstand mein erster, halbwegs sinnvoller Beitrag auf GitHub: dotfiles. Damit gibt es jetzt dann eine Million und eine Lösung :-)

Kurz zur Erklärung: Der Ansatz verwendet ein bare-Repository (die Idee kommt von Atlassian) und eine explizite working copy ausserhalb des eigentlichen git-Trees. Zudem wird das Skript setgitpermissions.perl verwendet, um über den Umweg von commit-Hooks (git ab 2.9 kann ja auch Hooks in externen Verzeichnissen) die Berechtigungen nicht zu vergessen. Einzige Voraussetzung ist ein installiertes Perl (sollte ja eh überall der Fall sein), und zur Arbeits-Erleichterung ein Alias, der die git-Einstellungen unter dem Befehl dot verfügbar macht.

Man sollte übrigens tunlichst vermeiden, ein dot clean einzugeben ;-)