it-swarm.com.de

git commit - Setzt Zeitstempel in die Zukunft

Ich muss einige Commits mit Git machen, möchte aber, dass der Zeitstempel in git-log in der Zukunft liegt.

Wie kann ich ein Commit in git durchführen, bei dem ein zukünftiger Zeitstempel im git-Log registriert wird?

45
Git-noob

Du solltest ein bisschen warten.

Oder Sie können dies tun:

/tmp/x 604% env GIT_AUTHOR_DATE='Wed Dec 19 15:14:05 2029 -0800' git commit -m 'future!'
[master]: created 6348548: "Future!"
 1 files changed, 1 insertions(+), 0 deletions(-)

/tmp/x 605% git log 

Author: Dustin Sallings <[email protected]>
Date:   Wed Dec 19 15:14:05 2029 -0800

    Future!

Hinweis dass es sowohl ein Autorendatum als auch ein Committer-Datum gibt, stellen Sie also sicher, dass Sie das richtige Datum (oder beide) festlegen.

68
Dustin

Sie können das Commit ändern, ein Beispiel mit dem Jahr 2037:

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"

Ich habe auch das Jahr 2038 ausprobiert, aber dann habe ich einen null Wert für das Datum erhalten.

49
Paul Pladijs

Wenn Sie ein aktuelles Änderungsdatum beibehalten möchten, wenn Sie ein Projekt zu git hinzufügen, können Sie dies mit tun

env GIT_AUTHOR_DATE="`ls -rt *.cpp|tail -1|xargs date -u -r`" git commit -m "Old sources retaining old change-dates of last changed
 file: `ls -rt *.cpp|tail -1`, actual commit date: `date`"

Dies wird mit dem Änderungsdatum der zuletzt geänderten * .cpp-Datei und einer Nizza erklärenden Nachricht des tatsächlichen Festschreibungsdatums festgeschrieben.

10
Hugo

Indem ich Hugos Antwort ( 1 ) mit den hier gefundenen Informationen ( 2 ) kombinierte und eine sed einfügte, erhielt ich Folgendes:

alias newest="find . -path ./.git -Prune -o -type f -exec stat -c \"%y %n\" '{}' + | sort -r | head -1 | sed s#'.*\./'##"
GIT_AUTHOR_DATE="$(newest | xargs date -u -r)" GIT_COMMITTER_DATE="$(newest | xargs date -u -r)" git commit -m "Old sources retaining old change-dates of last changed file: $(newest), actual commit date: $(date)"

Der Hauptunterschied besteht darin, dass diese Version eine rekursive Suche durchführt, sodass Sie die neueste Datei an einer beliebigen Stelle im Baum abrufen können. Dabei wird jedoch absichtlich das Verzeichnis .git übersprungen.

Sie können natürlich eine der Datumsvariablen hier ablegen, und ich verwende eine relativ neue Version von bash (4.2.37 (1) -release), sodass die $ () - Notation möglicherweise nicht für Sie funktioniert (nur) Ersetzen Sie ihn stattdessen durch Backticks (`).

2
Dan Hunsaker

Wenn Sie ein Commit mit einem Datum "aus der Zukunft" wie in diese Antwort ändern möchten:

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"
  • benutze kein Datum nach 2016 (Git 2.18 oder weniger)
  • benutze Git 2.19 (Q3 2018)

Siehe 1820703 verpflichten (21. August 2018) von Derrick Stolee (derrickstolee) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in Commit 1392c5d , 27. August 2018)

commit: benutze timestamp_t für author_date_slab

Der author_date_slab Wird verwendet, um das Autorendatum eines Commits zu speichern, wenn mit dem --author-date - Flag in der Revisionsliste oder im Protokoll gewandert wird.
Dies wurde als 'unsigned long' in 81c6b38 ("log: --author-date-order", Juni 2013, Git 1.8.4- hinzugefügt. rc0)

Da 'unsigned long' Plattformübergreifend mehrdeutig ist (64-Bit in Linux, 32-Bit in Windows zum Beispiel), wurden die meisten Verweise auf die Autorendaten in commit.c Konvertiert an timestamp_t in dddbad7 ("timestamp_t: ein neuer Datentyp für Zeitstempel", April 2017, Git 2.14.0-rc0)

Die Plattendefinition wurde jedoch verfehlt, was zu einer Nichtübereinstimmung der Datentypen in Windows führte.
Dies würde sich nicht als Fehler herausstellen , es sei denn, jemand verfasst ein Commit nach Februar 2106 , aber Commits können alles als Autorendatum speichern.

0
VonC