La soluzione nativa:
git log --diff-filter=A --follow --format=%aD -1 -- <fname>
Dà l'ultima "data di creazione" di un file in un repository e lo fa indipendentemente dalle rinomina/mosse dei file.
-1
è un sinonimo di --max-count=1
e limita il numero di commit in uscita (per non essere più di uno nel nostro caso).
per ottenere la data di creazione primo dovremmo usare --reverse
opzione senza limitazioni (dal limit viene applicato prima di ordinare).
git log --diff-filter=A --follow --format=%aI --reverse -- <fname> | head -1
%aI
dà data nel rigoroso ISO 8601 formato (ad esempio 2009-06-03T07:08:51-07:00
).
Ma questo comando non funziona correttamente a causa di bug conosciuto in Git (vedi "--follow is ignored when used with --reverse" conversazione in git maillist). Quindi, siamo costretti a utilizzare un po 'di lavoro per un po' per ottenere la data di creazione prima.
git log --diff-filter=A --follow --format=%aI -- <fname> | tail -1
Avrete anche bisogno di '--follow' per seguire i nomi dei registri come richiesto dall'OP. È anche buona norma aggiungere '--' prima del nome file nel caso in cui si scontri con un'opzione o un nome di riferimento. –
Dato che stavo pianificando di chiamare 'git' da Python, speravo in un comando che non richiedesse piping. Suppongo di poter ottenere la linea finale con Python, comunque. qualche idea? Grazie! –
@Seth: potresti usare 'subprocess.Popen' e' communicate() 'per leggere lo stdout in una stringa. Dividi la stringa su \ n in una lista, quindi ottieni l'elemento -1. Dai un'occhiata a http://docs.python.org/library/subprocess.html#popen-objects –