Locking mit Git

“Heutzutage macht man Git”! Git ist auf dem besten Weg, sich als das Standard-Tool für die versionierte Verwaltung von Dateien durchzusetzen. Wer fängt heute schon noch ein neues Projekt mit SVN oder gar CVS an? Sicherlich, Git bietet zahlreiche Vorteile gegenüber den vielen Alternativen. Dennoch sollte man sich vor einem Wechsel zu Git genau anschauen, ob das Tool auch zum Einsatzzweck im jeweiligen Projekt passt. Nehmen wir das Beispiel “Locking von Dateien”:

In SVN kann man über die Eigenschaft svn:needs-lock festlegen, dass eine Datei nur bearbeitet werden kann, falls sie zuvor für alle anderen Benutzer gesperrt wurde. Dateien, die eine Sperre benötigen und aktuell nicht durch den aktuellen Benutzer gesperrt sind, werden mit einem Betriebssystem-Schreibschutz versehen. Erst nachdem die Datei mit einer globalen Sperre versehen wurde, wird dieser Schreibschutz aufgehoben.

Die Stärke von Git liegt in der Verwaltung von textbasierten Dateien. Paralleles und offline-fähiges Arbeiten gehört zu den Design-Grundsätzen von Git. Locking von binären Dateien wiederspricht diesen Grundsätzen fundamental. Daher unterstützt Git das Sperren von Dateien nicht.

Kann Locking mit Git dennoch umgesetzt werden?

Mit dem auf GitHub gehosteten Open-Source Projekt Gitolite kann Locking umgesetzt werden. Allerdings mit einer wesentlichen Einschränkung: Ein Betriebssystem-Schreibschutz wird nicht vergeben. Es wird lediglich verhindert, dass eine Datei gepushed wird, die zuvor von einem anderen Benutzer gesperrt wurde. Der Benutzer ist somit selbst verantwortlich dafür, dass er sich vor der Bearbeitung einer Datei die entsprechende Sperre besorgt. Er wird nicht durch das Betriebssystem daran gehindert, die Datei zu bearbeiten. Dies ist eine wesentliche Einschränkung gegenüber der Arbeitsweise in SVN.

Neben dem Einsatz von Gitolite besteht natürlich auch die Möglichkeit, das Sperren von Dateien über Hook-Skripte umzusetzen. Aber auch hier gibt es nicht “den” Standard-Weg, wie dies in Git umgesetzt werden sollte. Daher wird dabei immer eine plattform-spezifische Lösung entstehen, die im Einzelfall funktionieren kann, die aber nicht allgemeingültig für alle Szenarien eingesetzt werden kann.

Falls das Sperren von Dateien für Ihr Projekt eine wesentliche Anforderung ist, sollten Sie sich daher überlegen, ob Git tatsächlich die richtige Wahl ist.

Short URL for this post: http://wp.me/p4nxik-2ao
This entry was posted in Build, config and deploy and tagged , , , . Bookmark the permalink.

Leave a Reply