2010-03-05 8 views
30

¿Existe un simple comando Git para determinar la "fecha de creación" de un archivo en un repositorio, es decir, la fecha en que se lo agregó por primera vez?Encontrar la fecha/hora en que un archivo se agregó por primera vez a un repositorio de Git

Sería mejor si puede determinar esto incluso a través de renombrados/movimientos de archivos. Me gustaría que fuera una salida de una línea legible por computadora; puede ser que no haya encontrado las opciones correctas git log <fname> para hacer esto.

Respuesta

41

git log --format=%aD <FILE> | tail -1

Con este comando se puede toda la fecha sobre este archivo y extraer el último

+7

También necesitará '--follow' para seguir el registro a través de los cambios de nombre que hizo el OP. También es una buena práctica agregar '--' antes del nombre del archivo por si choca con una opción o nombre de referencia. –

+0

Como estaba planeando llamar a 'git' desde Python, esperaba un comando que no requiera tuberías. Sin embargo, supongo que puedo llegar a la última línea con Python. ¿Alguna idea? ¡Gracias! –

+0

@Seth: puede usar 'subprocess.Popen' y' communicate() 'para leer stdout en una cadena. Divida la cadena en \ n en una lista, luego obtenga el elemento -1. Consulte http://docs.python.org/library/subprocess.html#popen-objects –

24

La solución nativa:

git log --diff-filter=A --follow --format=%aD -1 -- <fname> 

Da la última "fecha de creación" de un archivo en un repositorio, y lo hace independientemente de renombrados/movimientos de archivos.

-1 es sinónimo de --max-count=1 y limita el número de confirmaciones a la salida (para no ser más que uno en nuestro caso).

para obtener la fecha de creación primera debemos utilizar --reverse opción, sin limitaciones, (ya que limit se aplica antes de ordenar).

git log --diff-filter=A --follow --format=%aI --reverse -- <fname> | head -1 

%aI da fecha en el estricto ISO 8601 formato (por ejemplo 2009-06-03T07:08:51-07:00).

Pero este comando no funciona correctamente debido a la falla conocida en Git (ver la conversación "--follow is ignored when used with --reverse" en git maillist). Por lo tanto, nos vemos obligados a utilizar un poco de trabajo por un tiempo para obtener la primera fecha de creación .

git log --diff-filter=A --follow --format=%aI -- <fname> | tail -1 
+0

Esta es una forma más rápida de encontrar la fecha que la solución de shingara, además de ser más clara – simpleuser

+0

¿Qué hace el '-1' aquí? ¿Se puede agregar un archivo más de una vez? – mjs

+1

Si necesita inhibir el buscapersonas, agregue '-c pager.log = false':' git -c pager.log = registro falso --diff-filter = A --follow --format =% aD -1 - '. – mjs

Cuestiones relacionadas