Как я могу увидеть дату, когда несколько файлов были созданы на git?

Я хочу видеть дату создания git (дата первого коммита, где они были добавлены) всех файлов в указанном каталоге.

Ответ 1

Я разорву свое решение на шаги.

Получить список всех файлов в репозитории

$ git ls-files

Возвращает список относительных путей для всех файлов в репозитории.

Получить SHA-1 для первого коммита данного файла:

$ git rev-list HEAD <file> | tail -n 1

Это приведет к возврату списка всех неконтактных коммитов для заданного файла в обратном хронологическом порядке. Последним является хэш SHA-1 первого коммита для данного файла.

Вы можете проверить это, запустив git whatchanged <hash>. Вы должны увидеть что-то вроде:

commit <commit_hash>
Author: Susy Q <[email protected]>
Date:   Wed Aug 24 12:36:34 2011 -0400

    Add new module 'example.py'

:000000 100644 0000000... <hash>... A  example.py

Показывать дату данной фиксации

$ git show -s --format="%ci" <hash>

Объединяя все вместе в bash script:

#!/bin/bash
for file in `git ls-files`
do
    HASH=`git rev-list HEAD $file | tail -n 1`
    DATE=`git show -s --format="%ci" $HASH --`
    printf "%-35s %s\n  %s\n" $file $HASH: "$DATE"
done

Ответ 2

Ну, я придумал решение, которое не изящно, а вроде как работает:

for file in dir/*; do echo -e "$file: \t\t `git log $file|grep Date|tail -1`"; done

он работает, запустив git log для каждого файла, а затем grep, чтобы получить только даты каждой фиксации относительно этого файла. Тогда tail -1 гарантирует, что я получаю только дату первого коммита. echo -e "..." существует только так, что он печатает информацию в (не так) дружеском виде!