git show --format=raw
spettacoli:
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
tree d63aeb159635cb231e191505a95a129a3b4a7b38
parent 9276202f1c0dcc360433df222c90f7874558f072
author SamWM <[email protected]> 1288370243 --700
committer SamWM <[email protected]> 1288370243 --700
Le informazioni fuso orario qui non è valido, e io non sono sicuro di come lui autore è riuscito a creare questo. Altri commit utilizzano il formato corretto -0700
.
È possibile convertire questa data utilizzando GNU, con la consapevolezza che --700
si suppone essere -0700
:
$ TZ=Etc/GMT+7 date -d @1288370243
Fri 29 Oct 09:37:23 GMT+7 2010
quindi la risposta corretta in formato consueto di Git è Fri 29 Oct 09:37:23 2010 -0700
.
Nota: sto utilizzando TZ=Etc/GMT+7
, non GMT-7
. Puoi vedere eseguendo lo stesso comando con commit diversi che hanno informazioni corrette sul fuso orario che il risultato è esattamente come dovrebbe essere. La conversione del fuso orario di date
è esattamente la direzione sbagliata per ciò che è necessario qui, e annullando l'offset sto annullando l'errore.
È possibile, in una copia locale, correggere tali commit utilizzando git hash-object
e git replace
. In primo luogo, un controllo di integrità che i miei comandi sono in ordine:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> git hash-object -t commit -w --stdin
e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
Questo comando caricato il specificato commettere, ha scritto nuovamente modificato, e ha mostrato il riscritta di commettere hash. Sto usando questo come controllo di integrità mentale: se avessi un hash diverso, qualcosa dovrebbe essere sbagliato nel mio comando.
Ora, è possibile inserire qualcosa per creare un fisso commettere:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> sed -e 's/--700/-0700/' |
> git hash-object -t commit -w --stdin
46694249ed3d519b0c934222520b9dc6d8557fa1
e l'uso che fissa commettere invece:
$ git replace e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1
Dopo di che, tutti i riferimenti a e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
guarderanno 46694249ed3d519b0c934222520b9dc6d8557fa1
invece e git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
ora inizia con:
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
Author: SamWM <[email protected]>
Date: Fri Oct 29 09:37:23 2010 -0700
Update version number, make text formatting and indentation consistent with the rest of the code
@rt fpessoa È necessario utilizzare raw per controllare il problema, ma è possibile risolvere localmente il problema in modo che non ne risentirai mai più, e ho modificato la mia risposta per mostrare come. – hvd
@rtfpessoa Non è necessario passare al repository, è possibile creare i nuovi oggetti nel proprio clone locale di quel repository come ho fatto io e si vedono ancora gli ID di commit originali. – hvd
@rtfpessoa È vero, è davvero una soluzione molto specifica, ma è anche una situazione molto specifica. Non ho mai visto nulla di simile prima o letto su di esso, mai; Sono abbastanza sicuro che questo non sia un bug diffuso e pochissimi repository ne saranno influenzati. L'hai visto in più repository, forse contengono commit dallo stesso autore? – hvd