Was ist der Begriff für ein wirklich BIG-Source-Code-Commit? [geschlossen]

37

Wenn wir den Commit-Verlauf einer Software überprüfen, stellen wir manchmal fest, dass es einige wirklich GROSSARTIGE Commits gibt - sie können 10 oder 20 Dateien mit Hunderten von geänderten Quellcodezeilen (Delta) ändern. Ich erinnere mich, dass es einen allgemein verwendeten Begriff für ein solches BIG-Commit gibt, aber ich kann mich nicht genau erinnern, was dieser Begriff ist. Kann mir jemand helfen? Was ist der Begriff, den Programmierer normalerweise verwenden, um sich auf ein solches BIG und Riesen-Commit zu beziehen?

Übrigens, ist es eine gute Praxis, eine Menge Änderungen vorzunehmen?

UPDATE: Vielen Dank für die anregende Diskussion! Aber ich denke, "Codebombe" ist der Begriff, den ich suche.

Ida
quelle
15
Msgstr "Commit brechen". :-)
Peter K.
3
Persönlich würde ich ein Commit dieser Größe acluster f...
Ramhound
1
Mein Chef macht das die ganze Zeit. Kommentar zum Check-in: "everything; o)"
MetalMikester
+1 für die Frage, weil ich jede Antwort bis jetzt liebe und gelitten habe, indem ich mindestens eine der Sünden mindestens einmal in meiner Karriere begangen habe und möchte, dass andere das nicht tun =)
Patrick Hughes
Ich könnte Code-Lawine sagen!
Brian

Antworten:

50

(1) Ben Collins-Sussman : "..." Codebomben ". Das heißt, was machen Sie, wenn jemand zu einem Open-Source-Projekt mit einem gigantischen neuen Feature auftaucht, dessen Erstellung Monate in Anspruch nahm? Wer hat die Zeit, dies zu überprüfen Tausende von Codezeilen? ... "

(2) Dan Fabulich : „The Code Bombe, oder: Der Neuling mit großen Ideen ... Ein Code Bombe ist ein Patch, der so groß ist , dass niemand es überprüfen können.“

(3) Google Summer of Code: Richtlinien : "Früh festschreiben, oft festschreiben ... Bitte nicht den ganzen Tag arbeiten und dann alles in einer einzigen Codebombe rausschieben . Stattdessen sollte jedes Festschreiben nur für eine Aufgabe abgeschlossen sein was in der Protokollnachricht zusammengefasst werden sollte. "

(4) Jeff Atwood : „Code-Bomben ... Regel # 30: Do not go dunkel ....

David Cary
quelle
Link 2 und 4 direkt Link und Zitat Link 1. Nichts falsch mit dem Konzept zu verbreiten, aber es ist ein bisschen weniger relevant. Ich mag den Begriff, aber es scheint nicht so sehr aufgeholt.
Haylem
1
Was ist, wenn der festgeschriebene Code ein neuer Code ist, der vom Rest des Projekts völlig isoliert ist? In diesem Fall denke ich, dass ein einziges großes Commit von (fast) fertiggestelltem und aufgeräumtem Code besser ist als viele kleine Commits, die die Leute zwingen, (1) Zwischen-Bugfixes zu überprüfen, (2) Umgestaltungen wie Umbenennen von Klassen und so weiter, ( 3) Vorläufiger Code, der schließlich gelöscht wird. Nur meine 2 Cent.
Giorgio
Aus diesem Grund bin ich gegen das Umschreiben / Umbasieren der Geschichte
dukeofgaming
@ Giorgio - dafür sind Branchen da.
Brian
@ Brian: Ja, das ist eine Möglichkeit. In diesem Fall haben Sie ein großes Commit für den Hauptzweig, wenn Sie die Funktionen zusammenführen, die Sie für den Zweig entwickelt haben.
Giorgio
38

Wir nennen es wahrscheinlich ein schlechtes Commit . :)

Schlechte Praxis

Und ja, das würde im Allgemeinen als schlechte Praxis angesehen , da es die negativen Auswirkungen hat von:

  • es schwierig zu überprüfen machen ,
  • es schwierig zu machen, die ursprüngliche Absicht des Commits einfach und schnell zu erfassen ,
  • Es ist schwierig zu erkennen, wie sich dies auf den Code auswirkt, wenn ein Problem explizit behoben oder behoben wird.
  • Dies erschwert die Feststellung, ob die Größe des Commits auf das Rauschen anderer möglicherweise nicht zusammenhängender Änderungen zurückzuführen ist (z. B. kleine Aufräumarbeiten oder andere Aufgaben).

Akzeptable Fälle

Es kann jedoch Fälle geben, in denen umfangreiche Commits durchaus akzeptabel sind . Zum Beispiel:

  • beim Zusammenführen über Zweige hinweg ,
  • Wenn Sie neue Quellen aus einer anderen nicht versionierten Codebasis hinzufügen ,
  • Wenn Sie ein großes Feature direkt ersetzen (obwohl Sie dies lieber in einem Zweig tun sollten, wobei kleinere Commits verschiedene Teile der Änderung ansprechen und dann das Ganze wieder zusammenführen, damit Sie ein besseres Fenster für die inkrementelle Entwicklung von haben Funktion und die Probleme, die auf dem Weg aufgetreten sein könnten),
  • beim Refactoring einer API, die sich auf viele untergeordnete Klassen und Konsumentenklassen auswirkt.

Bevorzugen Sie daher, wann immer möglich, Commits vom Typ "chirurgischer Schlag" (und verknüpfen Sie sie mit Aufgaben-IDs in Ihrem Issue-Tracker!). Wenn Sie einen gültigen Grund haben, fahren Sie fort.


Abgesehen davon weiß ich es nicht und glaube auch nicht, dass ich jemals einen speziellen Namen für ein großes Commit gehört habe. Ein Monster-Commit? Ein Fat-Commit?

Update: Die Antwort von David Cary verweist auf namhafte IT-Akteure, die den Begriff "Codebombe" verwenden (vor allem Collins-Sussman, der ursprüngliche Schöpfer von Subversion ). So (obwohl ich bisher nicht sagen kann, ob ich es oft gehört habe).

Haylem
quelle
11
Ein Godzilla-Commit! Eeeeeeeek !!!
Péter Török,
@ PéterTörök: Gefällt mir. Machen wir daraus einen Trend. Andere Optionen: ein Wal-Commit, ein Gargantuan-Commit oder ganz einfach ein BigFatCommit.
Haylem
1
Ja, entweder "schlecht" oder "spät". Wenn es in Ihrem Unternehmen keinen Namen dafür gibt, benennen Sie ihn nach dem betreffenden Entwickler. "Hey, neuer Kerl, mach keinen Jerry! Lege früh fest und lege oft fest."
Chooban
Mach keinen Jerry, das ist ein nützlicher Ansatz! Massive Commits können auch von gestressten Entwicklern stammen, die nicht an die Verwendung der Versionierung glauben oder diese nicht verstehen. Überprüfen Sie das Wissen!
Unabhängige
Was ist, wenn jemand Jerry heißt?
Loïc Faure-Lacroix
12

Übrigens, ist es eine gute Praxis, eine Menge Änderungen vorzunehmen?

Nun, es ist keine gute Praxis, Änderungen für eine lange Zeit beizubehalten, eine Vielzahl von Funktionen und Fehlerkorrekturen zu implementieren und sie dann festzuschreiben. Dies ist eine Möglichkeit, wie ein großes Festschreiben erfolgen kann.

Dies kann auch passieren, wenn durch ein Refactoring die Signatur einer häufig verwendeten Funktion geändert wird und dann alle diese Funktionen geändert werden müssen. Das ist nicht unbedingt schlecht, und ich möchte nicht, dass Entwickler den Code bereinigen, weil sie befürchten, eine Schwelle zu überschreiten.

Es geht also um mehr als nur um die Anzahl der Dateien, die in einem Commit berührt wurden.

JohnMcG
quelle
5
Dies. Was wirklich zählt, ist nicht die Anzahl der geänderten Dateien oder die Anzahl der geänderten Zeilen, sondern der Umfang der Änderungen. Wenn Sie den Änderungssatz in einer kurzen Festschreibungsnachricht kurz und genau beschreiben können, ohne etwas auszulassen, ist die Anzahl der physischen Änderungen relativ belanglos. Nicht unwichtig, aber ich selbst hätte lieber ein großes Commit, das den Code aufbaubar hält, als eine Reihe von Commits, bei denen nur einige zu einem Quellcodebaum führen, der erstellt wird (vgl. Änderungen der Methodensignatur).
ein Lebenslauf am
8

Der Begriff, den ich gehört habe, ist "klobige Check-Ins" . Und ich bin kein Fan von ihnen. Ich mag kleinere Commits, die sicherstellen, dass bei vernünftigen Schritten in einem Projekt nichts anderes kaputt geht. Das große Engagement ist im Allgemeinen mit Problemen behaftet, die noch einige Zeit nachwirken, wenn dies nicht der Fall ist.

Jesse C. Slicer
quelle
+1, da ich mich damals nicht daran erinnerte (obwohl ich glaube, dass dies kein allgemeiner Begriff ist, oder ich weiß es nicht), aber ich habe das Wort "chunk" gehört, das speziell von mercurial in Bezug auf verwendet wurde Eine Erweiterung, die es ermöglicht, große Commits mit verschiedenen Datenblöcken einzureichen, aber ansonsten glaube ich, dass ich diesen Begriff für Commits im Allgemeinen nie gehört habe.
Haylem
Die Firma, bei der ich war, als der Entwickler diesen Begriff verwendete, verwendete SourceGear Vault.
Jesse C. Slicer
3

Ich nenne es "typisches SVN-Commit" oder "morgen ist Release-Tag-Commit".

So sehr ich SVN liebe, bin ich nur durch die Tatsache abgeschreckt, dass ich keine lokalen Commits machen kann.

BEARBEITEN: Sie haben normalerweise die Wörter "Zeug" und "Bier" in der Commit-Nachricht.

WIEDER BEARBEITEN: Viele Änderungen sind zwar nicht unbedingt eine schlechte Praxis, sollten aber so weit wie möglich vermieden werden. Ich finde es einfacher, eine Revision / Festschreibung zu überprüfen, die kurz und prägnant ist. (Gepaart mit einer gut geschriebenen Commit-Nachricht. Ein schlechtes Beispiel finden Sie in meiner vorherigen Bearbeitung.)

Bro Kevin D.
quelle
2

Ein "heißer, dampfender Klumpen Code". :-)

Ross Patterson
quelle
2
  • Initial Commit - Das Projekt, das nicht der Revisionskontrolle unterliegt und in SVN geworfen wurde
  • Refactoring - Der Architekt hat eine brillante Idee, Klassennamen von / nach Smurf Naming Convention zu ändern oder die Wurzel der Pakethierarchie zu ändern
  • Code-Format - Der Architekt hat beschlossen, den Code-Einzug von 4 auf 3 Stellen zu ändern oder die Zeilenenden von Unix auf Windows zu ändern (oder zurückzusetzen).
  • Freitags-Commit - Joe legt immer freitags um 16:30 Uhr seine gesamte Arbeitswoche fest
  • uuups commit - Ted hat versehentlich das Root-Verzeichnis gelöscht, dies bestätigt und pumpt nun wieder die gesamte Dateihierarchie in SVN
Donau Seemann
quelle
0

Normalerweise neigen viele Leute dazu, große Commits mit zentralem VCS durchzuführen, insbesondere der Server erzwingt gute Commit-Richtlinien. Das heißt, das Commit muss alle Tests bestehen und die Tests dauern länger (länger als einige Sekunden). Daher möchten Entwickler nicht so lange warten, um mehrere Commits durchzuführen und Änderungen in mehrere kleine Commits aufzuteilen.

Und Entwickler, die mit VCS nichts anfangen können, vergessen möglicherweise, Änderungen in mehrere kleine Commits aufzuteilen. Sie erinnern sich nur daran, sich zu verpflichten, wenn sie das Programm an das QA-Team weitergeben. Schlimmer noch, um zu vermeiden, dass andere den fehlerhaften Code sehen, verpflichten sie sich nicht, bevor sie den QS-Test erfolgreich bestanden haben. Zuletzt haben sie nicht bemerkt, dass sie Ausgabebinärdateien, temporäre Dateien und Linker-Ausgaben festgeschrieben haben, die wirklich zu einem "großen" Festschreiben führen.

linquize
quelle