¿Cómo puedo determinar cuándo se creó un git ref?

Esta no es la pregunta que piensas que es.

Quiero saber cuándo se creó una reference específica. No quiero saber qué es la timestamp del autor o la timestamp del autor.

Por ejemplo: si selecciono desde un repository remoto, que actualiza mi repository local, quiero recuperar las marcas de time del momento en que se crearon las references de repos locales.

[remote-host]$ git show --format='%H %cD' refs/heads/master 25f2508a379adf2f8aa264afe6f7e5046943274a Mon, 1 Aug 2016 11:33:12 -0700 [remote-host]$ logout Connection to remote-host closed. [local-host]$ git fetch remote: Counting objects: 165073, done remote: Finding sources: 100% (1836/1836) remote: Total 1836 (delta 484), reused 1374 (delta 484) Receiving objects: 100% (1836/1836), 4.10 MiB | 0 bytes/s, done. Resolving deltas: 100% (484/484), completed with 262 local objects. ... [local-host]$ git show --format='%H %cD' 25f2508a379adf2f8aa264afe6f7e5046943274a 25f2508a379adf2f8aa264afe6f7e5046943274a Mon, 1 Aug 2016 11:33:12 -0700 [local-host]$ date Mon Aug 1 11:50:44 PDT 2016 

El resultado que deseo es el Mon Aug 1 11:50:44 PDT 2016 (es decir, el momento de la obtención), no la date del confirmador que es correctamente idéntica tanto en el host remoto como en el local.

Pensé en usar git reflog , pero la salida de ese command extrañamente está vacía de cualquier información de timestamp.

No creo que git rastree la información que está buscando, que creo que se describe con más precisión como "la date en que se creó un blob en mi sistema local".

Tú podrías:

  • Primero busque un blob suelto con un hash de contenido coincidente, y si lo encuentra, suponga que el mtime de ese blob es el momento en que se creó en su sistema (ya que no debe modificarse con ninguna operación posterior):

     cid=25f2508a379adf2f8aa264afe6f7e5046943274a if test -f .git/objects/${cid:0:2}/${cid:2}; then ls -l .git/objects/${cid:0:2}/${cid:2} fi 
  • Si no encuentra un object suelto, revise los files del package para encontrar el id. De contenido correspondiente, y si lo encuentra, suponga que el mtime del file pack correspondiente es la date que desea:

     for idx in .git/objects/pack/*.idx; do if git show-index < $idx | grep $cid; then ls -l ${idx/idx/pack} break fi done 

El uso de --date=short o --date=relative / --relative-date (o de alguna de las directivas de date) le mostrará la timestamp de la input de reflog en sí, en lugar de la timestamp de la confirmación, dentro del {...} parte:

 $ git reflog torturetest --date=relative 8bb1189 [email protected]{3 days ago}: branch: Created from HEAD $ git reflog torturetest --date=default 8bb1189 [email protected]{Fri Jul 29 00:17:04 2016 -0700}: branch: Created from HEAD 

El principal problema con esto es que no hay garantía de que exista la input Created from : es posible que nunca se haya ingresado en el reflog o que haya expirado.