Как вывести список истории изменений дерева каталогов в git

Git не отслеживает каталоги как таковые. Он отслеживает только файлы, которые находятся в каком-то каталоге. (См. Как я могу добавить пустой каталог в репозиторий Git? )

Однако, если у меня есть определенная история коммитов, у меня также неявно есть история изменений в дереве каталогов.

Итак, как могу ли я ответить на такие вопросы, как:

  1. когда был создан каталог foo / bar (в терминологии git: когда был создан первый файл в этом каталоге). Может быть несколько подходящих коммитов, если foo / bar был удалил некоторое время в истории и воссоздал позже.
  2. когда был удален каталог foo / bar (в терминологии git: когда был удален последний файл из этого каталога). Как указано выше, может быть более одной подходящей фиксации.
  3. каковы подкаталоги foo / bar, которые существовали в любой момент времени в истории

Самое близкое, что я мог придумать, - это псевдокод:

loop over all commits (git rev-list --all)
  start from repo root directory
  do recursively on the directory tree rebuilt so far
    call git ls-tree and grep the tree lines
    rebuild next level of directory tree
  end
end

Очевидно это может быть написано на вашем любимом языке сценариев.

Затем у меня есть все деревья каталогов, и мне все еще нужно найти в них разумный способ, чтобы ответить на вопросы типа 1–3. Опять же, выполнимо, но, вероятно, не через пару минут.

Вопросы следующие:

  1. Есть ли более простой способ?
  2. Если нет: подходят ли сценарии, уже имеющиеся в сети? (мой поиск в Google не обнаружил ни одного слова, но я тоже не нашел идеальных слов для поиска)

15
задан Community 23 May 2017 в 10:28
поделиться