Ist das tägliche Festschreiben / Einchecken von Code eine gute Praxis?

63

Ich habe Martin Fowlers Notiz zu Continuous Integration gelesen und er nennt als ein Muss "Jeder verpflichtet sich jeden Tag zur Mainline".

Ich schreibe keinen Code ein, es sei denn, der Abschnitt, an dem ich arbeite, ist vollständig. In der Praxis schreibe ich meinen Code alle drei Tage ein: einen Tag, um die Aufgabe zu untersuchen / zu reproduzieren und einige vorläufige Änderungen vorzunehmen, einen zweiten Tag, um die Änderungen abzuschließen und einen dritten Tag, um die Tests zu schreiben und sie zur Einreichung aufzuräumen. Ich würde mich nicht wohl fühlen, wenn ich den Code früher einreichen würde.

Jetzt rufe ich Änderungen aus dem Repository ab und integriere sie in der Regel zweimal täglich vor Ort, aber das mache ich nur, wenn ich ein kleineres Stück Arbeit herausarbeiten kann.

Frage: Ist das tägliche Festschreiben eine so gute Praxis, dass ich meinen Workflow ändern sollte, um ihn anzupassen, oder ist es nicht so ratsam?

Edit: Ich denke, ich hätte klarstellen müssen, dass ich "Commit" im Sinne von CVS (auch "Push" genannt) meinte, da dies wahrscheinlich das war, was Fowler 2006 gemeint hätte, als er dies schrieb.

^ Die Reihenfolge ist willkürlicher und hängt von der Aufgabe ab. Ich wollte die Zeitspanne und die Aktivitäten veranschaulichen, nicht die genaue Reihenfolge.

Schlitten
quelle
20
Sie können Ihren Code festschreiben, wenn er kompiliert und nützliche Logik ausführt. Es ist besser, Code in kurzen Zyklen zu schreiben, wenn Sie in einer Teamumgebung arbeiten.
EL Yusubov,
4
Nimmt Martin Fowler ein nicht verteiltes VCS an?
user16764
4
Beachten Sie das Datum an diesem Artikel: 1. Mai 2006. Git und Mercurial wurden nicht einmal begonnen , bis April 2005, und mein Eindruck ist , dass sie wirklich Traktion begann immer in etwa 2008. Ich noch keine Artikel auf Fowlers Website finden können, siehe Daher geht dieser Artikel aus dem Jahr 2006 eindeutig von einem zentralen Versionsverwaltungssystem wie SVN aus. Der Hinweis gilt nicht für Teams, die ein DVCS verwenden.
Kyralessa
2
@Kyralessa: Der Artikel besagt sogar, dass "Subversion das moderne [Versionskontrollsystem] ist".
Che
4
Erst den Code und dann die Tests?

Antworten:

43

Ich bin mit dieser Regel nicht einverstanden und stimme dem zu, was Mason Wheeler gesagt hat. Ich möchte ein paar Ideen hinzufügen.

Ich versuche jedes Mal, ein Commit durchzuführen, wenn ich eine wichtige Änderung vorgenommen habe: Dies kann mehrmals am Tag erfolgen, wenn ich mehrere kleine Fehler behebe, oder einmal pro Woche, wenn ich an einer größeren Software arbeite, die für den Rest von nicht verwendbar ist den Code in irgendeiner sinnvollen Weise, bis er einen konsistenten Zustand erreicht.

Ich interpretiere Commit als Veröffentlichung einer aussagekräftigen Revision , die der Codebasis neue Funktionen hinzufügt. Ich denke, man sollte versuchen, den Code vor dem Festschreiben zu bereinigen, damit andere Entwickler die Bedeutung und den Zweck der Änderung verstehen, wenn sie sich den Revisionsverlauf ansehen. Je weniger Änderungen andere Entwickler im Verlauf sehen, desto besser: Wenn ich mir den Versionsverlauf anschaue, möchte ich Inkremente sehen, die einige sinnvolle Funktionen hinzufügen. Ich bin nicht an jeder kleinen Idee interessiert, die jeder Entwickler hatte, und wollte sie ausprobieren, bevor sie zur Lösung gelangten.

Darüber hinaus halte ich es nicht für eine gute Idee, den SVN-Server (oder ein anderes Versionskontrollsystem) als Backup-Funktion zu verwenden, für die der aktuelle Snapshot des Codes festgeschrieben ist (vorausgesetzt, er wird kompiliert): Sie können einen USB-Stick verwenden oder ein externes USB-Laufwerk oder eine Netzwerkfestplatte, um Ihren aktuellen Code zu spiegeln, damit er nicht verloren geht, wenn Ihr Computer ausfällt. Revisionskontrolle und Datensicherung sind zwei verschiedene Dinge. Das Veröffentlichen einer Revision ist nicht dasselbe wie das Speichern eines Schnappschusses Ihres Codes.

Schließlich denke ich, dass es kein Problem sein sollte, von Zeit zu Zeit ein Commit durchzuführen (dh nur wenn man wirklich mit dem aktuellen Stand des Codes zufrieden ist) und Zusammenführungskonflikte zu vermeiden, ist keine gute Rechtfertigung für ein (zu häufiges) Commit. Viele Zusammenführungskonflikte treten auf, wenn verschiedene Personen zur gleichen Zeit an denselben Dateien arbeiten, was eine schlechte Praxis ist (siehe z. B. diesen Artikel , Punkt 7). Zusammenführungskonflikte sollten reduziert werden, indem ein Projekt in Module mit klaren Schnittstellen und so wenig Abhängigkeiten wie möglich aufgeteilt wird und die Arbeit der Entwickler so koordiniert wird, dass sich der Code, an dem sie arbeiten, so wenig wie möglich überlappt.

Nur meine 2 Cent.

BEARBEITEN

Ein weiterer Grund gegen vorzeitige Commits ist, dass eine (sehr) fehlerhafte Version nicht getestet werden kann. Wenn Sie einen Commit für den Trunk durchführen und Ihr Testteam jeden Tag Tests durchführt, ist möglicherweise für einige Stunden (oder einen Tag lang) keine testbare Version verfügbar. Selbst wenn Sie nicht versuchen, den Fehler zu beheben und nur Ihre Änderungen rückgängig zu machen, kann eine Neuerstellung einige Stunden dauern. Wenn beispielsweise fünf Tester in Ihrem Team arbeiten, haben Sie aufgrund von Inaktivität 5 x 2 = 10 Stunden der Teamzeit verschwendet. Es ist mir einmal passiert, also versuche ich wirklich, vorzeitige Commits im Namen von Commit so schnell wie möglich zu vermeiden .

Giorgio
quelle
23
Ein Commit ist kein Publizieren. 'Commit' bedeutet 'Snapshot'; 'Publizieren' heißt in scm-lingo 'Push'. Natürlich führt SVN beide Konzepte zu einem einzigen zusammen, wodurch viele sinnvolle Workflows unmöglich werden. Dies ist jedoch eine Einschränkung des Tools und nicht der Workflows für die Quellcodeverwaltung im Allgemeinen.
Tdammers
3
Revision control and data backup are two different thingsJa, ich fühle mich definitiv so.
Schlitten
1
@tdammers: Ich wollte auf informelle Weise veröffentlichen: Solange sich der Code auf meinem Computer befindet, sind es meine privaten Änderungen am allgemeinen Code. Sobald ich es festschreibe, wird es veröffentlicht, dem Rest des Teams bekannt und Teil der offiziellen Projektgeschichte.
Giorgio
1
In diesem Fall ist 'commit' wahrscheinlich das falsche Wort. Viele SCMs ermöglichen lokale Festschreibungen, und das Teilen Ihres Codes mit dem Rest des Teams ist eine separate Aktion, die in der Regel als "Push" bezeichnet wird. Auch hier fasst SVN die beiden Konzepte zusammen, was jedoch eine Einschränkung des Tools darstellt. Wenn dies Ihren Workflow beeinträchtigt, sollten Sie in Betracht ziehen, auf ein anderes SCM zu wechseln.
Tdammers
@tdammers: Eine klare Unterscheidung zwischen lokalem Festschreiben und Veröffentlichen wäre ein Fortschritt. In SVN kann ich dafür allerdings einen eigenen Zweig verwenden. Aber auch hier frage ich mich, warum ich eine Revision verfolgen möchte, die für mich wenig sinnvoll ist? Ich bin nicht davon überzeugt, dass ich eine neue Revision (auch eine private) will, nur weil es 5 Uhr ist und ich nach Hause gehe. Ich bevorzuge stattdessen ein Backup.
Giorgio
107

Ich gebe mehrmals am Tag Code ein . Immer wenn ich einen Punkt erreiche, an dem der Code vollständig genug ist, um andere Dinge zu kompilieren und nicht zu beschädigen, geht er hinein.

Sie sollten Ihre Arbeit unterbrechen, damit Sie sicher ein paar Mal am Tag einchecken können .

Die Gründe dafür sind zwei:

  1. Nicht eingecheckte Arbeiten können verloren gehen - Ihr Computer kann einen katastrophalen Fehler aufweisen. In diesem Fall verlieren Sie umso mehr Arbeit, je länger Sie warten.
  2. Je mehr Arbeit Sie erledigen, ohne einzuchecken, desto mehr Code müssen andere integrieren, wenn Sie sich endgültig für das Backen entscheiden. Dies führt zu einer erhöhten Wahrscheinlichkeit von Konflikten und Zusammenführungsproblemen.
Oded
quelle
2
Wenn Sie ein ernstes Problem mit Konflikten und Zusammenführungsproblemen haben, bedeutet dies, dass Ihr Projektmanager seinen Job nicht macht. Mehrere Fälle mit ähnlichen Funktionen sollten an denselben Entwickler gehen, damit nicht zwei oder mehr Programmierer aufeinandertreffen.
Mason Wheeler
14
@MasonWheeler - Nach 3 Tagen nicht festgeschriebener Arbeit besteht eine sehr gute Chance, dass einer den Code berührt hat, den andere gleichzeitig haben. Wenn Sie eine Reihe von Programmierern haben, die dies tun, kann der beste Projektmanager Konflikte nicht vermeiden.
Oded
3
@Oded: Vielleicht. Ich nehme an, dass meine Antwort von meiner Erfahrung mit einer Codebasis abhängt, die groß genug ist, dass unsere Entwickler (etwa ein Dutzend Codierer im Team) dazu neigen, nicht überlappende Verantwortlichkeiten zu haben. Ich bin mir nicht sicher, wie unterschiedlich es bei kleineren Projekten wäre.
Mason Wheeler
3
@ArtB - Was ist, wenn es jemanden wie Sie gibt, der nur alle 3 Tage eincheckt? Oder einmal in der Woche? Sie verlassen sich darauf, dass andere das Richtige tun.
Oded
3
Als ich die Frage las, war meine Antwort: "Ist das wie zu fragen, ob es eine gute Idee ist, jede Woche zu duschen?"
Andrew Grimm
39

Es ist niemals eine gute Idee, sich sklavisch an eine Methodik oder Praxis zu halten, ohne die Gründe dafür zu verstehen. Das ist der Ursprung der Cargo-Kult-Programmierung.

Deshalb ist "Ich sollte mich jeden Tag verpflichten, weil Martin Fowler es gesagt hat" einfach nur dumm. Und manchmal ist es auch unpraktisch. Wenn Sie an einer komplizierten neuen Funktion arbeiten, lohnt sich das Einchecken möglicherweise erst, wenn Sie bereits einige Tage daran gearbeitet haben.

Dies bedeutet nicht, dass Sie sicherstellen sollten, dass alles perfekt ist, bevor Sie es einchecken. Dies ist eine gute Möglichkeit, Arbeit zu verlieren, wenn etwas schief geht. Das Richtige ist, ein gutes Urteilsvermögen zu entwickeln und anzuwenden. Faustregeln können Ihnen nur so viel helfen.

Mason Wheeler
quelle
1
Wenn es sich dann um eine komplexe Feature-Integration / -Entwicklung handelt, ist es immer noch ein großer Verlust, sie nicht festzuschreiben, vielleicht nicht an den Trunk, aber zumindest in einem Zweig für dieses Feature, dafür sind Zweige da!
Vincent B.
2
Was meinst du mit "einchecken wert"? Wenn der Code eines anderen Benutzers nicht beschädigt wird, warum sollten Sie ihn dann nicht einchecken?
Kirk Broadhurst
2
"Was meinst du mit 'einchecken lohnt sich'? Wenn es den Code eines anderen nicht beschädigt, warum würdest du es dann nicht einchecken?" Zeitpunkt. Ich möchte auch eine alte Kopie des Codes behalten, wenn er nützliche Informationen enthält, die ich möglicherweise in Zukunft abrufen möchte. Ansonsten mache ich in der Revisionshistorie nur unnütze Geräusche.
Giorgio
3
+1. Ich habe einmal in einem Team gearbeitet, in dem wir jeden Tag Code in den VCS einchecken mussten, auch wenn es sich um einen Spitzenwert oder eine nutzlose Untersuchung handelte. Es erwies sich als ineffizient und verschwenderisch, insbesondere, weil zur Reinigung der VCS eine regelmäßige Wartung erforderlich war. Es lag an der Kombination von Paranoia, die das Risiko birgt, ein wenig Zeit zu verlieren, um etwas zu wiederholen, und daran, dass der Manager ein Buch gelesen hatte, das Sie jeden Tag begehen sollten. Ein extremes Beispiel vielleicht, aber im Ernst, wenn Sie nicht das Urteil haben, ob es sich lohnt, etwas einzuchecken, sind Sie wahrscheinlich nicht gut für den Job geeignet.
S.Robins
14

Oded gab zwei wichtige Gründe an, Code so häufig wie möglich zu schreiben. Ich werde noch ein paar hinzufügen:

  1. Während Sie an Ihrem Code arbeiten, benötigen andere möglicherweise einige Funktionen für diesen Code. Sie sollten nicht 6 Tage warten, um es zu bekommen. In diesem Fall erstellen meine Kollegen normalerweise einen Prototyp in meinem Code, schreiben ihn fest, ich füge den Body hinzu und schreibe ihn erneut fest. Und das ist in der Regel in wenigen Stunden erledigt.

  2. Der "gemeinsame" Code ist für alle da, um jede Änderung so schnell wie möglich zu sehen. Wenn der Code, an dem Sie arbeiten, völlig unabhängig von der Arbeit anderer ist und Sie nicht warten müssen, wird empfohlen, einen Zweig zu erstellen, an dem Sie arbeiten können. Wenn alles erfolgreich ist, führen Sie ihn zusammen die Hauptlinie.

superM
quelle
1
Warum ist diese Antwort mit (IMO) die einzig richtige und genaue Antwort (Punkt 2) so niedrig bewertet?! Das ist natürlich der Sinn einer Branche! @Mason Wheeler: Du genießt es also, mehrere Tage in einem Raw zu programmieren, ohne ein einziges Mal zu schreiben? Warum dann ein Versionskontrollsystem verwenden?!
Vincent B.
2
Das ist die richtige Antwort. Wenn Ihre Aufgabe viele Arbeitstage dauert, bevor sie verwendbar ist, verzweigen Sie. Andernfalls verpflichten Sie sich, wann immer es funktioniert, sicherzustellen, dass die Teammitglieder über die neueste Version verfügen. Sie können testen, ob es funktioniert, und sie identifizieren so schnell wie möglich hinzugefügte / fehlende Funktionen.
Kirk Broadhurst
"Sie genießen es also, mehrere Tage in einem Raw zu programmieren, ohne ein einziges Mal ein Commit durchzuführen? Warum sollten Sie dann ein Versionskontrollsystem verwenden ?!" Vielmehr liegt es an Ihnen, zu entscheiden, ob Sie mehrmals am Tag oder drei Tage hintereinander ohne Commit arbeiten. Ich verstehe es nicht als sinnvoll, eine unvollendete Funktion zu übernehmen, die niemand verwenden kann: Erstellen Sie einfach eine Sicherungskopie, und am nächsten Tag können Sie sie fertig stellen und festschreiben.
Giorgio
8

Ich bin fest davon überzeugt, dass es sich lohnt, jede logische Änderung vorzunehmen, die es wert ist, beibehalten zu werden. Führen Sie häufig Commit-Vorgänge durch, und setzen Sie den Code in einen sauberen Zustand zurück, wenn er nicht aufbewahrt werden sollte. Je länger Sie warten, um Ihren Code zurückzusenden / zu veröffentlichen, desto schwieriger ist die Implementierung und desto mehr Probleme treten auf. Außerdem erhalten Sie viel schnelleres Feedback zu Ihren Beiträgen:

  • brechen sie den Build?
  • duplizieren Sie die Bemühungen eines anderen Teammitglieds?
  • machst du etwas falsch
  • oder warten Leute auf Dinge von dir?

Kleine Änderungen sind viel einfacher zu verwalten.

Beachten Sie auch den Unterschied zwischen verschiedenen Versionskontrollsystemen. Einige, wie z. B. Git (verteilt), ermöglichen es Ihnen, Ihren gesamten Verlauf lokal festzuschreiben und zu steuern, und nur dann zu pushen, wenn Sie bereit sind, ihn zu veröffentlichen. Andere, wie SVN (zentralisiert), kombinieren die beiden Schritte und machen kleine Commits sehr ineffizient.

Vergessen Sie nicht, dass es sich bei Ihren Commits im Wesentlichen um Änderungsdokumentationen handelt. Wenn etwas schief geht, werden Sie froh sein, mehr Geschichte zu haben als nicht genug. Ein einziges Engagement für eine Woche Arbeit erscheint mir nutzlos. Ich würde am Ende nur jede einzelne geänderte Codezeile lesen und nicht die Zusammenfassung jedes logischen Blocks.

Adrian Schneider
quelle
5

Ich denke, die meisten Antworten hier verfehlen einen der Hauptpunkte in der Aussage von Martin Fowlers. Dies hängt mit der kontinuierlichen Integration zusammen . Code, der nicht in die Hauptzeile eingecheckt (gepusht / veröffentlicht / zusammengeführt) wurde, wird nicht getestet.

Dies sollte nicht als Aufforderung verstanden werden, den Code, den Sie auf Ihrem lokalen Computer haben, zu bestätigen, wenn es Zeit ist, das Büro zu verlassen. Wie von mehreren anderen hier hervorgehoben, wäre das schlecht, würde den Build brechen und eine instabile Hauptlinie verursachen.

Es ist jedoch eine Ermutigung, Ihre Änderungen in kleinen Schritten vorzunehmen, die problemlos in die Hauptzeile eingecheckt werden können. Dies fördert die Weiterentwicklung des Codes, anstatt alles zu zerreißen und neu zu schreiben.

Was ist nun gut an dieser Arbeitsweise?

  1. Das Verzichten auf große Codestücke oder revolutionäre Änderungen verringert die Wahrscheinlichkeit, dass der Build abgebrochen wird.
  2. Wenn Ihr Festschreiben den Build bricht, ist es ziemlich trivial, die Probleme zu identifizieren, es zurückzusetzen und dann schnell eine feste Version festzuschreiben.
  3. Indem Sie sicherstellen, dass alle Tests bei jeder kleinen Änderung des Codes ausgeführt werden, stellen Sie sicher, dass Sie keine subtilen Fehler oder Regressionen einführen, die entstehen können, wenn der Code außerhalb des kontinuierlichen Integrationsschemas wächst.

Natürlich eignen sich nicht alle Änderungen für diesen Ansatz. Wie andere betonten, ist keine Regel absolut. Richten Sie jedoch für Änderungen, von denen erwartet wird, dass sie für längere Zeit außerhalb der Hauptleitung liegen, eine alternative Hauptleitung mit einem eigenen kontinuierlichen Integrationsschema ein und verfolgen Sie den gleichen Ansatz. Mit den heutigen verteilten VCS ist das ziemlich einfach.

harald
quelle
+1: "Natürlich eignen sich nicht alle Änderungen für diesen Ansatz." Ich denke, das ist der Punkt. Ich finde Fowlers Rat in Ordnung, aber man sollte von Fall zu Fall urteilen. Stattdessen wird dieser Rat oft zu einer absoluten Regel verallgemeinert und ohne weitere Überlegung befolgt.
Giorgio
@Giorgio, da stimme ich dir absolut zu. Kein Rat sollte als absolute Regel verstanden werden, egal wer dahinter steht.
harald
Noch ein paar Ideen dazu. "Code, der nicht in die Hauptzeile eingecheckt (gepusht / veröffentlicht / zusammengeführt) wurde, wird nicht getestet.": Ich bin damit einverstanden, dass dies ein gutes Prinzip ist und man sollte nicht Wochen warten, bevor man den Code eincheckt und testet. Die blinde Anwendung dieses Prinzips kann jedoch zu einer fehlerhaften Anwendung führen, die nicht einmal getestet werden kann (ich habe dies live gesehen: Das gesamte Testteam sitzt tagelang im Leerlauf und kann nichts testen , bis der Code wieder einsatzbereit ist). Möglicherweise ist das, was andere Benutzer geschrieben haben, auf einige Situationen anwendbar, aber im Allgemeinen nicht.
Giorgio
1
Das Einchecken von instabilem Code ist niemals in Ordnung. Ein Commit, das das CI unterbricht, sollte zurückgesetzt werden. Wenn Sie häufig kleine inkrementelle Änderungen vornehmen, besteht eine geringere Wahrscheinlichkeit, dass ein solcher Bruch eintritt, als wenn Sie eine große Änderung haben, die lange Zeit nicht getestet wurde. Das Zurücksetzen kann auch einfacher sein, wenn der Build unterbrochen wird. Aber wie Sie sagen, manchmal führt kein Weg an einer störenden Veränderung vorbei. Polieren Sie es dann auf jeden Fall so gut wie möglich und testen Sie es gründlich, bevor Sie es festschreiben. Es geht nicht darum, Regeln zu befolgen, sondern zu verstehen, woher der Rat kommt.
Harald
3

Argumente für das tägliche Einchecken:

  • Der Code wird gespeichert und gegen Festplattenfehler gesichert
  • Aktivitäten können in Commit-Notizen aufgezeichnet werden ( was habe ich am Donnerstag getan ...? )
  • Die Integration in die vorhandene Codebasis erfolgt früher und in kleineren Abschnitten, wodurch hoffentlich Konflikte oder Zusammenführungsprobleme früher erkannt werden
  • Ihr Team hat einen Überblick darüber, woran Sie gearbeitet haben
  • Ihre Kollegen können schneller an Ihren Schnittstellen arbeiten und haben so mehr Zeit, sich in Ihren 'großen, komplexen Code' zu integrieren.
  • Ihr Code wird früher in der Praxis getestet oder zumindest häufiger verwendet, als Sie es geben. Dies führt zu einer früheren Identifizierung von Fehlern oder Auslassungen.

Argumente gegen das tägliche Einchecken:

  • Müssen nicht oder wollen nicht
  • Ich habe meinen Code noch nicht "aufgeräumt", es ist ein Durcheinander
  • Ich habe keine Zeit

Ich glaube nicht, dass es einen guten Grund gibt, weniger als täglich einzuchecken, abgesehen von Faulheit oder Desorganisation. Nichts Schlimmeres als zu sehen, dass der in der Entwicklungsumgebung ausgeführte Code nicht mit dem Code im Entwicklungszweig übereinstimmt, weil jemand "noch nicht fertig ist" und daher nicht eingecheckt hat.

Da ich mich gerne irre, teile mir bitte alle berechtigten Argumente gegen den täglichen Check-in mit.

Kirk Broadhurst
quelle
"Ich glaube nicht, dass es einen guten Grund gibt, weniger als täglich einzuchecken, abgesehen von Faulheit oder Desorganisation.": Ich glaube das Gegenteil aus genau dem gleichen Grund. Ich kann mir die Zeit nehmen, um den aktuellen Status des Codes zu überprüfen und zu entscheiden, ob er relevante Informationen enthält, an die es sich zu erinnern lohnt. Wenn ich faul und unorganisiert bin, kann ich ihn einfach einchecken (und zusätzliche Überarbeitungen mit wenigen Informationen erstellen Inhalt), solange es kompiliert wird.
Giorgio
1
Ich verstehe Ihren Standpunkt, dass man nicht faul sein sollte und seinen Code jeden Tag bereinigen sollte, damit er eingecheckt werden kann. Andererseits ist dies bei der Arbeit an komplexem Code schwierig, da die Bereinigung mehrere Stunden dauern kann und Sie können nicht mehrere Stunden am Tag damit verbringen, Ihren Code zu bereinigen.
Giorgio
@Giorgio Du verbringst also mehrere Tage damit, deinen Code aufzuräumen? Ich habe einige gute Gründe für das tägliche Einchecken angegeben. Ist Ihr Grund, dass Sie Ihren Code bereinigen müssen? Schreiben Sie einfach saubereren Code.
Kirk Broadhurst
Dies ist nicht immer möglich, zB wenn ich einen komplexen Code (> 4000 LOC) von Grund auf neu entwickle, der viel Experimentieren erfordert, um richtig zu werden. Es ist gut möglich, dass der Code am Ende des Tages etwas unordentlich ist und ich ihn erst beheben möchte, wenn ich einen konsistenten Zustand erreiche, der einige Tage später eintritt. Leider bin ich nicht so schlau, dass ich fertige, perfekte Code-Formulare im Kopf habe, und ich kann immer alles in ein paar Stunden (dh am Ende eines Tages) aufschreiben lassen. Ich hatte in letzter Zeit eine solche Erfahrung und der typische Entwicklungszyklus (von einem konsistenten Zustand zum nächsten) betrug 2, 3 Tage.
Giorgio
@ Giorgio Haben Sie keinen Entwicklungszweig, in den Sie einchecken? Der Code sollte eingecheckt werden, damit auch andere Personen ihn überprüfen und testen können.
Kirk Broadhurst
2

Wenn Sie "Festschreiben" als "In Hauptlinie einbinden" meinen, sollten Sie dies definitiv nicht jeden Tag bei einem Softwareprojekt tun, das für die Kunden freigegeben wird. Sie sollten vorgenommene und getestete Änderungen zusammenführen, damit die Hauptlinie immer funktioniert und freigegeben werden kann, und nicht in einem fehlerhaften Zustand mit halbfertigen Features.

Der Luxus der Arbeit mit der heutigen verteilten Versionskontrolle besteht jedoch darin, dass Sie sowohl die Hauptleitung stabil halten als auch git/hg/whatever commitjedes Mal, wenn Sie das Gefühl haben, den Zustand der Dinge bewahren zu wollen, dies gleichzeitig tun können . Ich mache das alle paar Stunden und definitiv am Ende eines jeden Tages.

Mit DVCS können Sie Ihre Arbeit veröffentlichen, mit anderen in Ihrem Team zusammenarbeiten und sie über Änderungen in der Hauptbranche auf dem Laufenden halten. Sie können all dies tun, ohne die Stabilität des Codes zu beeinträchtigen, auf den Ihre Kunden und / oder andere Teams angewiesen sind.

In Zeiten, in denen Subversion die neueste Technologie war und es keine Möglichkeit gab, Feature-Zweige ohne große Schmerzen zu teilen und zusammenzuführen, war eine Hauptlinie, in der sich mehrere verschiedene Features gleichzeitig befanden, möglicherweise der beste Ansatz. Diese Überlegenheit ist jedoch erst ab 2010 spürbar.

che
quelle
2

In Team Foundation Server können Sie "Zurückstellen", was nicht mit dem Einchecken identisch ist, sondern nur eine Sicherungskopie Ihres Codes erstellt, damit Sie die Änderungen nicht verloren haben, wenn Ihr Computer abstürzt.

Ich habe auch Softwarehäuser gesehen, die eine "Entwicklerlinie" und eine "Hauptlinie" haben. Entwickler können jederzeit in die Entwickler-Zeile einchecken und nur der Teamleiter hat Zugriff auf die Hauptzeile, sodass sie für das Kopieren von Code von Entwickler zu Hauptzeile verantwortlich sind, wenn diese produktionsbereit ist.

Matt Wilko
quelle