Welcher branch braucht Continuous Integration?

Wenn man sich so ein branch model, oder eher eine Source Code Management Strategie, anschaut, dann wird man schnell feststellen, dass nur zwei der vielen branches wirklich mit [Continuous Integration][3] abgedeckt werden müssen: develop und hotfixes.

Im develop branch laufen alle aktuellen Entwicklungen zusammen, z. B. wenn ein Entwickler meint, er habe sein feature fertig: es wird zurück in den develop branch gebracht. Vorher hat der Entwickler (weil wir ja gern TDD machen) sichergestellt, dass das feature eine ausreichende Unit Test Abdeckung hat. Für ihn persönlich sollte es also ausreichend sein auf diese zu achten. Eine persönliche CI für sein feature wäre sicherlich ein adminitrativer overkill: ist das feature klein wird es sicher schnell fertig, dafür extra einen neuen CI job aufsetzen und nach Beendigung der feature Entwicklung wieder löschen?! Ne!

Der release branch benötigt aus anderen Gründen keine CI: er unterliegt nur einer kurzen Zeit wirklicher Entwicklungsarbeit: während der Erstellung eines Release.

Wichtiger ist dann schon der master branch. Er enthält den Source Code der aktuell in der Produktion verwendet wird. Aber: gegen ihn werden auch hotfixes durchgeführt! Also Änderungen am Produktions Kode. Diese sollten frühzeitig mit CI abgedeckt werden, jeder hotfix branch sollte also einen eigenen CI job haben. Ist der hotfix gut und es werden keine Integrationsfehler (mit dem Produktions Kode) mehr festgestellt, dann ist der hotfix fertig in den master branch überzugehen (und in develop).

[3]: http://de.wikipedia.org/wiki/Kontinuierliche_Integration