Ich bin ein Auftragnehmer, der kürzlich mit einer Firma angefangen hat.
Das Team besteht aus 3 Entwicklern, bestehend aus 2 Entwicklern der Junior- bis Mittelstufe, von denen einer demnächst auf derselben Stufe startet, und mir selbst (6 Jahre xp). Für die beiden bestehenden Entwickler ist es ihre erste Stelle außerhalb der Universität / Hochschule, und sie hatten noch nie einen leitenden Entwickler, der ihre Arbeit beaufsichtigte.
Es gibt keine explizite Versionskontrollrichtlinie. Entwickler führen die gesamte Entwicklung auf dem Stamm durch und stellen sie dann direkt von ihren Entwicklungsmaschinen in der Produktion bereit. Das bestehende Team ist mit dem Verzweigen nicht vertraut.
Ich ändere das alles und führe CI, TDD-Test- / Staging- / Produktionsserver usw. zusammen mit einer Versionskontrollrichtlinie ein, um dies zu ergänzen.
Das Quellcodeverwaltungssystem ist TFS, das ich noch nie benutzt habe. Es ist als ein riesiges Repository konfiguriert.
Ich habe ein paar Hinweise für sie aufgeschrieben, aber gibt es noch etwas, das ich hinzufügen / ändern sollte, unter Berücksichtigung der Erfahrung des Teams?
Versionskontrollrichtlinie
Die Entwicklung erfolgt am Kofferraum
Wenn eine Änderung voraussichtlich länger als eine Woche dauert, sollte sie auf einem Zweig durchgeführt werden, wobei regelmäßig vom Stamm in den Zweig übergegangen wird, um zu verhindern, dass die beiden nicht mehr synchron sind.
Geben Sie die für den Produktionscode erstellten Zweige frei. Dieser Zweig sollte nur stabilen Code enthalten. Wir können entweder einen Veröffentlichungszweig haben, der einmal pro Sprint vom Stamm aktualisiert wird, oder wir können für jede Woche einen eigenen Veröffentlichungszweig erstellen.
Wenn eine dringende Fehlerbehebung vorgenommen werden muss, die sich auf den Produktionscode auswirkt, wird sie im Release-Zweig durchgeführt und wieder in den Stamm integriert.
Wenn wir die Ein-Release-Zweig-Strategie anwenden, wird der Stamm gegen Ende des Sprints einmal pro Sprint in den Release-Zweig eingebunden.
Wenn wir die Freigabestrategie für einen Zweig anwenden, wird der Trunk NIEMALS in den Freigabezweig eingebunden
In einigen Szenarien kann es erforderlich sein, den Fehler zweimal in verschiedenen Zweigen zu beheben, wenn die Zweige zu stark voneinander abweichen. Wenn wir kurze Sprints machen, sollte dies nicht zu oft passieren.
Ich plane drei Server. Testumgebung, in der immer der neueste Code im Repository ausgeführt wird. Eine Staging-Umgebung, in der der neueste Release Candidate für das Staging / Testen von Release Candidate-Code und UAT-Zwecken ausgeführt wird, sowie die Produktionsumgebung.
Der Grund, warum ich das vorhabe, ist, dass der Client bisher nur interne Software erstellt hat. Das neueste Projekt richtet sich an einen hochkarätigen Medienkunden, und ich bin der Meinung, dass das Team ein professionelleres Entwicklungsmodell übernehmen muss als das, was es derzeit tut.
Im Moment kann ein Benutzer beispielsweise das Team mit einem Fehlerbericht anrufen. Die Entwickler lokalisieren und beheben den Fehler, führen einen schnellen Augentest auf ihren eigenen Computern durch und setzen ihn dann direkt in der Produktion ein. Kein automatisiertes Testen oder so.
Im Nachhinein denke ich, dass der Feature-Zweig ein Schritt zu weit ist und ich werde das entfernen.
Im Wesentlichen handelt es sich also um a) überhaupt keine Verzweigung, b) einen Freigabezweig und den Stamm, und c) einen Freigabezweig pro Freigabe und Stamm.
Ich neigte mich zu Letzterem. Mein erster Gedanke wäre, dass sowohl ein Release-Kandidat als auch ein Release gleichzeitig auf getrennten Servern (UAT / Production) verfügbar sein müssten, aber effektiv ist der Trunk zu jedem Zeitpunkt der Release-Kandidat, also ein Zweig pro Die Befreiung neigt sich dem Wahnsinn zu. Mein einziger Gedanke wäre, wenn wir nicht möchten, dass unsere Stakeholder den Entwicklungscode sehen, dann brauchen wir möglicherweise einen separaten Zweig für Release-Kandidaten, aber YAGNI und all das ...