2010-03-05 8 views
30

Esiste un semplice comando Git per determinare la "data di creazione" di un file in un repository, ovvero la data di prima aggiunta?Ricerca della data/ora in cui un file è stato aggiunto a un repository Git

Sarebbe meglio se fosse in grado di determinarlo anche attraverso la rinomina/spostamento dei file. Mi piacerebbe che fosse un'uscita a riga singola leggibile dal computer; potrebbe essere che non ho capito le corrette opzioni git log <fname> per fare questo.

risposta

41

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

Con questo comando è possibile tutto aggiornate su questo file ed estrarre l'ultimo

+7

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. –

+0

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! –

+0

@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 –

24

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 
+0

Questo è un modo più veloce di trovare la data rispetto alla soluzione di shingara, oltre ad essere più pulito – simpleuser

+0

Cosa fa il '-1' qui? È possibile aggiungere un file più di una volta? – mjs

+1

Se è necessario inibire il cercapersone, aggiungere '-c pager.log = false':' git -c pager.log = false log --diff-filter = A --follow --format =% aD -1 - '. – mjs

Problemi correlati