Zur Verbesserung der Commit-Praktiken


8

Ich dachte über Möglichkeiten nach, meine Commit-Praktiken zu verbessern.

Gibt es eine Beziehung zwischen Nr. von Quellcodezeilen und Nr. von Commits?

In einem kürzlich durchgeführten Projekt, an dem ich beteiligt war, wurden 30 Commits pro 1000 Zeilen ausgeführt.

Eine typische Datei aus dem Projekt enthält diese Statistiken

language: JavaScript
total commits that include this file: 32

total lines: 1408
source lines: 1140
comment lines: 98

no. of function declarations: 28
other declarations: 8

Eine andere Datei hat diese ...

Language: Python
total commits that include this file: 17

total lines: 933
source lines: 730
comment lines: 80

classes: 1
methods: 10

Ich denke auch, dass nein. von Commits ist eher verwandt mit Nr. von Funktionen oder nein. von Änderungen am Code und weniger an der Nr. von Linien.

Das allgemeine Motto der Git-Community lautet: kurze Commits machen und oft Commits.

Denken Sie also wirklich über Ihre Commit-Strategie nach, bevor Sie mit dem Projekt beginnen? Gibt es so etwas wie eine Commit-Strategie? Wenn ja, was ist deins?


In Bezug auf Ihre Frage zur Beziehung zum Festschreiben von Codezeilen gibt es den folgenden Artikel, den Sie möglicherweise interessant finden: Verwendung relativer Code-Abwanderungsmaßnahmen zur Vorhersage der Systemfehlerdichte
Joshua Drake

Antworten:


8

Wenn Sie ein DVCS verwenden, sollten Sie sich sehr oft festlegen. Ich schreibe jedes Mal fest, wenn sich mein Code in einem stabilen Zustand befindet, der nicht mit Codezeilen zusammenhängt. Sie möchten einen Baum mit vielen kleinen atomaren Commits, mit denen Sie leicht erkennen können, was Sie in den einzelnen Commits getan haben. Wenn Sie versuchen, eine Regression aufzuspüren, die Sie beim Testen gefunden haben, ist es viel einfacher, eine binäre Suche durchzuführen und das genaue Commit aufzuspüren, da Sie weniger Änderungen pro Commit haben. Ich verpflichte mich nur, wenn mein Code kompiliert wird. Meine Vorstellung von "atomar" ist, dass er kompiliert, die Regressionstests besteht und einen schnellen Integrationstest besteht. Manchmal ist ein Komponententest enthalten, manchmal nicht.

Wenn Sie pushen, sollten Sie ganze Funktionen pushen. Der Rest der Welt möchte nicht, dass Ihre "verpassten Eincheckvorgänge in dieser Datei" jeden Tag begangen werden. Mit Git rebasekönnen Sie Ihren Commit-Baum bereinigen, indem Sie mehrere Commits zusammenfassen. Die Community scheint sich nicht sicher zu sein, wie viel Geschichte Sie begehen sollten. Ich würde sagen, Sie sollten die Commits zusammenfassen, die keinen Verlauf anzeigen, wie "verpasste Datei" oder "dumme Regression". Sie möchten eine so saubere Geschichte wie möglich präsentieren, damit jeder leicht sehen kann, was Sie getan haben.

In einem zentralen Versionskontrollsystem müssen Sie viel mehr festlegen, wenn Sie eine gute Historie führen möchten. Ich empfehle, dass Sie an kleineren Funktionen arbeiten und diese so oft wie möglich ausführen, bevor Sie sich verpflichten. Ihr Konzept von "atomar" sollte hier eine Funktion sein, die funktioniert und getestet wird. Sie möchten nichts festlegen, das die Arbeitsbereiche anderer Entwickler beschädigt, da diese häufig aktualisiert werden und es viel schwieriger ist, an unabhängigen Funktionen zu arbeiten, die sich überschneiden. Sie werden weniger festschreiben, aber diese Festschreibungen sind normalerweise fleischiger als Ihr durchschnittliches DVCS.

Sie können sehen, dass das Verhältnis von Codezeilen zu Anzahl der Commits davon abhängt, wie groß Ihre Funktionen sind und welchen Workflow Sie verwenden. Ihr Workflow hängt davon ab, welches Versionskontrollsystem Sie verwenden. Daher können Sie im Allgemeinen nicht vorhersagen, wie Ihre Commits aussehen werden. Jede Institution hat ihren eigenen Standard und sollte selbst bestimmen, wie ihr Workflow im Idealfall aussehen soll.


5

Ich hatte Commits für Fehlerbehebungen, die einen Charakter geändert haben . Größe ist hier nicht wirklich der bestimmende Faktor. Eine gute Faustregel ist das Festschreiben, wann immer Sie an eine sinnvolle Festschreibungsnachricht denken können. Wann Sie Ihre Commits teilen, ist eine andere Frage. Dies hängt von der Kultur Ihrer Gruppe ab, beinhaltet jedoch im Allgemeinen, dass Sie ziemlich sicher sind, dass Ihre Änderungen wie beabsichtigt funktionieren.


2

Ich denke nicht, dass die Anzahl der Commits mit der Zeilennummer zusammenhängen sollte. Wahrscheinlicher für gelöste Probleme / eingeführte Funktionen. Ich benutze diesen ziemlich einfachen Ansatz (git):

  • Festschreiben häufig in der lokalen Niederlassung, jedoch nur, wenn sich etwas Relevantes ändert (rätselhaftes Problem behoben, wenige wichtige Dateien / Funktionen hinzugefügt). Auf diese Weise können Sie problemlos zwischen den Schritten navigieren, die Sie zur endgültigen Lösung Ihrer Arbeit zu einem bestimmten Zeitpunkt geführt haben.
  • Führen Sie lokale Commits beim Senden an ein Remote- / öffentliches Repository zu einem einzigen funktions- / problembezogenen Commit zusammen. Auf diese Weise ist alles, was Sie an der Öffentlichkeit getan haben, gut beschrieben und kohärent, sodass jeder weiß, was Sie getan haben (oder zumindest eine kurze Idee hat).

Alles, was Sie vor Ort tun, ist für Sie - bleiben Sie bei dem Ansatz, der für Sie funktioniert. Öffentliche Verpflichtungen sollten durchdachter sein, aber ich würde keine ganz neue Strategie entwickeln, wenn das Team bereits einen Arbeitsansatz hat. Bleiben Sie im Einklang mit anderen.


2

Übernehmen Sie für die Nachwelt alle Dateien, die sich auf einen Fehler / eine Funktion beziehen, in einer Revision. Dies wird Ihnen später immens helfen, wenn Sie wissen müssen, welche Dateien berührt wurden, um einen Fehler zu beheben.

Dies erleichtert es Ihnen, zurück zu gehen und zu sehen, was Sie getan haben, um 5 Dateien zu sehen, die unter Fehler Nr. 783 eingecheckt wurden, anstatt zu versuchen, 5 Commits aufzuspüren (eines für jede Datei). Dies kann behoben werden, wenn Sie eine bessere Integration von Quellcodeverwaltung / Workflow haben, die einen Check-in mit einem Job- / Fehler- / Feature- / Backlog-Element verknüpft. Immer noch häufig festschreiben, aber verwandte Dateien / Funktionen jedes Mal beim gleichen Check-in einfügen.

Wenn Sie Ihr CI für "Jedes Commit erstellen" eingerichtet haben, hilft Ihnen dies dabei.

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.