Was sind gute Check-in-Strategien für die Quellcodeverwaltung für große Aufgaben?

9

Die allgemeine Regel ist, Check-ins klein zu halten und häufig einzuchecken. Manchmal erfordert die Aufgabe jedoch große Änderungen am zugrunde liegenden Framework. Wenn Sie dann einchecken, bevor Sie die Aufgabe ausführen, wird das Projekt unterbrochen, bis Sie die fertige Arbeit einchecken.

Welche Strategien verwenden die Menschen, um das Risiko eines Arbeitsverlusts zu verringern oder um zu entscheiden, was Sie tun, ist der falsche Ansatz. Ändern Sie dann Ihre Meinung, nachdem Sie den Code entfernt und einen anderen Ansatz ausprobiert haben?

Wenn ich kann, checke ich die Hälfte der auskommentierten Arbeiten ein oder wenn sie kompiliert werden und nichts neue Dateien verwendet, checke ich sie ein. Je größer die Änderung, desto wahrscheinlicher ist es, dass ich das Projekt verzweige und dann wieder zusammenführe wenn ich alles wieder zum arbeiten habe. Eine weitere Option, wenn das Versionsverwaltungssystem dies zulässt, sind Regalsätze, bei denen es sich im Grunde genommen um kleine Zweige handelt. Wenn ich also für den Tag fertig bin oder zu einem Entscheidungspunkt komme, werde ich meine Änderungen zurückstellen, und wenn dann etwas Katastrophales passiert oder ich zu diesem Punkt zurückkehren möchte, kann ich es.

Dominique McDonnell
quelle
Welche Versionsverwaltungssysteme kennen Sie?
@Thorbjorn: Svn, Perforce und Team Foundation Server. Sie haben alle ihre Vor- und Nachteile
Dominique McDonnell

Antworten:

13

Ich benutze git, also lautet meine Antwort "branch". Verzweigen Sie sich und legen Sie ein Stück Mahlzeit fest, während Sie die verschiedenen Teile vervollständigen.

Schieben Sie Ihre Commits nach oben, wenn Sie zufrieden sind, damit Ihre Kollegen die Änderungen überprüfen können, ohne den Trunk zu stören.

Wenn alle mit dem Code zufrieden sind, führen Sie ihn zusammen und Sie sind fertig!

(Was ich für relativ lange laufende Zweige mache, ist das regelmäßige Zusammenführen von Stamm (Master, in Git-Terminologie) in meinem Zweig, damit die beiden Zweige nicht zu radikal voneinander abweichen.)

Frank Shearar
quelle
1
Sie müssen sich nicht mit "Ich benutze Git" qualifizieren - ich würde vorschlagen, dass die Antwort darin besteht, Punkt zu verzweigen. Der Schlüssel besteht jedoch darin, sicherzustellen, dass der Feature-Zweig mit dem Trunk auf dem neuesten Stand gehalten wird. Dies bedeutet, dass die Änderungen aus dem Trunk so oft und sinnvoll zusammengeführt werden.
Murph
Ich habe keine Verzweigung mit Subversion verwendet, aber mir wurde gesagt, dass es enorm einfacher ist, in Git zu verzweigen. Ich verzweige immer dann, wenn ich eine Funktion habe, die nicht trivial ist. Anscheinend ist das bei Subversion nicht praktikabel, daher meine Qualifikation. Ich bin froh zu hören, dass ich mich eigentlich nicht qualifizieren musste.
Frank Shearar
Grundsätzlich besteht die beste Strategie darin, zu verzweigen, sobald die Größe der Aufgabe nicht trivial ist, und den Trunk so oft wie nötig mit dem Zweig zusammenzuführen, um ihn wie ein normales Auschecken des Trunks zu erhalten, mit dem Vorteil der Quellcodeverwaltung des Zwischenstufen.
Dominique McDonnell
1
@Dominic Grundsätzlich ja, aber ich verstehe "Größe ist nicht trivial" als "alles, was ein Peer sofort sehen kann, ist richtig oder falsch".
Frank Shearar
3

Ich denke, die Antwort hängt davon ab, welche Art von Versionskontrollsystem Sie verwenden: zentralisiert (z. B. Subversion) oder verteilt (z. B. Git). Ich habe keine reale Erfahrung mit der Verwendung eines verteilten Versionsverwaltungssystems, daher basiert meine Antwort auf dem, was wir mit Subversion machen.

Wenn es eine große Änderung gibt, die unseren Kofferraumaufbau über einen bestimmten Zeitraum hinweg zerstört oder den Rest des Teams auf andere Weise wirklich stört, werden wir einen Zweig erstellen. Ich würde jedoch sagen, dass Sie so viel wie möglich tun sollten, um dies zu vermeiden - die meisten Änderungen können mit geringem Aufwand neben dem Rest des Codes stehen. Sie können beispielsweise Codepfade in den neuen Code auslösen (mit einfachen if-Anweisungen oder die neuen Versionen basierend auf den Konfigurationseinstellungen einfügen, wenn Sie ein DI-Framework verwenden). Wenn Sie fertig sind, ändern Sie einfach die Konfiguration auf die neue Version, testen alles, löschen den nicht verwendeten Code, testen erneut und löschen schließlich die Konfigurationseinstellung. Sie können das nicht immer tun, aber wegen des Overheads bei der Wartung einer Zweigstelle sollten Sie immer prüfen, ob dies möglich ist.

Wenn Sie verzweigen, denke ich, dass der Fehler, den ich oft sehe, darin besteht, dass der Zweig nicht mit dem Stamm auf dem neuesten Stand ist. Sie sollten ständig Änderungen aus dem Trunk in Ihren Zweig einführen, solange dieser vorhanden ist, damit das umgekehrte Zusammenführen von allem wieder ziemlich trivial ist, wenn Sie fertig sind.

FinnNk
quelle
2

In unserem Team verwenden wir Subversion und übernehmen normalerweise kleine Änderungen direkt am Trunk. Bei größeren Aufgaben erstellt der Entwickler, der daran arbeitet, normalerweise einen privaten Zweig, der nach Abschluss des Vorgangs in den Trunk integriert wird. Dann wird die private Niederlassung gelöscht. Während die Privatniederlassung existiert, sollte ihr Eigentümer natürlich häufig einchecken.

Wir versuchen, langlebige Zweige und Zusammenschlüsse von Stamm zu Zweig zu vermeiden, da dies eine sorgfältige Buchhaltung erfordert. Stattdessen haben wir relativ kurzlebige Zweige, die nur einmal wieder mit dem Stamm zusammengeführt werden und bald darauf gelöscht werden.

Und wir haben die Regel, dass nichts in den Trunk übernommen oder zusammengeführt werden kann, bis mindestens eine andere Person die Änderungen durchgesehen und genehmigt hat.

Dima
quelle
0

Genau wie der übliche Kommentar von SQL Server-Leuten "es kommt darauf an"

Wenn Sie können, würde ich vorschlagen, dass Sie einen Zweig auf dem Code erstellen, damit Sie weiterhin kleine Checkins Ihrer Arbeit anwenden können. Führen Sie nach Abschluss eine Zusammenführung in den Hauptstamm durch.

Ja, es besteht die Möglichkeit, dass Doppelarbeit auf diese Weise erneut ausgeführt wird. Aber zumindest werden Sie eine Spur von Arbeit pflegen, die Sie rückgängig machen können. Es erweist sich als Sackgasse.

GrumpyMonkey
quelle