Wir haben jemanden (nennen wir ihn Ted), der für das Testen neuer Funktionen und Fehlerbehebungen verantwortlich ist.
Wir verwenden Git und GitHub . master
sollte / ist immer bereit und development
ist der Ort, an dem wir neue Funktionen oder Fehlerbehebungen festschreiben / zusammenführen, jedoch erst, nachdem sie von Ted getestet wurden.
Das Projekt ist in PHP.
Ich möchte, dass der Testprozess so abläuft:
- Ein Entwickler möchte eine neue Funktion zu arbeiten (sagen wir mal die Funktion / Bug # 123 als Ted in der issue tracker dokumentiert), so zieht er
origin/development
andevelopment
auf seinem lokalen Repository und erzeugt einen neuen Zweig (sagen wir malissue-123
) von dort. - Sobald er mit seiner Arbeit zufrieden ist, verpflichtet er sich und schiebt seinen neuen Zweig zu
origin
. - Ted stellt
test.ourproject.com/choose-branch
eine Verbindung zu den Zweigen her und sieht eine Liste der eingeschalteten Zweige. Erorigin
schaltet sich einissue-123
(dies sollte über die Webseite möglich sein). Dann fährt er forttest.ourproject.com
, testet die Webanwendung zum Teufel (er ist wirklich erbarmungslos) und nach einigem Hin und Her mit dem Entwickler ist er mit der Funktion zufrieden. - Ted sagt dem Entwickler, dass er
issue-123
aufdevelopment
on zusammenführen kannorigin
. - Spülen und wiederholen.
Für den dritten Schritt könnte ich etwas hacken, das den Job erledigt (Zweige von einer bestimmten Seite anzeigen und wechseln), aber ich denke, dass das, was ich beschrieben habe, ein sehr häufiges Muster ist.
Meine Frage lautet also: Ist dies ein guter / nachhaltiger / wartbarer Workflow für die Verzweigung? Können Sie Ihre Antwort unter Berufung auf einige Beispiele anderer Projekte untermauern, die diesem Workflow folgen?
quelle
issue-123
auf den Fehler / die Funktion Nr. 123 verwiesen wird, da Ted jeden Fehler / jede neue Funktion in unserem Issue-Tracker dokumentiert.Antworten:
Der Zweig-Workflow klingt sehr nach gitflow http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow und es gibt Support-Tools. Es wird dringend empfohlen.
Wenn es nur einen Tester gibt, klingt Ihr Testworkflow gut, aber wenn mehrere Personen anwesend sind, kann die Entwicklung zwischen Start und Ende wechseln, und natürlich sollte der Test idealerweise nach jeder Zusammenführung vollständig durchgeführt werden. Hier kann automatisiertes Testen wirklich helfen, oder ein langsamer (gründlicher) Tester wird möglicherweise nie fertig!
Ein weiteres Problem besteht darin, dass es bei vielen Features und Zweigen zeitaufwändig wird, Features zu einem Release zu mischen und abzugleichen (oder nach dem Akzeptieren und Zusammenführen zu entfernen) oder wenn Features voneinander abhängig sind. Das Problem besteht darin, dass Sie vorübergehend versucht werden, den Verlauf (Festschreiben / Löschen eines Commits oder Zusammenführen) für einen PUBLISHED-Zweig neu zu schreiben, dh für einen Zweig, der in ein Multidev-Repo verschoben wurde. Dies schreibt die öffentliche Geschichte neu. Es kann zum Guten oder zum Bösen getan werden, und selbst wenn es zum Guten getan wird, kann es den Unachtsamen Probleme bereiten, und es wird empfohlen, es zu vermeiden, damit die Frage niemals auftaucht. Einige Workflows für Integrationszweige machen dies jedoch sehr verlockend. Wenn Sie also einen starken Schutz für solche Zweige haben (z. B. Einschränkungen für Gitolite pro Benutzerzweig) und die Leute solche Aktivitäten erwarten, fahren Sie daher immer mit ihrem Code für einen solchen Zweig fort - seien Sie vorsichtig!
Ich möchte auch empfehlen, http://sethrobertson.github.com/GitBestPractices/ zu lesen, das all diese Themen behandelt und viele gute Referenzen enthält.
quelle
git-flow
ist nicht genau das, wonach ich gesucht habe, aber es ist definitiv etwas, was wir brauchen! Vielen Dank!Ich bin nicht sicher, ob die Umschaltseite selbst ein allgemeines Muster ist. Bei den meisten Projekten muss der Tester dies wahrscheinlich einfach mit dem Befehl git auschecken.
Der allgemeine Ansatz klingt definitiv vernünftig.
Google hat sogar Gerrit geschrieben , um einen ähnlichen Stil zu unterstützen. Es geht mehr darum, den Code zu überprüfen, aber das Genehmigen der Integration umfasst normalerweise sowohl das Überprüfen als auch das Testen. Normalerweise ist es auch mit einem Continuous Integration Server verbunden, der zuerst alle Einsendungen erstellt (ich bin nicht sicher, ob sie Jenkins in Google verwenden, aber ich glaube, ich habe irgendwo geeignete Konnektoren gesehen).
Git selbst verwendet eine leichte Variation des Themas. Der Betreuer verfügt über ein Skript, das alle ausstehenden Übermittlungen in einem Zweig zusammenführt, der aufgerufen wird
pu
(vermutlich für "vorgeschlagene Aktualisierungen"; der Zweig wird jedes Mal gelöscht und neu erstellt, da die ausstehenden Übermittlungen häufig neu basiert). Dies wird dann von verschiedenen Personen getestet. Wenn es in Ordnung ist, werden die Einsendungen, die als vollständig gelten, zusammengeführtnext
(das ist dasselbe wie bei Ihnendevelopment
). Wenn nicht, testet jemand die einzelnen Einsendungen, um festzustellen, welche fehlerhaft sind. Dies macht es für den Tester etwas einfacher, da er die meiste Zeit nicht die Zweige wechseln muss. Sie berichten einfach, ob die Testintegration funktioniert.quelle
Wenn Ihre Tests nicht manuell, sondern automatisch durchgeführt werden, wird Travis (ein CI-System für GitHub) meiner Meinung nach so ziemlich das tun, was Sie wollen - es führt automatisch Tests für alle Pull-Anforderungen aus. ( Weitere Informationen zu diesem Vorgang, einschließlich Screenshots. )
Beachten Sie, dass Tests nicht für den Zweig ausgeführt werden, sondern für den Zweig, nachdem er mit dem Master zusammengeführt wurde. (dh was Sie nach dem Zusammenführen des Zweigs mit dem Master erhalten würden - Sie können sicher sein, dass die Tests nach dem Zusammenführen weiterhin erfolgreich ausgeführt werden.)
Wenn dem Zweig Commits hinzugefügt werden, werden die Tests erneut ausgeführt. (Obwohl das Hinzufügen von Commits zum Master aus irgendeinem Grund die Tests nicht erneut auszuführen scheint.)
quelle