Continous Integration, Continous Deployment, SCM und die Frage nach den Branches

Nachdem die Autoren der Serie zu Continous Integration im Javamagazin 3/2012 sich gegen Branches im SCM ausgesprochen haben, hat sich Andre Balke in einem Leserbrief im Javamagazin gegenteilig geäußert.
Ich möchte Ihm an dieser Stelle – und aus meiner Projekterfahrung heraus – zustimmen. Es mag sicherlich Fälle geben, in denen Featurebranches und Branches sicherlich kontraproduktiv sind und nicht benötigt werden – je mehr Entwickler aber an den gleichen Codestellen arbeiten und je größer die umzusetzenden Aufgaben sind, desto sinnvoller sind Featurebranches. Es ist nicht immer möglich Änderungen zu implementieren, ohne dass dies Einfluss auf das bestehende Verhalten hat. Allerdings dürfen sich Featurebranches nicht zu weit vom Trunk entfernen, dass heisst, dass entweder der Featurebranch zeitnah wieder reintegriert wird, oder regelmäßig aus dem Trunk gemerged wird. Ich bin dagegen, ausschließlich auf nur einem Branch ohne Featurebranches zu arbeiten, da gerade bei umfangreichen Projekten die Gefahr zu groß ist, dass der Trunk nicht deploybar wird. Ferner muss man bei einer Entwicklung in nur einem Branch sich oft um ein „hidden Delivering“ kümmern, was dazu führen kann, dass für alle möglichen Features Konfigurationsschalter eingeführt werden, was den Code auf Dauer unübersichtlich und schwer zu warten macht. Sollten in einem einzelnen Branch Fehler auftreten, so ist die Entwicklung entweder blockiert, bis der Fehler behoben ist, oder es gibt inzwischen so viele Änderungen, dass der Fehler nur noch sehr schwer nachzuvollziehen ist. Es ist aber richtig, dass bei Feature Branches, die entsprechenden Entwicklungsteams die Verantwortung haben, diesen zu reintegrieren. Wer dies schon einmal in einem sehr aktiven Branch gemacht hat, dem ist bewusst, dass regelmäßig gemerged werden muss, um größere und unübersichtlichere Konflikte zu vermeiden. Ob man das noch Continous Deployment nennen könne wurde gefragt – meiner Meinung nach ja, sofern der Branch in den dann die FeatureBranches zurück gemerged werden sich wie ein „normaler“ Branch beim Continous Deployment verhält! Voraussetzung ist natürlich auch, dass der Inhalt der FeatureBranches nur das Nötigste umfasst, um möglichst schnell reintegriert zu werden. Ein Ein-Branch-Continous-Deployment halte ich in großen Projekten für nahezu undenkbar.

Schreibe einen Kommentar