git: список всех файлов с владельцем / идентичностью при первом коммите (или, скорее, первый пользователь, который передал файл) - PullRequest
4 голосов
/ 28 сентября 2011

Как, используя git, вывести список всех файлов в определенном каталоге вместе с владельцем / идентификатором этих файлов при первом коммите?

Трудно ли получать подобные фрагменты информации по многим файлам, как правило, трудно?

Редактировать: Хорошо, git не предоставляет прямого способа сделать это, но он сохраняет тех, кто передает различные файлы,право?Мне нужен этот список в определенном каталоге, чтобы я мог понять, за какие файлы я «отвечаю».

Ответы [ 5 ]

10 голосов
/ 28 сентября 2011

Попробуйте:

$ cd thatdirectory
$ git ls-files |
  while read fname; do
    echo "`git log --reverse --format="%cn" $fname|head -1` first added $fname"
  done

«Первое добавленное» может вводить в заблуждение в случае переименования.

4 голосов
/ 29 января 2015

Я случайно столкнулся с подобной ситуацией.Принятый ответ работает, но почему бы вам, ребята, не использовать find с рабочей копией?

find . -type f -exec git log --reverse --format="{} %cn" -1 {} \;
4 голосов
/ 28 сентября 2011

Очень простой подход:

git rev-list --objects --all |
    cut -d' ' -f2- |
    sort -u |
    while read name; do 
         git --work-tree=. log --reverse -1 --format="%cn%x09$name" -- "$name"
    done

Предостережения:

  • это показывает имя первого коммиттера (% cn) каждого пути, который существует в объектебаза данных (не только в (любой) текущей редакции)
  • флаг --all означает, что вам нужны все объекты во всех ветвях.Чтобы ограничить объем, замените его именем ветви или тега или просто на HEAD

  • n 2 производительность (не• хорошо масштабируется для очень больших репо)

  • неправильный вывод, если путь содержит последовательности форматирования (например,% H и т. д.)

Он начнется с пустого имени,который является корневым объектом дерева.

1 голос
/ 28 сентября 2011

Используя сам git, это невозможно.Git не отслеживает владельца файла.

0 голосов
/ 27 декабря 2016

Чтобы сделать это эффективно,

git log --raw --date-order --reverse --diff-filter=A --format=%H%x09%an \
| awk -F$'\t' '
       /^[^:]/   {thisauthor=$2}
       $1~/A$/   {print thisauthor "\t" $2}
'

с возможно |sort -t$'\t' -k1,1 или чем-то, чтобы сделать его немного красивее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...