Ich denke, dieser Artikel, A Successful Git Branching Model , ist unter erfahrenen DVCS-Anwendern sehr bekannt.
Ich benutze hg
meistens, aber ich würde argumentieren, dass diese Diskussion für jedes DVCS in Ordnung ist.
Unser aktueller Workflow ist, dass jeder Entwickler das Master-Repo klont. Wir schreiben Code in unserem eigenen lokalen Repository, führen Tests durch und wenn alles gut geht, senden wir ihn an den Master.
Daher möchten wir CI-Server wie Jenkins einrichten und unseren Workflow mit dem zukünftigen Bereitstellungssystem (Chefkoch, Marionette, Ansible usw.) verbessern.
Realteil
Nun, das Modell oben präsentiert funktioniert gut, aber Zweige können CI brechen. Die Feature-Verzweigung sollte mit dem Ursprung synchronisiert werden (laut Artikel wäre es eine development
Verzweigung), um CI und Zusammenführung reibungslos zu gestalten, oder?
Angenommen, Alice und Bob arbeiten an zwei Funktionen. Aber Alice ist am nächsten Tag fertig. Bobs Feature dauert eine Woche. Bis Bob fertig ist, sind seine Änderungen veraltet (vielleicht hat Alice einige Klassen überarbeitet / umbenannt).
Eine Lösung besteht darin, dass Entwickler jeden Morgen master/origin
prüfen müssen, ob Änderungen vorliegen . Wenn Alice sich dazu verpflichtet hat, sollte Bob auf seinen Arbeitsbereich zugreifen und diesen zusammenführen, damit sein Feature-Zweig auf dem neuesten Stand ist.
- Ist das ein guter Weg?
- Sollten diese Zweige im Master-Repo vorhanden sein (nicht im lokalen Klon?). Sollte jeder Entwickler das Privileg haben, das Master-Repo auf GitHub / Bitbucket zu verwenden, damit er einen neuen Zweig erstellen kann? Oder wird das vor Ort gemacht?
- Schließlich sollte das in dem Artikel vorgestellte Modell das CI unterbrechen, wenn die Verzweigungen nicht mit dem CI synchronisiert sind
origin/master
. Sollen Entwickler, da wir nächtliche Builds durchführen möchten, vor dem Verlassen der Arbeit die Dateien ziehen und zusammenführen und CI auch für jeden Feature-Zweig ausführen?