Я хочу видеть дату создания 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 "..."
существует только так, что он печатает информацию в (не так) дружеском виде!