git log nicht chronologisch geordnet

8

Ich habe unerwartet bei einem öffentlichen Projekt (B2G alias FirefosOS) herausgefunden, dass die git-Log-Ausgabe nicht chronologisch geordnet ist:

%Vor%

Wie kann ein älteres Commit vor einem kürzlichen stehen?

Dieses Verhalten kann auch auf der Weboberfläche beobachtet werden: Ссылка

Vielen Dank im Voraus.

EDIT: Die eigentliche Frage ist: Wie ist es möglich, dass ein Commit (d4bb883) ein älteres Commit-Datum hat als sein direktes Parent (5f3a596)? Ich kann behaupten, dass es das direkte Elternteil wegen der --graph Option ist.

    
fgdfgdfgdsg 20.11.2014, 09:48
quelle

2 Antworten

10

Von die Dokumentation für git log :

  

- Grafik

     

Zeichnen Sie eine textbasierte grafische Darstellung des Commit-Verlaufs auf der linken Seite der Ausgabe. Dies kann dazu führen, dass zusätzliche Zeilen zwischen den Commits gedruckt werden, damit der Graphverlauf korrekt gezeichnet wird.

     

[...]

     

Dies bedeutet standardmäßig die Option --topo-order , aber es kann auch die Option --date-order angegeben werden.

Und wenn wir uns die Dokumentation für die Option --topo-order anschauen:

  

- Topo-Reihenfolge

     

Zeigen Sie keine übergeordneten Elemente an, bevor alle ihre untergeordneten Elemente angezeigt werden , und vermeiden Sie es, Commits für mehrere Zeilen der Historie anzuzeigen, die miteinander vermischt sind.

     

Zum Beispiel in einem Commit-Verlauf wie folgt:

%Vor%      

wobei die Zahlen die Reihenfolge der Commit-Zeitstempel angeben, git rev-list und Freunde mit --date-order die Commits in der Reihenfolge der Zeitstempel anzeigen: 8 7 6 5 4 3 2 1.

     

Mit --topo-order würden sie 8 6 5 3 7 4 2 1 (oder 8 7 4 2 6 5 3 1) anzeigen; einige ältere Commits werden vor neueren Commits angezeigt, um zu vermeiden, dass die Commits zweier paralleler Entwicklungstracks zusammen angezeigt werden.

Also, weil Sie git log mit --graph verwenden, werden neuere Commits immer unter ihren Kindern angeordnet. Wenn Sie also ein älteres Commit haben, das ein Kind eines neueren Commits ist, wird git log --graph das ältere Commit über dem neueren Commit anzeigen.

Wie kann das passieren? Wie ist es möglich, dass ein Commit (d4bb883) ein älteres Commit-Datum hat als sein direktes Parent? Müsste der Elternteil nicht zuerst begangen werden müssen? Nun, Commit-Zeitstempel sind nur Metadaten, die von Git zu Commits hinzugefügt werden, und aufgrund der verteilten Natur von Git gibt es nichts, was die Commiters davon abhält, das gewünschte Datum für die von ihnen erstellten Commits festzulegen. Tatsächlich verfügt git rebase sogar über Optionen, die es Ihnen explizit erlauben, über Commit-Daten "zu lügen":

  

- Committer-Datum-ist-Autor-Datum

     

- ignore-date

     

Diese Flags werden an git am übergeben, um die Daten der gestaffelten Commits einfach zu ändern (siehe git-am [1] ).

Und git-am s Dokumente sagen:

  

- Committer-Datum-ist-Autor-Datum

     

Standardmäßig zeichnet der Befehl das Datum aus der E-Mail-Nachricht als das Autorisierungsdatum des Commits auf und verwendet den Zeitpunkt der Erstellung des Commits als Committer-Datum. Dies ermöglicht dem Benutzer, über das Committer-Datum zu lügen, indem er denselben Wert wie das Autorendatum verwendet.

Abgesehen von --committer-date-is-author-date gibt es jedoch andere Möglichkeiten, ein Commit-Datum falsch einzustellen, z. B. eine falsch eingestellte Systemuhr auf dem PC des Commiters. Der Punkt ist, Committer Termine werden nicht immer immer genau sein.

    
Ajedi32 20.11.2014, 15:12
quelle
-1

Es ist möglich, dass sie ein Bewertungssystem verwenden (Beispiel für ein solches Bewertungssystem: Gerrit ). So können ältere Commits länger im Review sein, so dass es länger dauert, bis sie zusammengeführt werden.

Aus diesem Grund könnten die neueren Commits früher zusammengeführt werden.

    
Zelardiel 20.11.2014 09:54
quelle

Tags und Links