Der Umzug eines Git-Repositorys in eine TFS-Instanz kann zu unangenehmen Problemen führen. Plötzlich sind auf magische Weise Work Items mit Commits aus diesem Repository verknüpft. Was steckt hinter diesem Verhalten? Diese vermeintliche Magie wird in diesem Blog-Eintrag erläutert.
Häufig werden beim Umzugs eines Git-Repositorys mit den Git-Bordmitteln folgende Schritte verwendet:
- Clone des kompletten Repository von der Ursprungsumgebung
- Erzeugen eines leeren Repository auf dem Zielsystem
- Remote set-url um die Zielumgebung zu bestimmen
- Push um den Inhalt zu der Zielumgebung hochzuladen
Dieses Vorgehen kann zu dem Anfangs erwähnten Verhalten führen. Denn das Git-Repository kann Commits mit Kommentaren eines bestimmten Musters beinhalten. Dieses Muster besteht aus einer Raute und einer Nummer (z.B. #29), siehe Abbildung 1. Beim Pushen in den TFS werden die Kommentare auf Vorhandensein dieses Musters analysiert. Die vorhandenen Nummern sind jeweils die Id eines Work Items. Diese Work Items werden mit dem Commit verknüpft. Die Verknüpfung resultiert in einer Änderung des Work Items, dies stößt weitere Funktionalität des TFSs an. So kann die zugewiesene Person eine E-Mail über diese Änderung erhalten. Dies kann je nach Größe zu einer hohen E-Mail-Last führen.
Abbildung 1: Commit mit Work Item verknüpft
Dieser Mechanismus kann im TFS unterbunden werden, in dem das automatische Verknüpfen von Commits und Work Items ausgeschaltet wird. Standardmäßig ist diese Funktion aktiviert. Zu finden ist die Einstellung unter den Optionen jedes Git-Repositorys, siehe Abbildung 2.
Abbildung 2: Option des automatischen Verknüpfens von Work Items und Commits
Eine Alternative ist die Komfortfunktion des TFSs, der Import von Git-Repositorys. Diese Funktionalität ist in Version 2017 Update 1 enthalten. Damit werden die Work Items nicht mit Commits verknüpft. Da die Funktionalität im Browser zugänglich ist, wird auch keine lokale Git-Installation benötigt. Die dazugehörige Dokumentation findet sich hier: Import a Git Repo
Die Magie ist in Wirklichkeit eine Funktionalität, die im Alltag sehr oft Anwendung findet, die den Entwickler unauffällig unterstützt und nicht zu Massen an E-Mails führt.
Wie immer gilt es, sich das Verhalten eines Werkzeugs bewusst zu sein. Denn ein unerwünschtes Verhalten ist nicht immer ein Bug. Wie in diesem Fall, kann dies eine oft genutzte und nützliche Funktionalität sein.