2010-03-05 2 views
30

Gibt es einen einfachen Befehl Git, um das "Erstellungsdatum" einer Datei in einem Repository zu bestimmen, d.Ermitteln des Datums/der Uhrzeit, zu der eine Datei zum ersten Mal einem Git-Repository hinzugefügt wurde

Es wäre am besten, wenn es dies sogar durch Umbenennungen/Verschiebungen von Dateien feststellen kann. Ich möchte, dass es eine computerlesbare Einzeilausgabe ist; es kann sein, dass ich die richtigen git log <fname> Optionen nicht herausgefunden habe, um dies zu tun.

Antwort

41

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

Mit diesem Befehl können Sie alles Datum über diese Datei und extrahieren die letzte

+7

Sie müssen auch '--follow' folgen, um dem Protokoll durch Umbenennen zu folgen, wie das OP gefragt hat. Es empfiehlt sich auch, '-' vor dem Dateinamen hinzuzufügen, falls es mit einem Options- oder Verweisnamen kollidiert. –

+0

Da ich vorhabe, 'git' aus Python zu benennen, hatte ich auf einen Befehl gehofft, der keine Piping benötigt. Ich nehme an, ich kann die letzte Zeile mit Python bekommen. Irgendwelche Gedanken? Vielen Dank! –

+0

@Seth: Sie könnten 'subprocess.Popen' und' communicate() 'verwenden, um stdout in eine Zeichenfolge zu lesen. Teilen Sie die Zeichenfolge in eine Liste und rufen Sie dann das Element -1 auf. Check out http://docs.python.org/library/subprocess.html#popen-objects –

24

Die nativen Lösung:

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

Es gibt das letzte „Erstellungsdatum“ von eine Datei in einem Repository, und tut es unabhängig von der Datei umbenennt/verschiebt.

-1 ist ein Synonym zu --max-count=1 und begrenzt die Anzahl der Commits zur Ausgabe (in unserem Fall nicht mehr als eins).

Um das erste Erstellungsdatum zu erhalten, sollten wir --reverse Option ohne Einschränkung verwenden (seit limit wird vor der Bestellung angewendet).

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

%aI gibt Datum im strengen ISO 8601 Format (z 2009-06-03T07:08:51-07:00).

Dieser Befehl funktioniert jedoch aufgrund des bekannten Fehlers in Git nicht ordnungsgemäß (siehe "--follow is ignored when used with --reverse" Konversation in Git Maillist). Also sind wir gezwungen, etwas Arbeit für eine Weile zu verwenden, um das erste Erstellungsdatum zu erhalten.

+0

Dies ist ein schneller Weg, das Datum als die Lösung von Shingara zu finden, sowie als Reiniger – simpleuser

+0

Was macht das '-1' hier? Kann eine Datei mehrmals hinzugefügt werden? – mjs

+1

Wenn Sie den Pager sperren müssen, fügen Sie '-c pager.log = false 'hinzu:' git -c pager.log = false log --diff-filter = A --follow --format =% aD -1 - '. – mjs

Verwandte Themen