Ein Kollege von mir sagte mir, dass er daran denkt, unseren CI-Server dazu zu bringen, Commits wiederherzustellen, bei denen der Build fehlgeschlagen ist, so dass das HEAD
In master
immer stabil ist (zumindest, wenn der Build übergeben wird).
Handelt es sich um eine bewährte Methode, oder ist es problematischer, master
wenn das Programm erst dann unterbrochen wird, wenn der Entwickler das Problem behoben hat?
Ich denke, dass das Zurücksetzen des Commits die Aufgabe des Lesens des Commits und des Fixes komplexer machen wird (Entwickler müssen das Zurücksetzen zurücksetzen und dann den Fix zurücksetzen, der auch den Fehler verursacht git log
), und wir sollten einfach den Commit verlassen und dann den Commit ausführen Fix. Obwohl ich einige Vorteile darin sehe, master
stabil zu sein, überzeugt mich diese Rückkehr zu fehlgeschlagenen Commits nicht.
edit: Egal ob es sich um master
einen anderen Entwicklungszweig handelt, aber die Frage bleibt gleich: Sollte das CI-System ein Commit zurücksetzen, das den Build nicht bestanden hat?
noch ein (längen-) edit: ok, wir verwenden es git
auf seltsame weise . Wir sind der Meinung, dass das Konzept von Zweigniederlassungen gegen echte CI verstößt, da Sie durch das Festschreiben an einer Zweigniederlassung von den anderen Entwicklern und deren Änderungen isoliert werden und Sie mehr Zeit benötigen, um Ihre Zweigniederlassung wieder zu integrieren und mögliche Konflikte zu lösen. Wenn sich alle an master
diesen Konflikten beteiligen, werden diese auf ein Minimum reduziert und jeder Commit besteht alle Tests.
Dies zwingt Sie natürlich dazu, nur stabile Funktionen zu verwenden (oder den Build zu unterbrechen) und sorgfältiger zu programmieren, um die Abwärtskompatibilität nicht zu beeinträchtigen oder Funktionen umzuschalten, wenn Sie neue Funktionen einführen.
Es gibt Kompromisse, wenn CI auf diese oder jene Weise durchgeführt wird, aber dies ist nicht in Frage zu stellen (siehe dazugehörige Frage ). Wenn Sie es vorziehen, kann ich die Frage umformulieren: Ein kleines Entwicklerteam arbeitet in einem Feature-Zweig zusammen. Wenn ein Entwickler etwas festschreibt, das den Build für diesen Zweig unterbricht, sollte das CI-System das Festschreiben rückgängig machen oder nicht?
master
von Anfang an nie erreicht haben . Dafür werden Entwicklungs- und Feature-Zweige verwendet. Diese Änderungen gehen dann in so etwas wie einen Integrationszweig, in dem Sie testen können, ob alle neuen Funktionen mehrerer Entwickler zusammenarbeiten, und nur, wenn dies in getestet wurde, in master übernommen werden können. Zumindest ist das ein möglicher Workflow.