Beste Versionskontrollgewohnheiten für Solo-Entwickler?


36

Ich bin ein einziger Entwickler bei meiner Arbeit und verstehe die Vorteile von VCS. Es fällt mir schwer, mich an gute Praktiken zu halten. Im Moment benutze ich git, um hauptsächlich Web-Apps zu entwickeln (die aufgrund meiner Arbeit niemals als Open-Source-Version verfügbar sein werden).

Mein aktueller Arbeitsablauf besteht darin, viele Änderungen an der Entwicklungssite vorzunehmen, Änderungen zu testen, zu überarbeiten, zu testen, glücklich zu sein und festzuschreiben und dann die Festschreibung auf die Live-Site zu übertragen (wenn ich also an einer großen neuen Änderung arbeite, kann ich nur einmal pro Woche festschreiben, aber meine IDE hat einen guten Rückgängig-Verlauf für nicht festgeschriebene Sachen.

Grundsätzlich verwende ich git nur, wenn ich zwischen Computern wechsle (z. B. von einem Entwicklercomputer zu einem Heimentwicklercomputer oder zu einer Live-Maschine), aber tagsüber sehe ich den Vorteil nicht wirklich. Dies führt dazu, dass ich lange Änderungslisten habe (und es fällt mir schwer, für jedes Commit eine gute Nachricht zu finden; und wenn ich in Eile bin, hinterlasse ich gewöhnlich beschissene Nachrichten wie "Verschiedene Änderungen an Admin und Vorlagen").

Wie oft sollte ich mich verpflichten? Sollte jede einzeilige Änderung ein Commit erhalten? Sollte ich mich vor einem Test verpflichten (zB zumindest für Syntax- / Kompilierungsfehler und muss es dann komplett rückgängig machen; da die Idee nicht funktioniert hat oder die Nachricht eine Lüge ist)?

Sollte ich sicherstellen, dass ich mich jeden Morgen / Nachmittag verpflichte, bevor ich aufhöre, zum Abendessen zu arbeiten, solange es noch frisch ist? Was verpasse ich, wenn ich schlechte VCS-Gewohnheiten habe?


2
Vielleicht liegt einer Ihrer Gründe, warum Sie glauben, dass VCS für Sie nicht funktioniert, darin, dass Sie Git als Solo-Entwickler verwenden? Git scheint mir für einen einzelnen Entwickler ein Overkill zu sein. Vielleicht ist etwas Einfacheres mit weniger Funktionen wie SVN einfacher zu verwenden?
maple_shaft

6
@maple_shaft: Ich habe Git nicht benutzt, aber Mercurial ist so einfach wie Subversion für grundlegende Solo-Entwickleraufgaben. (Einfacher, da das Erstellen des Repository-Äquivalents einfacher ist.)
David Thornley

15
Warum sollte Git Overkill sein?
Tamás Szelei,

1
@maple_shaft der eigentliche vorteil kommt später. Mit weniger muss man sich nicht zufrieden geben.

3
Es ist erwähnenswert, dass für DVCS wie git und mercurial die Vorteile eines Offsite-Backups Ihrer Quellcodeverwaltung (wie in einigen Antworten erwähnt) nicht nur das Festschreiben, sondern auch das regelmäßige Pushen erforderlich ist.
Schlepper

Antworten:


24

Sie vermissen viel.

In gewisser Weise bin ich auch solo. Ich begebe mich jedes Mal, wenn ich eine signifikante Änderung vornehme oder bevor ich eine signifikante Änderung vornehme, damit ich zurückgehen kann, wenn ich Dinge vermassle, und von Zeit zu Zeit, auch wenn ich nichts Großes mache. Nicht wirklich jeden Tag, aber in der Nähe. Manchmal ein paar Mal am Tag.

Was ich bekomme, ist, dass ich jederzeit zurückkehren kann. Welches ist viel. Außerdem hilft es, wenn die Filialen bestellt sind.

Ich denke, es gibt mir viel Ordnung.

Ich benutze svn und habe es satt. Aber ich kann nicht mehr Zeit damit verbringen, etwas anderes zu lernen.

Viel Glück.


+1 Ich habe vor kurzem angefangen, VCS selbst zu benutzen, und GIT ist das Richtige für mich :)
yati sagade

1
Ich hatte die Versionskontrolle für eine lange Zeit vermieden, da ich den Eindruck hatte, dass es zu sperrig / hässlich / nervig war. Vor ein paar Monaten habe ich beschlossen, mich mit Subversion vertraut zu machen, und jetzt schwöre ich darauf.
Dalin Seivewright

1
Ich habe mehrere Soloprojekte: einige auf Github, andere nicht. Ich benutze immer git, auch wenn ich nur etwas für den ausdrücklichen Zweck des Lernens einer bestimmten API / eines bestimmten Tools baue. Es erzwingt gute Gewohnheiten für die realen Projekte, wo es nützlicher ist, wie @jbcolmenares beschreibt.
Sarumont

2
Ich werde mit hginit.com dem entgegenwirken, dass Sie "nicht mehr Zeit damit verbringen können, etwas anderes zu lernen" . Zählen Sie die Zeit, die Sie damit verbringen, eine Woche lang wütend auf svn zu sein, und nehmen Sie sich dann diese Zeit, um hginit in der nächsten Woche zu lesen.
tdammers

@tdammers wird einen Blick
cauchy

18

Sie sollten häufig festlegen. Sie sollten sich auf jeden Fall verpflichten, nachdem Sie einen logischen Meilenstein erreicht haben. Wenn dies länger als einen Tag dauert, sollten Sie sich mindestens am Ende Ihres Arbeitstages festlegen oder, noch besser, Ihre Arbeit in kleinere Stücke aufteilen.

Dafür gibt es viele Gründe. Was ist zum Beispiel, wenn Ihr Computer abstürzt? Es ist viel besser, nur einen Tag Arbeit zu verlieren als eine Woche oder einen Monat. Ein weiterer Grund ist, dass häufige Commits das Isolieren eines Fehlers erleichtern. Sie können eine binäre Suche durchführen und herausfinden, welche kleine Änderung den Fehler verursacht hat.

Eine andere Sache: Bevor Sie sich verpflichten, sollten Sie einen Vergleich anstellen und sich alle Änderungen ansehen, die Sie vorgenommen haben. So können Sie überprüfen, ob alle Änderungen sinnvoll sind und Sie nichts vergessen haben. Dies hilft Ihnen auch dabei, eine bessere Commit-Nachricht zu erstellen. Und dies ist natürlich ein weiterer Grund, sich häufig zu engagieren: Es ist viel einfacher, die Änderungen eines Tages durchzuarbeiten, als die eines Monats.


"Was passiert, wenn Ihr Computer abstürzt?" - Dateien werden häufig auf der Festplatte gespeichert und Backups werden jede Nacht erstellt (wenn Sie gemeint haben, dass die Festplatte kaputt ist). +1 für die binäre Suche nach Fehlern könnte sich jedoch als nützlich erweisen. Ich bin ziemlich gut darin, 95% meiner Bugs schnell zu finden. aber hin und wieder gibt es den wirklich bizarren Bug, der sich aus einer scheinbar unwichtigen Änderung in einem anderen Teil des Programms ergibt.
Dr. jimbob

Ja, ich meine "wenn die Festplatte kaputt geht", "wenn die Decke einbricht" oder "wenn ein EMP-Gerät in der Nähe ausfällt". :) Alles, was zu Datenverlust führen kann. Ein Commit ist häufig die einfachste Möglichkeit, Ihre Arbeit zu sichern. Außerdem können Sie mithilfe eines Remote-Versionskontrollservers problemlos eine Offsite-Sicherung durchführen.
Dima

1
@Dima: Sie müssen Push und nicht nur ein Commit durchführen, um ein Backup zu haben
liberforce

@liberforce Nicht alle Versionskontrollsysteme verfügen über Push-Vorgänge. Diese Antwort stammt aus dem Jahr 2012. Ich habe zu der Zeit Subversion verwendet, die nicht verteilt ist. Also kein Schubs.
Dima

2
@Dima: Sicher, aber das OP verwendete Git, sodass die Anweisungen irreführend sein könnten, da Sie nicht gesagt haben, dass Sie über SVN sprechen.
Liberforce

10

Um CVS optimal zu nutzen, sollten Sie jeweils an einem Feature / Bugfix arbeiten und ein Commit durchführen, wenn dieses Feature / Bugfix abgeschlossen ist. Auf diese Weise erhalten Sie:

  • Commit-Nachrichten lassen sich einfacher erstellen und sind sinnvoller.
  • leichtere Rückverfolgung zukünftiger Fehler bis zu den Änderungen, die sie eingeführt haben;
  • Einfacheres Wiederherstellen eines vorherigen Status (auch wenn dies bedeutet, dass ein ausgefallenes Feature verloren geht, die danach aufgetretenen Fehlerbehebungen jedoch beibehalten werden).

Da Sie zwischen PCs wechseln, sollten Sie mindestens zwei Zweige haben:

  • ein "Ready to go" -Zweig, der immer funktioniert (abgesehen von den Fehlern, an denen Sie im Entwicklungszweig arbeiten, natürlich)
  • Ein Entwicklungszweig, der sich von Zeit zu Zeit in einem nicht ausführbaren Zustand befindet (wie auf Ihrer Heimreise von der Arbeit;).

1
+1 für die einsatzbereite Filiale! Ich weiß nicht, wie oft ich gebeten werde, die Software zu zeigen, wenn der Chef und potenzielle Kunden vorbeikommen. Es ist schön, eine Version zu haben, die tatsächlich funktioniert und nicht im Fluss ist.
Bluebill

Eine Version, die funktioniert und in der Regel getestet wird, ist mit Tags versehen. Das sollten Sie zeigen, es sei denn, der Chef möchte die neuesten Änderungen sehen. In diesem Fall müssen Sie nur git stashzeigen, was Sie haben, oder ein bestimmtes Commit auschecken. Wenn Sie große Änderungen in Arbeit haben, sollten sich diese natürlich in einem separaten Zweig in Arbeit befinden, sodass Ihr Master-Zweig der de facto stabile Zweig ist.
Liberforce

7

Sollte jede einzeilige Änderung ein Commit erhalten?

Wenn das ist, was einen Fehler behebt, sicher.

Was verpasse ich, wenn ich schlechte VCS-Gewohnheiten habe?

Ich habe mit einem Typen gearbeitet, der "schlechte VCS-Gewohnheiten" hatte. Er liebte es, alleine zu arbeiten und war verantwortlich für eine Produktlinie, die ungefähr 1.000.000 USD / Jahr einbrachte. Er würde nur dann etwas unternehmen, wenn der Chef ihn nörgelte. Dann stürzte eines Tages seine Festplatte ab. Nachdem wir einen Ersatz für ihn eingerichtet hatten, stellten wir fest, dass sein letzter Check-in 6 Monate zuvor war. Da das VCS Source Safe war, können Sie erraten, was sonst noch schief gelaufen ist - das letzte Commit war beschädigt. Wir mussten mehr als ein Jahr zurückgehen, um eine unbeschädigte Version seiner Produktlinie zu erhalten. Er wurde nicht gefeuert, obwohl er hätte sein sollen.

Eine andere Anekdote betrifft mich. Früher habe ich Code für Hobby- und Forschungsprojekte auf Wechseldatenträgern gespeichert. Eines Tages wurde in meine Wohnung eingebrochen. Der Laptop (der kaputt war) und alle austauschbaren Festplatten wurden gestohlen. Jede DVD (mit Ausnahme von Red Dawn) wurde gestohlen. Keiner der Desktop-Computer wurde gestohlen. Wenn ich eine externe Quellcodeverwaltung hätte, hätte ich keine Projekte im Wert von 15 Jahren verloren, zumal einige auf akademischen Projekten beruhten - viele der Profis verließen die akademische Welt, um in die Privatwirtschaft zu gehen, und diese Projekte verschwanden in einem unternehmensweiten schwarzen Loch verlorener Code nicht wiederherstellbar.

Wie oft sollte ich mich verpflichten?

Ich zerlege es in ein paar Metriken:

  • Wie viel Arbeit sind Sie bereit zu verlieren, wenn Ihr Computer ausfällt? oder gestohlen wird?

  • Wenn dies Bug_1234 behebt, checken Sie den Code mit dem Kommentar "fixes Bug_1234" ein.

  • Wenn es sich um eine logische Übermittlung / einen logischen Meilenstein handelt, checken Sie ihn mit einem Kommentar wie "Bug_1234, form_xyz" (oder Task_1234 entsprechend) ein.

  • Checken Sie den Code immer am Freitagabend ein, bevor Sie nach Hause fahren. Machen Sie auch einen Check-in (oder machen Sie den Checkout rückgängig), bevor Sie in den Urlaub fahren.

  • Wann immer es die Unternehmensrichtlinie vorschreibt.


1
Ich bin damit einverstanden, dass der Kerl hätte gefeuert werden sollen. Nicht zu verpflichten, auch nicht für die Veröffentlichungen, ist Wahnsinn. Wie können Sie Fehler finden, die in Version 1.2 aufgetreten sind, wenn Sie nicht wissen, welcher Code in Version 1.2 enthalten ist? Kopierte der Typ nur den Code und zippte auf seiner Festplatte?
Liberforce

5

Denken Sie nicht an die Anzahl der Zeilenänderungen. Denken Sie in Funktionsblöcken. Mit VCS können Sie eine Überschrift an einer zentralen Stelle für jeden Funktionsblock angeben, sodass Sie leicht sehen können, was hier passiert ist, z. B. mit dem Git-Protokoll.

Außerdem können Sie mit IDEs wie Eclipse auf eine bestimmte Linie zeigen und zu dem Commit wechseln, das sie in die Form gebracht hat, die Sie sehen. Mit anderen Worten, Sie können direkt von einer Quellzeile zum Festschreiben wechseln. Wenn das Commit klein ist und eine gute Nachricht enthält, ist es viel hilfreicher als "Tonnen von Fehlern behoben".


4

Ich würde sagen, das größte Problem, das Sie beim Gruppieren von Änderungen verpassen, ist die Möglichkeit, herauszufinden, wann und wo Fehler aufgetreten sind.

Nach meiner Erfahrung ist ein Fehler zwei bis drei Wochen nach seiner Einführung aufgetaucht, und es ist so lange nach der Einführung schwierig, die Commits einer Woche durchzuarbeiten. In diesen Fällen war es hilfreich, die Commits einfach binär zu durchsuchen, um herauszufinden, welche individuelle Änderung das Problem verursacht hat. Bei diesen Fehlern handelte es sich hauptsächlich um Fehler bei der Speichernutzung von C ++ - Code, sodass sie in Ihrem Projekt möglicherweise nicht so häufig auftreten.

Bei der Entwicklung in einem Team kommen weitere Vorteile zum Tragen: einfache Festschreibungskommentare, einfachere Zusammenführungen, Zuordnung von Festschreibungen zu Fehlerkorrekturen usw.

Ich nehme an, dass Sie, wenn Sie täglich oder halbtäglich mit dem Commit beginnen, mithilfe von Tags oder Lesezeichen verfolgen müssen, welche Codeversion auf der Live-Site verwendet wird. Ich würde sagen, das ist das Wichtigste, um den Überblick zu behalten.


4

Ich bin auch ein Solo-Entwickler, ich benutze SVN und ich liebe es. Ich habe sogar ein Tool geschrieben, mit dem ich die Struktur meiner Datenbank und die darin enthaltenen Testdaten in XML konvertieren kann, damit ich diese in die Quellcodeverwaltung einbeziehen kann.

Normalerweise verpflichte ich mich, wenn ich eine autonome Arbeitseinheit abgeschlossen habe. Wenn ich hier und da ein paar triviale und nicht verwandte einzeilige Korrekturen durchführe, gebe ich manchmal alle zusammen, aber wenn eine einzeilige Korrektur zufällig zwischen zwei nicht verwandten großen autonomen Arbeitseinheiten auftritt, erhält sie ihre eigenen begehen, daran ist nichts auszusetzen.

Außerdem gebe ich immer Code ein, der kompiliert, und fast immer Code, der auch alle grundlegenden Tests besteht. Wenn nicht, stelle ich sicher, dass die Commit-Nachricht "DOES NOT WORK" enthält. Der einzige Fall, in dem dies passiert, ist, dass ich wichtige Änderungen vorgenommen habe, die ich nicht verlieren möchte, obwohl sie noch nicht ganz funktionieren, und außerdem bin ich kurz davor, mich auf ein großartiges Refactoring-Abenteuer einzulassen, bei dem ich nicht sicher bin, ob es wird erfolgreich sein. Ich verwende das Repository also als Backup meiner bisherigen Arbeit, bevor ich riskiere, es zu vermasseln und wegzuwerfen.

Dies bedeutet, dass ich immer festschreibe, wenn mein Quellcode festgeschrieben werden muss. Es macht absolut keinen Sinn, morgendliche oder abendliche Festschreibungsregeln zu haben. Es ist der Zustand, in dem sich der Code befindet, der vorschreibt, ob es Zeit für ein Commit ist oder nicht.

Die Nachrichten, die Sie in das Repository stellen, sind unwichtig. Wenn Sie sich absolut nichts Bedeutendes einfallen lassen, ist es immer noch besser, eine leere Nachricht festzuschreiben, als überhaupt nichts festzuschreiben, wenn Sie sollten.

Wenn Ihnen keine gute Commit-Nachricht einfällt, weil alles, was Sie sich einfallen lassen, dumm klingt, denken Sie daran, dass dies in Ordnung ist. Es wird erwartet, dass Commit-Nachrichten das Offensichtliche angeben, so dass sie für Sie beim Schreiben dumm klingen. Aber glauben Sie mir, wenn Sie einen Monat später alte Revisionen überprüfen müssen, sind Sie dankbar, dass selbst die dummen Nachrichten keine Nachrichten enthalten.


1

Übernehmen Sie jedes Mal, wenn Sie eine "logische" Änderung vornehmen. Wenn Sie beispielsweise eine neue Funktion implementieren, tun Sie dies Schritt für Schritt. Jeder dieser Schritte hängt normalerweise voneinander ab. Sie können diese Schritte also einfach separat festschreiben und in der Festschreibungsmeldung erläutern, warum jeder Schritt erforderlich ist.

Die Commit-Nachricht ist wirklich wichtig. Sie müssen vermeiden, zu sagen, was Sie tun, und erklären , warum Sie es tun. Der Code dokumentiert die Änderungen bereits, aber in 6 Monaten werden Sie froh sein zu sehen, warum Sie sie durchgeführt haben.

Dies ist auch nützlich, wenn zufällig jemand einspringt und Sie nicht mehr alleine sind. Selbst für Sie macht es eine saubere Historie einfacher, a zu verwenden, um git blamezu wissen, wann und warum diese fehlerhafte Zeile geändert wurde.

Durch kleine Festschreibungen anstelle von großen Schlammballenänderungen können Sie auch den Zwischenzustand testen. Sie können die Änderungen verwahren, wenn Sie dringend etwas freigeben müssen. Wenn Sie einen Fehler einführen, während er zuvor funktionierte, können Sie ihn verstecken und prüfen, ob es Ihre nicht festgeschriebenen Änderungen sind, die den Fehler auslösen, oder ob dies in einem älteren Commit enthalten war.

Sie können auch die Kraft entfesseln git bissect, die Ihnen die Festschreibung dieses bösen Fehlers verrät. Wenn das Festschreiben 2.000 Zeilen lang ist, hilft es immer noch, aber nicht so viel ...

Eine andere Sache ist, dass dies der erste Schritt für die kontinuierliche Integration (CI) und anschließend für die kontinuierliche Bereitstellung (CD) ist. CI und Ihre Tests können bei einem neuen Commit ausgelöst werden, wodurch Sie jedes Mal benachrichtigt werden, wenn Sie Ihre Änderungen vornehmen, ob sie zu Problemen führen oder nicht. Auf diese Weise können Sie feststellen, ob die Bereitstellung sicher ist oder nicht, und Sie werden sofort darüber informiert, wenn das Problem auftritt, und nicht erst vor Ihrer Veröffentlichung, wenn Sie in Eile sind.

Zu Ihren anderen Fragen:

  • Legen Sie keine Dinge fest, die Sie nicht einmal kompiliert haben, es sei denn, Sie sind bereit, Ihren Verlauf dafür umzuschreiben (mithilfe von git rebase --interactive).
  • Eine einzeilige Änderung verdient eine Festschreibung, wenn sie einen separaten Zweck hat (behebt einen Fehler oder hat nichts mit Ihren derzeit nicht festgeschriebenen Änderungen zu tun). Verwenden Sie git add --patch, um diese zu inszenieren.
  • Sie müssen sich nicht zwingen, sich vor dem Abendessen zu verpflichten, es sei denn, Sie haben wichtige Dinge, die Sie sich nicht leisten können, zu verlieren. In diesem Fall möchten Sie Ihre laufenden Arbeiten möglicherweise in einem separaten Zweig festschreiben.
  • Das Festschreiben und Übertragen auf ein Remote-Repository ist eine Sicherung. Wenn Sie sich nur einmal pro Woche verpflichten und pushen, können Sie im schlimmsten Fall eine Woche Arbeit verlieren.

0

Wie oft sollte ich mich verpflichten?

Als Solo-Entwickler verpflichte ich mich in der Regel immer dann, wenn ich das Gefühl habe, nach einem Basistest eine wesentliche Änderung vorgenommen zu haben, und wenn ich am Ende der Nacht ein Projekt verlasse.

Sollte jede einzeilige Änderung ein Commit erhalten?

Nein, es sei denn, diese einzeilige Änderung wird eine Funktion oder einen Fehler erheblich verändern.

Sollte ich mich vor einem Test verpflichten (zB zumindest für Syntax- / Kompilierungsfehler und muss es dann komplett rückgängig machen; da die Idee nicht funktioniert hat oder die Nachricht eine Lüge ist)?

Wahrscheinlich nicht. Zumindest für mich teste und codiere ich den größten Teil auf einer 'Arbeitskopie' und verpflichte mich, nachdem ich mit meinen Änderungen zufrieden bin. In vielen IDEs wird mir angezeigt, was sich geändert hat, bevor ich das Commit ausgeführt habe, und ich kann dem Commit Notizen hinzufügen

Sollte ich sicherstellen, dass ich mich jeden Morgen / Nachmittag verpflichte, bevor ich aufhöre, zum Abendessen zu arbeiten, solange es noch frisch ist? Was verpasse ich, wenn ich schlechte VCS-Gewohnheiten habe?

Ich bin nicht sehr vertraut mit VCS oder welchen schlechten Gewohnheiten es verursacht. Ich glaube, ich habe meine Meinung dazu in der Antwort auf die erste Frage größtenteils geteilt.

Als Antwort auf die allgemeine Frage, die gestellt wurde, verwenden Sie anscheinend hauptsächlich Commits als Zweige, die in einem anderen Antwortpost angesprochen werden. Ich bin mir nicht sicher, welche IDE Sie verwenden, die einen guten Rückgängig-Verlauf usw. hat, aber ich habe keine gefunden, die nach einem Neustart der IDE und einem Wechsel zwischen Computern meines Erachtens gut war.


I am not very familiar with VCS or what bad habits it causes.Du Glückspilz!
Yannis

1
Ich bin mir nicht sicher, wie ich das mehrmals falsch gelesen habe, aber ich las das weiterhin als 'VSS' wie in Visual Source Safe. Ich bin ziemlich vertraut mit einigen verschiedenen Versionskontrollsystemen, einschließlich SVN und GIT, und benutze sie häufig als Einzelentwickler, habe aber wahrscheinlich ein paar schlechte Angewohnheiten, wenn ich bedenke, dass ich sie im Kontext eines großen Szenarios mit mehreren Entwicklern nicht wirklich verwendet habe .
Dienstag,

Nun, da ich seit mehr als 3 Jahren mit SourceSafe kämpfe, lautet mein Kommentar immer noch: Lucky you! Zum Beispiel könnte VSS6 mit Repositorys von ca. 200 MB - 300 MB umgehen. Wenn Sie Glück haben, würden einige Dateien zufällig beschädigt. Natürlich gab es dort mehrere Fehlerbehebungen und Problemumgehungen, und VSS war von MS nie als vollwertiges VCS gedacht, aber Sie können sich glücklich schätzen, dass Sie sich nie damit befassen mussten ...
yannis

0

Ich bin ein gewohnheitsmäßiger Committer und habe festgestellt, dass das zu mir passt, aber zugegebenermaßen sind meine Commit-Nachrichten fast immer wie folgt:

Age:  9 mins [*] Working on implementing and testing PaintSystem.
Age: 17 mins [*] Working on implementing and testing PaintSystem.
Age: 37 mins [*] Working on implementing and testing PaintSystem.
Age: 52 mins [*] Working on implementing and testing PaintSystem.

Daher kann ich nicht genau sagen, dass solche häufigen und gewohnheitsmäßigen Festschreibungen für meinen Zweig (Quecksilber) genau die detailliertesten Festschreibungsprotokolle gefördert haben. Manchmal gebe ich sogar Code zur Hälfte ein, wenn meine Frau mich zum Abendessen auffordert. Dann kopiere ich die vorherige Commit-Nachricht "Working on [...]" und verwende sie.

Meine Commit-Log-Muster sind in der Regel wie folgt: "Working on [...] Working on [...] Working [...] Completed [...] Started working on [...] Working on [...] Completed [...] Started working on [...]"

Auf der anderen Seite hat es meinen Hintern gerettet. Manchmal stoße ich auf einen Randfall, den ich nicht vorhergesehen und getestet habe. An diesem Punkt helfen mir die häufigen Commits, herauszufinden, wo genau ich den Fehler eingeschleust habe.

Ich kenne die besten Gewohnheiten nicht und bin sicherlich nicht derjenige, der sich die idealen Commit-Protokollierungsgewohnheiten ansieht, aber ich kann mit Sicherheit sagen, dass ein häufigeres Commit auf jeden Fall hilfreich sein kann, wenn Sie eine Regression durchführen müssen.

Sollte jede einzeilige Änderung ein Commit erhalten?

Ich habe vorher einzeilige Änderungen vorgenommen, aber normalerweise schwierige, und vielleicht hatte ich zu wenig Zeit. Meine Verpflichtungen ähneln nicht immer perfekten und vollständigen Arbeitseinheiten oder Veränderungen. Wie gesagt, manchmal sind sie nur das Ergebnis meiner Frau, die mich unerwartet zum Abendessen auffordert.

Viele meiner Commits, die diesem "Working on [...]"Protokollmuster folgen, sind keine kohärenten Veränderungseinheiten (weshalb ich mir oft keine bessere Botschaft einfallen lassen kann als "Working on [...]"), sondern nur das Ergebnis einer Verschnaufpause, als würde ich mir eine Tasse Kaffee machen. Die "Completed [...]"Nachricht zeigt das Ende dieser Arbeitseinheit an, und dort schreibe ich oft eine viel detailliertere Nachricht zusammen mit den "Started working on [...]"Nachrichten des ersten Typs, wenn ich gerade anfange, an etwas zu arbeiten. Wenn Sie durchschnittlich alle 15 Minuten Commits durchführen, sind diese [...] "Arbeiten an" -Nachrichten eher wie Zwischenmeldungen für das, was jemand in einem umfangreichen Commit mit einer detaillierteren Nachricht festschreibt.

Sollte ich mich vor einem Test verpflichten (zB zumindest für Syntax- / Kompilierungsfehler und muss es dann komplett rückgängig machen; da die Idee nicht funktioniert hat oder die Nachricht eine Lüge ist)?

Ich gehe einfach vor und lege es fest, bevor ich manchmal sogar Tests durchführe (erneut, wenn ich ein unerwartetes Ereignis hatte). Auch wenn ich alleine bin, drücke ich auf einen Server (nur einen, der hier zu Hause in einem LAN läuft), der CI ausführt. Das mag übertrieben erscheinen, aber keine Ahnung, ich habe mich daran gewöhnt, mich an meinen früheren Arbeitsplätzen darauf zu stützen. Außerdem möchte ich nicht jedes Mal alle Geräte- und Integrationstests von Hand ausführen müssen. Ich mag es, wenn das alles nur mit Druck zu tun hat. Wenn ein Test fehlschlägt, ist es einfach genug, vorwärts zu arbeiten, wo ich die Regression durchführe, den Fehler in der letzten Version zu korrigieren und weiterzumachen. Das heißt, ich erstelle den Code gegen einen Debugbuild, bevor ich festschreibe.

Sollte ich sicherstellen, dass ich mich jeden Morgen / Nachmittag verpflichte, bevor ich aufhöre, zum Abendessen zu arbeiten, solange es noch frisch ist?

Ich setze mich gerne ein, bevor ich rausgehe und eine Pause zwischen dem Programmieren mache. Ich habe nicht wirklich darüber nachgedacht, warum genau, bis ich auf diese Frage gestoßen bin. Ich nehme an, es soll verhindern, dass ich dort, wo ich aufgehört habe, ohne ein Commit-Protokoll weitermache, anstatt dort, wo ich aufgehört habe, dass ich mich unterscheiden kann und so weiter. Hmm, ich muss darauf zurückkommen, da es theoretisch vielleicht nicht nötig ist, wenn man bedenkt, wie oft ich mich verpflichte. Ich fühle mich immer noch wohler beim Festlegen und Schieben, bevor ich den Computer aus irgendeinem Grund verlasse. Einiges davon könnte die frühere psychologische Angst vor, sagen wir, Der Computer brennt, nachdem ich gegangen bin und Projektmanager in den Tagen, in denen wir SVN mit den Entwicklern verwendet haben, manchmal wochenlang beschäftigt waren, ohne uns den Hals runterzureißen und uns ständig daran zu erinnern, den Code so oft wie möglich einzuchecken, während wir uns daran erinnern Unser Code ist Eigentum des Unternehmens. Es ist auch ein bisschen effizienter, vor allem beim Pushing, damit mein CI-Prozess alle Tests ausführen kann, während ich nicht da bin, damit ich zurückkehren und die Ergebnisse sehen kann.

Oh, und manchmal betrinke ich mich nach meiner Abreise etwas und es ist normalerweise eine schlechte Idee, zu versuchen, komplexen Code zu schreiben, während ich mich betrunken fühle (wenn auch nicht immer). Einmal hatte ich ein wirklich nettes Kontextmenüsystem, nachdem ich mich betrunken hatte. aber ich hatte nur 6 Bier und es war nicht so komplex zu codieren). Wenn ich das versuche, habe ich zumindest den nüchtern geschriebenen Code festgeschrieben, bevor ich ging, um zurückzukehren, anstatt den betrunkenen Code mit dem nüchternen Code zu mischen. An diesem Punkt könnte mein Festschreibungsprotokoll so lauten, dass "Reverting back to code written before Jagermeister shots."ich das nicht tue Sehr häufig, es sei denn, ich hatte eine betrunkene Code-Inspiration, aber in diesen seltenen Fällen hat es wirklich geholfen, dass ich etwas begangen habe, bevor ich ausgegangen bin und mich betrunken habe.


Faustregel für Sie: Wenn Sie zwei aufeinanderfolgende Commits mit identischen Nachrichten haben, machen Sie das mit ziemlicher Sicherheit falsch. Entweder sollten sie ein Commit sein, oder Sie sollten herausfinden, was an ihnen anders ist, und Protokollnachrichten schreiben, die diesen Unterschied widerspiegeln (z. B. "Neue Lackdaten definieren" und "Lackdaten richtig einstellen" anstatt "Lacksystem bearbeiten" x2).
Marnen Laibow-Koser
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.