Was bedeutet "vor 7 Tagen verfasst; vor 14 Stunden begangen ”auf GitHub?


21

Ich sehe dies auf diesem GitHub-Repository :

Bildbeschreibung hier eingeben

Was bedeutet das? Wie kann etwas "vor 7 Tagen verfasst" und dennoch "vor 14 Stunden festgeschrieben" werden?


Könnte es sein, dass git die Zeitstempel zwischen den von ihm bearbeiteten Dateien misst und wann er sie tatsächlich festgeschrieben und gepusht hat? Ich sehe keine Verwendung für eine solche Funktion, aber das ist irgendwie, was der Wortlaut impliziert ..
Seth

@Seth Das dachte ich zuerst, aber ich hatte noch nie gehört, dass Git irgendetwas mit Zeitstempeln macht.
Machen Sie den

@Seth Git ignoriert Dateizeitstempel. Der Committer kann den Zeitstempel des Autors im laufenden Betrieb mit ändern commit --date=. Schwern erklärt es sehr nett.
ADTC

@Undo Ich hoffe, Sie verwechseln "vor 14 Stunden" nicht mit "vor 14 Tagen" ... Nun, das wäre wirklich seltsam, etwas begangen zu haben, das anscheinend erst 7 Tage später verfasst wurde ... I ' Ich bin mir nicht sicher, ob Git verhindert, dass der Zeitstempel des Autors größer als der Committer-Zeitstempel ist. es ist wahrscheinlich egal.
ADTC

Antworten:


21

Git hat ein separates Konzept des Autors (der Person, die den Code geschrieben hat) und des Committers (der Person, die ihn in das Repository geschrieben hat). Ebenso kann es für beide Daten unterschiedliche geben. Sie sind normalerweise gleich.

Sie möchten, dass sie in erster Linie dann unterschiedlich sind, wenn die Person, die den Code schreibt oder den Patch sendet, keinen Push-Zugriff auf das Repository hat, wie in Projekten, in denen Mailinglisten für das Senden von Patches verwendet werden. In diesem Fall würde die Person mit Push-Zugriff den Patch anwenden und git commitentweder mit den Schaltern --authorund--date oder mit den Umgebungsvariablen GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL und GIT_AUTHOR_DATE (dokumentiert in git-commit-tree) ausführen .

Der andere Fall ist using git cherry-pickoder git rebase. Der Committer ist die Person, die den Cherry Pick ausführt, und der Autor ist der Autor des ursprünglichen Commits. Git kümmert sich darum, die Identität und das Datum des Autors für Sie festzulegen.

Sie können diese Informationen im Repository mit sehen git log --pretty=fuller.

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <thiagopnts@gmail.com>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <email@thiago.me>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1

1
git rebasebewirkt auch, dass das Festschreibungsdatum aktualisiert wird, während das Erstellerdatum gleich bleibt.
cjm

@cjm Du hast recht! Rebase und Cherry-Pick verhalten sich in dieser Hinsicht gleich. Das macht Sinn, eine Rebase kann man sich als mehrere Cherry-Picks vorstellen.
Schwern

1
Zum Anwenden von Patches aus E-Mails gibt es auch git am , das automatisch das Datum und den Autor aus der E-Mail-Nachricht entnimmt.
Deltab

6

Dies sieht aus wie eine Mischung zwischen der Arbeitsweise von Git mit Datumsangaben und der Art und Weise, wie auf GitHubs Schlussschlüsselwörter verwiesen wurde .

Git trennt zwischen Festschreibungs- und Autorendaten. In Pro Git gehen sie ein bisschen in den Unterschied :

Der Autor ist die Person, die das Werk ursprünglich geschrieben hat, während der Auftraggeber die Person ist, die das Werk zuletzt angewendet hat. Wenn Sie also einen Patch an ein Projekt senden und einer der Kernmitglieder den Patch anwendet, erhalten Sie beide eine Gutschrift - Sie als Autor und der Kernmitglied als Committer.

Während also der Code selbst "vor 7 Tagen" (lokal) festgeschrieben / geschrieben wurde, wurde er bis "vor 14 Stunden" nicht auf den Code "angewendet" oder gepatcht, da er in der Fernbedienung bis zu diesem Zeitpunkt nicht angezeigt wurde Botschaft.


2
Obwohl ich es noch nicht getestet habe, glaube ich nicht, dass die Autoreninformationen durch Github-Schlussschlüsselwörter hinzugefügt wurden. Die Identitäten und Daten des Committers und des Autors werden in die Commit-ID eingebrannt. Wenn Github eine dieser Einstellungen ändern würde, würde dies die Festschreibungs-ID auf der Remote-Seite ändern. Das entfernte und das lokale Repository würden voneinander abweichen. Der Autor wäre nicht in der Lage zu schieben oder zu ziehen, ohne es zu erzwingen.
Schwern

2
Das Festschreiben ist nicht dasselbe wie das Drücken auf die Fernbedienung. Denken Sie daran, dass fast alles in Git lokal ausgeführt werden kann, einschließlich Commits. Sie können zuerst einen Commit durchführen (wobei beide Zeitstempel angegeben werden) und später einen Push durchführen (wobei lediglich der Commit auf Remote hochgeladen wird, jedoch kein Zeitstempel angegeben wird). Es gibt keinen Push-Zeitstempel, da es unwichtig ist zu wissen, wann ein Commit gepusht wurde - es kann beliebig oft gepusht und gezogen werden.
ADTC
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.