Git ist ein verteiltes Versionskontrollsystem, daher müssen Sie sorgfältig definieren, was Sie unter "Push-Datum" verstehen. Angenommen, Benutzer A überträgt einige Commits an das Repository von Benutzer B. Einige Zeit später überträgt Benutzer B dieselben Commits an ein drittes Repository. An welchem Datum interessieren Sie sich?
Ich spekuliere, dass Sie ein freigegebenes Repository haben und möchten, dass die Benutzer dieses freigegebenen Repositorys feststellen können, wann etwas im Repository veröffentlicht wurde. Wenn dies zutrifft, müssen Sie diese Informationen im freigegebenen Repository sammeln.
Die schlechten Nachrichten
Leider gibt es keine Möglichkeit, das Datum an die Festschreibungsnachrichten anzuhängen. Dies würde die Festschreibungs-ID (die ein SHA1-Hash des Inhalts ist) ändern und alle möglichen Probleme verursachen.
Die guten Nachrichten
Glücklicherweise hat Git eine (relativ neue) Funktion namens Notizen . Mit dieser Funktion können Sie Commits beliebigen Text anhängen, der git log
angezeigt werden kann. Notizen können bearbeitet und mit anderen geteilt werden.
Mit der Notizenfunktion können Sie jedem Commit die Nachricht "Dieses Commit wurde am [Datum] empfangen" hinzufügen, sobald es vom freigegebenen Repository empfangen wird.
Siehe git help notes
für Details.
So zeichnen Sie das Datum auf
Hier ist der Ansatz, den ich empfehle:
- Ändern Sie den
post-receive
Hook in Ihrem freigegebenen Repository, um jedes neu erreichbare Commit für jede aktualisierte Referenz zu durchlaufen.
Fügen Sie für jedes Commit etwas wie "[Benutzer] von [repository_url] fügte dieses Commit zu [ref] am [Datum] hinzu" an die Notiz des Commits an.
Möglicherweise möchten Sie refs/notes/received-on
anstelle der Standardeinstellung eine Notizenreferenz verwenden, die diesem Zweck (wie ) gewidmet ist refs/notes/commits
. Dies verhindert Konflikte mit Notizen, die für andere Zwecke erstellt wurden.
- Ändern Sie Ihren
receive
Hook, um Aktualisierungen Ihrer Notizenreferenz zu verweigern (damit Benutzer nicht versehentlich oder absichtlich mit den Notizen herumspielen).
Bitten Sie alle Benutzer, die folgenden Befehle in ihrem Arbeitsbaum auszuführen:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Dieser Schritt ist erforderlich, da Git standardmäßig nicht verzweigte Verweise ohne Tags in Upstream-Repositorys ignoriert.
Das oben Gesagte setzt voraus, dass Verweise nur erweitert, niemals gelöscht oder zwangsweise aktualisiert werden. Sie möchten wahrscheinlich, dass der post-receive
Hook auch Notizen zum Entfernen am [Datum] anfügt, um diese Fälle zu behandeln.
git reflog --date=local origin/master
(Notizorigin/
), um die Liste der Pushs zu sehen. Ansonsten waren nur Commits, Checkout und Pulls in der Liste (was auch nützlich ist). Eigentlich wurde ich durch die Antwort von @ JonathanDay darauf hingewiesen .