2013-11-02 11 views
48

Ich muss das Datum des Commits von git überschreiben, alle Dokumentationspunkte auf --date Parameter, aber dann lässt man ohne einen Hinweis auf das entsprechende Format. Ich habe jede mögliche Permutation ausprobiert, und ich bekomme "fatal: ungültiges Datumsformat:" Fehler für jeden einzelnen.Was ist das Format für --date Parameter von git commit

+1

Dass einige Antworten auf diese Frage Mine teilweise beantworte. Ich habe es gerade überprüft und es funktioniert. Übrigens, Sie müssen den Wochentag nicht dorthin legen (das wäre schmerzhaft). – v010dya

Antwort

48

Git 2.6+ (Q3 2015) eine neue Option hinzufügen.

Siehe commit e4f031e (30. Juni 2015) und commit aa1462c, commit a5481a6, commit b7c1e11 (25. Juni 2015) von Jeff King (peff).
(Verschmelzung durch Junio C Hamano -- gitster -- in commit d939af1, 03. Aug 2015)

einführen "Format" date-Modus

Dies führt das Format direkt an strftime.
Abgesehen davon, ein wenig flexibler, ist der Hauptvorteil, dass Ihr System strftime mehr über das bevorzugte Format Ihres Gebiets kennen (z. B. wie die Wochentage buchstabieren).

--date=format:... speist das Format ... in Ihr System ein strftime.
Verwenden Sie --date=format:%c, um das Datum im bevorzugten Format Ihres Systemgebiets anzuzeigen.
Eine vollständige Liste der Formatplatzhalter finden Sie im Handbuch strftime.

Davide Cavestro schlägt in the comments das Beispiel:

git commit -m "Test" --date=format:relative:5.hours.ago 

Original-Antwort (Mitte 2014)

Die --date Option (in commit 02b47cd im Dezember 2009 eingeführt, für git1.7.0) Anwendungen das gleiche Format wie für GIT_AUTHOR_DATE, mit Datum Formaten in commit 96b2d4f getestet:

Dort können Sie die verschiedenen Format sehen akzeptiert:

  • RFC2822: Mon, 3 Jul 2006 17:18:43 +0200
  • ISO8601: 2006-07-03 17:18:43 +0200
  • local: Mon Jul 3 15:18:43 2006
  • kurz: 2006-07-03 (nicht in 1.9.1 arbeitet in 2.3. 0)
  • relativ: siehe commit 34dc6e7:

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday' 
    
  • roh: siehe commit 7dff9b3 (git 1.6.2. März 2009)
    internen roh git format - Sekunden seit Epoche und Zeitzone
    (anders gesagt: 'date +"%s %z"' Format)

  • default: Mon Jul 3 17:18:43 2006 +0200

ADTC fragt und Antworten in the comments :

Akzeptiert es 2006-07-03 15:18:43 für lokale?

Ja es funktioniert und es nimmt die lokale Zeitzone automatisch.
Mit diesem Format muss ich nicht stören, an welchem ​​Wochentag es ist (Sun, Mon, etc).

+0

Akzeptiert es '2006-07-03 15: 18: 43' für * local *? Was sind * relative * und * rohe * Formate? – ADTC

+0

Um meine eigene erste Frage zu beantworten, ja es funktioniert und es dauert die lokale Zeitzone automatisch. Bei diesem Format muss ich mich nicht darum kümmern, an welchem ​​Wochentag es ist (Sonntag, Montag usw.). – ADTC

+1

@ADTC Ich habe Links und Referenzen für das relative und rohe Datumsformat hinzugefügt. Ich habe Ihren Kommentar in die Antwort für mehr Sichtbarkeit aufgenommen. – VonC

4

Das Datumsformat wird bei Documentation/date-formats.txt (man git commit) und sehr "humanishely" analysiert underdocumented.

Das einzige, was funktioniert, ist das Lesen der Quelle unter date.c und probieren Sie es aus.

Punkte nicht durch VonC auf 2.3.0 erwähnt:

  • nur Ziffern sind auf die Anzahl der Ziffern analysiert abhängig:

    • 2 Stellen: 19YY, für YY> = 73, aktueller Monat, Tag und Uhrzeit. Ansonsten Fehler oder aktuelles Datum.

    • 4 Ziffern: YYYY, für YYYY> = 1973 < = 2099

    • > 8 Stellen bis zu einem gewissen kleinen Grenze (ERLEDIGT welche?): UNIX Zeit (Sekunden seit 1970)

  • @<digits> +0000: UNIX-Zeit.

    Dies scheint der beste Weg, um UNIX-Zeiten direkt einzugeben.

    2 ** 64 - 2 (TODO warum nicht -1?) War der Maximalwert, der nicht zu einem Commit-Fehler führte. Der Stempel wird in einem C-Long gespeichert.

    git log zeigt sehr große Werte (irgendwo um 2^55 ERLEDIGT wo?) 1970, obwohl git cat-file -p HEAD zeigt, dass die richtige Nummer gespeichert wurde, so dass es wie eine Begrenzung der Datumsumstellung scheint.

    Für alles größer als , der größte positiv signiert lange, versucht, zu GitHub Push mit date causes integer overflow.

    VonC wies darauf hin, dass dies eine Schande ist, da es negative Daten Is it possible to set a git commit to have a timestamp prior to 1970? blockiert, die verwendet werden könnten, um ältere Software zu Git zu migrieren.

  • tea: Heute um 17 Uhr :-)

+0

Beachten Sie, dass mit Git-Repos Initiativen abhängig von Datum (wie diesem: http://Stackoverflow.com/q/29385441/6309), Daten vor 1970 wäre nett: http://StackOverflow.com/A/24977895/ 6309 – VonC

+1

@VonC: netter Link. Es war mir nicht in den Sinn gekommen, dass Versionskontrolle existiert seit den 60er/70er Jahren http://programmers.stackexchange.com/questions/184695/when-was-source-control- erfunden und Text seit Jahr -3200. Was, wenn sie Hammurabis Code nach Git migrieren wollen? :-) (ah, habe gerade herausgefunden, dass jemand das schon getan hat: https://github.com/elia/hammurabi/blob/master/lib/hammurabi/code.txt, aber die Zeitstempel verloren) –

Verwandte Themen