Wie kann ich Commits in einem Versionskontrollsystem wie git gruppieren?

9

Warum gibt es keine Hierarchie anstelle eines langen Flat-Commit-Verlaufs? Auf der obersten Ebene haben Sie möglicherweise Pull-Anforderungen. Dann können Sie eine Ebene tiefer gehen und sich die Commits in dieser PR ansehen. Mir ist klar, dass PRs spezifisch für Github sind, aber Sie haben die Idee. Ich meine nur, zum Beispiel eine Reihe von Commits als Feature oder Bugfix zu gruppieren.

Sicherlich würde dies die Navigation im Commit-Verlauf erheblich vereinfachen.

Ich bin mir sicher, dass es eine offensichtliche Antwort auf diese Frage gibt, aber ich kann sie scheinbar nicht finden.

Eggbert
quelle
1
Eine Benutzeroberfläche könnte wahrscheinlich Commits für die Anzeige und Navigation gruppieren. Es scheint jedoch nicht universell genug zu sein, um den (sehr allgemeinen und Workflow-unabhängigen) Kern fest zu verdrahten.
Wenn die Commits logisch unterschiedlich sind, sollten sie nicht gruppiert werden. Wenn sie logisch Teil einer Änderung sind, sollten sie ein Commit sein (dafür ist das gesamte Rebase-Zeug gedacht). Und wenn sie verwandt sind, sind sie höchstwahrscheinlich nahe beieinander und trotzdem leicht zu finden.
Jan Hudec
Dies geschieht so, wie Sie es mit der Verwendung von Zweigen beschreiben, die Sie über Feature-Zweige nachlesen können.
iveqy
Fragen Sie die Leute, die Git entworfen haben. Ich bin sicher, sie wissen, warum sie ihre Designentscheidungen getroffen haben.
Jwenting
Ich stimme dem Poster konzeptionell zu. Die Tatsache , dass etwas in einer bestimmten Art und Weise funktioniert jetzt , bedeutet nicht , dass es sollte . Persönlich verwende ich häufig "Squash Merge", um mehrere Commits zu einem zusammenzufassen und in den Hauptzweig einzufügen. Der Detaillierungsgrad, den ich im Master sehen möchte, ist höher als beispielsweise in der Entwicklung. Das Problem dabei ist, dass es im Grunde keine Beziehung zwischen dem neu erstellten Squash-Commit und den Commits gibt, von denen es stammt. Ich kann mir durchaus vorstellen, mehrere Commits zu einem zusammenfassen zu können, was selbst ein Commit mit einem klaren Vorher und Nachher ist
Daniel Langdon

Antworten:

9

Es gibt einen langen Flat Commit-Verlauf, da die Änderungen sequentiell sind. Jeder baut auf dem Vorher-Zustand auf und hinterlässt einen Nachher-Zustand. Es wäre schwierig, Änderungen zu haben, die dies nicht widerspiegeln.

Eine Option zum Gruppieren verwandter Änderungen ist die Verwendung von Tags - http://git-scm.com/book/en/Git-Basics-Tagging. Sie werden jedoch eher zum Markieren eines Punkts im Verlauf als zum Gruppieren unterschiedlicher Commits verwendet.

Um Commits zu größeren Commits zusammenzufassen, können Sie auch interaktive Neugründungen durchführen.

Zweige sind eine Option. Sie können einen Zweig erstellen und eine Reihe von Commits ausführen, die logisch miteinander verbunden sind. Sie können diese Commits wie gewünscht wieder in Master zusammenführen - wahrscheinlich mithilfe der --no-ffOption.

Die Beziehung zwischen Zweigen kann auch in visuellen Werkzeugen wie gitg / gitx gesehen werden Geben Sie hier die Bildbeschreibung ein

Michael Durrant
quelle
0

Ich hatte das gleiche Problem, als ich darüber nachdachte, bis ich entdeckte, dass Git seine übergeordneten Zweige nummeriert . Vor diesem Hintergrund ist die in der Regel ärgerlich Merge Commits , die erzeugt werden kann Zusammenfassung Knoten betrachtet werden. Alle zusätzlichen Details können aus dem Blickfeld verbannt werden, sodass eine einzige, zusammengefasste lineare Historie verbleibt.

Überprüfen Sie diesen Blog-Beitrag für Details und Beispiele.

Daniel Langdon
quelle
0

Sie gruppieren Commits in Zweigen: Jeder Zweig besteht aus einer Reihe von Commits. Wenn Sie Commits zusammenführen, fügen Sie einen Satz von Commits in einen anderen Zweig ein und erstellen so effektiv eine Hierarchie von Commits: Hauptzweig, Funktionen, Fehler, Experimente, wie Sie es nennen.

Im Idealfall besteht Ihr Hauptzweig aus einer Reihe von Merge-Commits. Wenn Sie sich nur Ersteltern ansehen (Git-Befehle akzeptieren eine solche Option), haben Sie die allgemeine Ansicht Ihres Verlaufs (hoffentlich schreiben Sie ein aussagekräftiges Zusammenführungs-Commit, nicht das automatisch generierte). Wenn Sie sich jedoch die 2., 3. usw. Eltern einer Zusammenführung in Ihrem Verlauf ansehen, öffnen Sie die Box, um zu sehen, was sich in einer Zusammenführung befindet. Hier haben Sie Details darüber, was passiert ist.

Core-Dump
quelle