In unserem Artikel Überlegungen zur Integration von Git und TFS haben wir beschrieben, wann eine Ergänzung der TFS-Toolkette um eine Nutzung von Git sinnvoll ist. Da mit der neuen Version 2.0.1 Git-TF auch für den TFS in der Cloud sprich Team Foundation Service eingesetzt werden kann, wird es wohl noch mehr Einsatzszenarien geben. In diesem kurzen Artikel geht es darum, was zu tun ist, um mit Git-TF und Git starten zu können.
Installation
Java Runtime (benötigt für Git-TF)
Git-TF Command Line http://gittf.codeplex.com (für den Ex- und Import von und nach Git bzw. TFS)
Git http://git-scm.com/downloads (der native Git Client)
Git Visual Studio Source Control Provider: http://visualstudiogallery.msdn.microsoft.com/63a7e40d-4d71-4fbb-a23b-d262124b8f4c/ (Integration in Visual Studio)
(Wahlweise) weitere Clients für Git
Konfiguration
Zeilenumbrüche werden per Default in Git wie Unix-Zeilenumbrüche behandelt. Damit kommt TFS nicht zurecht. Daher sollte während der Installation auf die folgende Einstellung geachtet werden:
Alternativ kann man via Git Config auch die folgende Einstellung treffen:
Git Config core.autocrlf false
Groß-/Kleinschreibung wird in TFS nicht unterschieden. Daher sollten die Einstellungen hier via
Git Config core.ignorecase true
verändert werden.
Die Verwendung von Git-TF sowie rudimentär Git ist auf der Projektseite auf Codeplex beschrieben.
In Visual Studio 2010 und 2012 muss der Source Control Provider noch auf Git umgestellt werden, damit das lokale Git-Repository aus dem heraus die Solution geöffnet wird auch angezogen wird. Die Einstellung befindet sich unter Tools –> Options –> Source Control:
Best Practices
Der Git-Export sollte immer nur einen Branch (also den Branch-Folder oder ein Verzeichnis unterhalb eines Branch-Folders) aus TFS enthalten. Also z.B.:
Der CustomerX-Branch wird dann wie folgt in ein Git-Repository überführt:
git tf clone http://myserver:8080/tfs/TestCollection $/Demo.Integration/Customers/CustomerX
Dadurch wird im aktuellen lokalen Verzeichnis ein Git-Repository mit dem Namen des obersten exportieren Verzeichnisses erzeugt. Im Beispiel also “CustomerX”. Dies kann durch Angabe eines Repository-Namens geändert werden:
git tf clone http://myserver:8080/tfs/TestCollection $/Demo.Integration/Customers/CustomerX MyRepoName
Damit nicht nur der letzte Stand exportiert wird, kann mit dem Switch –deep bzw. –depth=<num> die komplette Historie bis zur Erzeugung des Verzeichnisses in TFS bzw. eine Anzahl zurückliegender Changesets exportiert werden:
git tf clone http://myserver:8080/tfs/TestCollection $/Demo.Integration/Customers/CustomerX —deep
Gleiches gilt für den Weg zurück in TFS. Hierbei kann man unterscheiden, ob die gesammelten Änderungen aus Git in einem Changeset oder als einzelne Changesets importiert werden. Auch hierfür kommt der –deep Switch zum Einsatz. Einen –depth Switch gibt es hierbei nicht:
git tf checkin –deep
Beachten Sie auch, dass die Arbeit mit TFS und mehreren Git-Repositories zur gleichen Zeit durchaus knifflig werden kann: Locking and git-tf and… danger?
Wer noch überlegt, wozu er das dann eigentlich braucht, dem sei noch einmal unser Artikel Überlegungen zur Integration von Git und TFS ans Herz gelegt. Sie können natürlich auch gern einen Kommentar hinterlassen…