¿Encontrar la date de compromiso no datedo?

Estoy haciendo un log de git para listr todas las confirmaciones y luego analizarlas. Con este command:

git log --encoding=UTF-8 --date=local --pretty=format:'%H,%P,%at,%ct,%an,%s' 

En algunos repositorys extraños obtengo confirmaciones sin la date tanto en el autor como en las dates de confirmación. Intenté con lo simple:

 git log 

y lo que obtuve fue una date de 1970.

Un repository donde esto sucede es SamWM / jQuery-Plugins , por ejemplo, en la confirmación e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 .

Aunque en GitHub tenemos una date interesante cuando vamos a searchla.

¿Alguien puede ayudarme a get una date interesante para este compromiso que debería estar en algún lugar en el medio de los otros?

git show --format=raw muestra en git show --format=raw :

 commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
 tree d63aeb159635cb231e191505a95a129a3b4a7b38
 padre 9276202f1c0dcc360433df222c90f7874558f072
 autor SamWM <sam@webmonkeysolutions.com> 1288370243 --700
 committer SamWM <sam@webmonkeysolutions.com> 1288370243 --700

La información de la zona horaria aquí no es válida, y no estoy seguro de cómo el autor logró crear esto. Otros commits usan el formatting correcto de -0700 .

Puede convertir esto usando la date GNU, sabiendo que --700 se supone que es -0700 :

 $ TZ = Etc / GMT + 7 date -d @ 1288370243
 Vie 29 Oct 09:37:23 GMT + 7 2010

así que la respuesta correcta en el formatting habitual de Git es el Fri 29 Oct 09:37:23 2010 -0700 .

Nota: Estoy usando TZ=Etc/GMT+7 , no GMT-7 . Puede ver ejecutando el mismo command con diferentes confirmaciones que tienen información correcta de zona horaria que el resultado es exactamente lo que se supone que es. la conversión de la zona horaria de la date es exactamente la forma incorrecta para lo que se necesita aquí, y al negar el desplazamiento, cancelaré el error.

Puede, en una copy local, corregir dichos commits usando git hash-object y git replace . Primero, un control de cordura de que mis commands están en order:

 $ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
 > git hash-object -t commit -w --stdin
 e9dddaf24c9de45d9b4efdf38eff7c30eb200f48

Este command cargó la confirmación especificada, la escribió de nuevo sin modificar y mostró el hash reescrito de la confirmación. Lo estoy usando como un control de cordura: si obtuve un hash diferente, algo tendría que estar mal en mi command.

Ahora, es posible insert algo para crear una confirmación fija:

 $ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
 > sed-e 's / - 700 / -0700 /' |
 > git hash-object -t commit -w --stdin
 46694249ed3d519b0c934222520b9dc6d8557fa1

y use esa confirmación fija en su lugar:

 $ git replace e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1

Después de eso, todas las references a e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 se verán en 46694249ed3d519b0c934222520b9dc6d8557fa1 en 46694249ed3d519b0c934222520b9dc6d8557fa1 lugar, y git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 ahora comienza con:

 commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
 Autor: SamWM <sam@webmonkeysolutions.com>
 Fecha: vie 29 de oct 09:37:23 2010 -0700

     Actualizar el número de versión, hacer que el formatting de text y la sangría sean consistentes con el rest del código