Microsoft stellt seit kurzem für Team Foundation Server eine Git Integration zur Verfügung: Brian Harry: “Announcing Git Integration with TFS” Die Integration ermöglicht den Export und Import von Git-Archiven aus und in die TFS Versionskontrolle. Da sie Java basiert ist, funktioniert sie auch auf Nicht-Windows Betriebssystemen.
Seit etwas längerer Zeit gibt es bereits eine Open Source Community-Version für Windows-Systeme: Jan Van Ryswyck: “Git-TFS where have you been all my life”
Doch für welche Szenarien lässt sich diese Integration sinnvoll einsetzen?
Die Open Source Variante wird in einem unserer letzten dotnetpro-Magazinartikel näher beschrieben (siehe: dotnetpro 09/2012 S. 44). Mit der Microsoft-Variante erweitern sich die Funktionsmöglichkeiten. Man sollte aber wissen, was man tut. Die genaue technische Funktionsweise wird hier beschrieben. Wir wollen uns nun auf die Anwendungsszenarien beschränken:
Was
Die Integration bietet folgende Befehle (git-tf Kommandozeile):
- help – Hilfe zu den Befehlen
- clone – Erzeugt ein Git-Repository auf Basis eines TFS-Verzeichnisses (z.B. ein Branch-Folder)
- configure – Bindet ein bestehendes Git-Repository an den TFS an
- checkin – Integriert die Änderungen aus dem Git-Repo zurück in den TFS
- fetch – Holt den letzten Stand aus TFS und legt diesen in einem separaten Branch “FETCH_HEAD” lokal ab
- pull – Holt den letzten Stand aus TFS und Merged diesen in den aktuellen lokalen Stand des Git-Repository
- shelve – Erzeugt ein Shelveset mit den Änderungen in TFS – kann z.B. für einen Gated-Checkin oder ein Review verwendet werden)
Wozu
Denkbar sind folgende Anwendungsszenarien:
- Längere Offline-Arbeit z.B. auf Baustellen oder bei Inbetriebnahmen: Obwohl TFS mit den Local Workspaces bereits die Möglichkeit für die Offline-Arbeit bietet, ist diese mit der TFS Versionskontrolle auf Check-Out, Add und Compare mit der zuletzt heruntergeladenen Version beschränkt. Ein temporärer Git-Export ermöglicht zusätzlich das Arbeiten mit Teilen der Versionshistorie sowie das Einchecken. Nach der Arbeit ohne Verbindung mit dem TFS wird das Git-Archiv mit dem neuesten Stand aus TFS abgeglichen und die Änderungen werden in den TFS zurückgespielt (die einzelnen Git-Checkins werden als Changeset im TFS nachgestellt).
- Arbeit in nicht-Windows-oder-Java-Umgebungen z.B. Echtzeitbetriebsystemen: Einige unterstützen Echtzeitbetriebs-systeme unterstützen kein Java oder .NET (Voraussetzung für den TFS Client). Git wird in Form den C++-Clients aber unterstützt. Hier wäre ein Arbeiten über ein Git-Repository auf einem Netzwerk-Share denkbar. Ein konkretes Beispiel wie mit XCode entwickelt werden kann, finden Sie hier.
- TFS als Master – Clients mit Git: Wer im Team unbedingt mit Git arbeiten möchte, kann ein Repository anlegen. Das Team einigt sich aber auf TFS als Master-Branch in den für die Integration alle Änderungen zurückgespielt werden müssen.
- Migration – Wenn Sie von einem in das andere System wechseln möchten, hilft die Integration natürlich auch. Wobei wie bei allen Migrationen zu beachten ist, inwiefern sich Konstrukte wie Branches, Labels, Shares etc. überhaupt überführen lassen.
Risiken und Nebenwirkungen
Ein paar Punkte sind bei allen Anwendungsszenarien zu beachten:
- Die Check-In-Zeit der aus Git überführten Änderungen entspricht dem Zeitpunkt des Zurückspielens und nicht die des Originalcheckins.
- Durch die u.U. längere Entkopplung vom Repository in dem parallel weitergearbeitet wird treten entsprechend viele Konflikte auf, die vor dem Zurückspielen aufgelöst werden müssen.
- Das Git-Archiv liegt lediglich auf dem lokalen Client. Sämtliche Checkins werden zunächst nicht auf den Server übertragen. Fällt der Rechner aus, geht verloren oder die Festplatte kaputt sind die Daten weg – ohne Backup.
- Sind innerhalb der Branches bzw. der Ebenen der TFS Versionskontrolle Berechtigungen im Sinne von beschränkten Bereichen vorhanden, wird sich kein Git-Repository ausleiten lassen, da die Changeset-Historie evtl. Änderungen an den beschränkten Bereichen enthalten würde. Das funktioniert also nur wenn ich den Lesezugriff auf den gesamten zu exportierenden Bereich habe,
Fazit
Die Integration Git-Tf eröffnet neue Möglichkeiten der Integration und Anbindung von weiteren Entwicklungsumgebungen – der Schwerpunkt liegt auf Nicht-Windows oder größtenteils offline arbeitenden Clients. Bevor diese jedoch zum Einsatz kommt, sollte genau geprüft werden, ob nicht der Java-Client “Team Explorer Everywhere” – als Kommandozeile oder Eclipse-Plugin bzw. die Local Workspaces von TFS das Anwendungsszenario nicht bereits erfüllen.
Wir freuen uns auch über Ihre Gedankengänge zum Thema – hinterlassen Sie doch einfach einen Kommentar.