¿Cuál es la resolución de las marcas de time de date de compromiso o date de autor de Git?

Según lo que puedo ver, las dates de compromiso de Git y las dates de los autores son precisas en un segundo. Me pregunto si esto es tan preciso como obtienen o puedo get la timestamp en milisegundos o incluso microsegundos.

Este command devuelve la timestamp de UNIX utilizando el hash de confirmación de la primera confirmación:

git show -s --format="%ct" 2d9afdfb9e2fa9b349312734b462bb7d57a684ee 

Resultado: 1421437899

¿Cuál es la precisión de date y hora de compromiso de GIT o date de autor?

La resolución de las dates de confirmación / autoría de Git es de 1 segundo, lo cual, como señalan Alexey Ten y Edward Thomson , es también la resolución de las marcas de time de Unix .

Un experimento interesante que puede realizar es

  • crear una confirmación, y
  • enmárquelo muy rápido, sin cambiar nada (ni siquiera el post de confirmación).

Como ya sabrá, modificar un compromiso realmente crea un nuevo compromiso . Normalmente, la nueva confirmación tendría una timestamp diferente y, por lo tanto, una ID de confirmación diferente de la de la primera confirmación. Sin embargo, puede escribir un script que cree el compromiso y lo modifique, con suerte dentro del mismo reloj del sistema segundo, produciendo así un compromiso con el mismo hash que el primero.

Primero, configure las cosas:

 $ mkdir testGit $ cd testGit $ git init 

Luego, escribe esto en un file de script (llamado commitAmend.sh continuación)

 #!/bin/sh # create content and commit printf "Hello World.\n" > README.md git add README.md git commit -m "add README" git log # amend the commit git commit --amend --no-edit git log 

y ejecutarlo:

 $ sh commitAmend.sh [master (root-commit) 11e59c4] add README 1 file changed, 1 insertion(+) create mode 100644 README.md commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7 Author: Jubobs <xxxxxxxxxxx> Date: Fri Jan 30 14:25:58 2015 +0000 add README [master 11e59c4] add README Date: Fri Jan 30 14:25:58 2015 +0000 1 file changed, 1 insertion(+) create mode 100644 README.md commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7 Author: Jubobs <xxxxxxxxxxx> Date: Fri Jan 30 14:25:58 2015 +0000 add README 

Mismo sello de time, mismo hash!

Es un segundo; mientras que git-show está embelleciendo un poco la salida, puede ver la información de compromiso sin procesar usando el command git-cat-file . Por ejemplo:

 % git cat-file commit HEAD tree 340c0a26a5efed1f029fe1d719dd2f3beebdb910 parent 1ac5acdc695b837a921897a9d42acc75649cfd4f author Edward Thomson <[email protected]> 1422564055 -0600 committer Edward Thomson <[email protected]> 1422564055 -0600 My witty comment goes here. 

Puede ver que esta es una timestamp de Unix con una resolución de 1 segundo.