¿Cómo git log, ya que cuenta?


85

Tengo un repositorio de prueba simple con solo varias confirmaciones y quiero ver el registro filtrado de fecha y hora:

$ git log --author = "automatix" --since = "2013-01-30" --pretty - prueba
cometer ea0719bef142659fa561c9d040b2120012ed0184
Fecha: Jue 31 Ene 02:03:12 2013 +0100

cometer ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Fecha: Jue 31 Ene 01:59:11 2013 +0100

cometer a0b027beba2cd03571bb9475b9db9542f8efe990
Fecha: Jue 31 Ene 01:50:38 2013 +0100

cometer add77c8fe2ba9254c11b98e14facede3420dc51c
Fecha: Jue 31 Ene 01:48:34 2013 +0100

cometer e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Fecha: Jue 31 Ene 01:46:27 2013 +0100

cometer 8c286391e54d3fc1e210950b1320fd6f013a8f84
Fecha: Jue 31 Ene 01:41:27 2013 +0100

cometer 9c880595e57f717383796fa2940f41f0f42f7e2a
Fecha: Jue 31 Ene 01:38:17 2013 +0100

cometer a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Fecha: Jue 31 Ene 01:30:00 2013 +0100

La primera confirmación seleccionada es a95527f36a533e1ecba1aadceea31a9dcbe1a8dbde 2013-01-30 01:30:00. Se seleccionan 8 confirmaciones:

$ git log --author = "automatix" --since = "2013-01-30" --format = oneline - test | baño
      8 34 498

OKAY. Ahora selecciono desde 2013-01-31:

$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - test | baño
      0 0 0

¿Qué? Ok, eso debería significar que la sinceregla excluye las confirmaciones de la fecha de inicio. ¿Derecho?

Pero sigamos:

$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --pretty - test
cometer ea0719bef142659fa561c9d040b2120012ed0184
Fecha: Jue 31 Ene 02:03:12 2013 +0100

cometer ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Fecha: Jue 31 Ene 01:59:11 2013 +0100

cometer a0b027beba2cd03571bb9475b9db9542f8efe990
Fecha: Jue 31 Ene 01:50:38 2013 +0100

cometer add77c8fe2ba9254c11b98e14facede3420dc51c
Fecha: Jue 31 Ene 01:48:34 2013 +0100

cometer e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Fecha: Jue 31 Ene 01:46:27 2013 +0100

cometer 8c286391e54d3fc1e210950b1320fd6f013a8f84
Fecha: Jue 31 Ene 01:41:27 2013 +0100

cometer 9c880595e57f717383796fa2940f41f0f42f7e2a
Fecha: Jue 31 Ene 01:38:17 2013 +0100

cometer a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Fecha: Jue 31 Ene 01:30:00 2013 +0100
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline - test | baño
      8 34 498

Ahora, cuando también estoy escribiendo la hora de inicio, se incluyen las confirmaciones de la hora de inicio .

No entiendo la lógica. ¿Alguien puede explicar por qué funciona tan extraño?

Gracias


1
muy interesante de hecho ... tiene sentido para mí si cuando proporcionas solo una fecha sin una hora, el valor predeterminado es el último segundo del día ... pero eso es solo algo en lo que estoy intentando. Gracias por publicar esto. ¡Muy interesante!
ilan berci

1
Sí, parece que sí, que sin tiempo pasa por defecto al último segundo del día. Extraño, pero no hay problema. Pero entonces Git debería ser consecuente y hacer lo mismo, cuando se proporciona tiempo sin segundos. Entonces, el resultado de git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test should content 7 se confirma. Pero contiene 8. git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc=> 8 34498
automatix

Estoy en desacuerdo. Cuando digo "... sucedió después del lunes", me refiero a "sucedió después del último segundo del lunes" - "Lunes" representa un período de tiempo de 24 horas. Mientras que cuando digo "sucedió después de las 9 en punto", me refiero a "sucedió después de las 9: 00: 00.0000", "las 9 en punto" es un punto en el tiempo, no un lapso de tiempo. La interpretación de Git tiene más sentido.
Crónica

2
Es un buen punto. Yo diría que esta lógica solo funciona con "después", no con "desde". Pero en Git las palabras clave "ya que" y "después" son sinónimos (lo encuentro lingüísticamente sucio).git-scm.com/book/en/…
automatix

Respuestas:


135

En caso de que ayude a alguien más que aterrice aquí como lo hice yo, después de investigar un poco, descubrí que usar el formato ISO8601 también funciona:

git log --since="2014-02-12T16:36:00-07:00"

Esto le dará precisión al segundo. Nota: también puede utilizar:

git log --after="2014-02-12T16:36:00-07:00"
git log --before="2014-02-12T16:36:00-07:00"
git log --since="1 month ago"
git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

etc.

Por supuesto, esto no "explica por qué funciona tan extraño". Sin embargo, ciertamente me resolvió el problema.


EDITAR:

Después de investigar un poco más, descubrí "por qué funciona de manera tan extraña":
resulta que cuando no especificas un formato de fecha, git log se establece de forma predeterminada en la zona horaria del autor o en las fechas de confirmación , es decir, para un comportamiento consistente, es útil para declarar explícitamente su formato de fecha con algo como:

git log --date=local

Por último, cuando no especifica una hora, el valor predeterminado es su hora local cuando ejecutó el comando.

En pocas palabras, ser específico debería resolver el problema:

git log --date=local --after="2014-02-12T16:36:00-07:00"

Además, puede establecer el formato de fecha predeterminado de forma permanente con el siguiente comando:

git config log.date local

puede utilizar cualquiera de estos valores: (relative|local|default|iso|rfc|short|raw)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.