Список файлов, существовавших в папке

Хочу для папки получить имена всех файлов, существовавших в ней когда-либо.

Годится как вариант за всё время существования репозитория, так и между двумя коммитами. Но если файл был добавлен, а потом удалён между проверяемыми точками (т. е. не входит в diff), то он тоже должен быть в списке.

Поэтому не подходит

git diff --name-only 1111111111111111111111111111111111111111 -- .

Ответы (2 шт):

Автор решения: Alexey Ten

Список всех файлов в папке с начала времён:

git log --no-renames --name-only --format='' . | sort -u

Для списка изменённых файлов с коммита 123abc:

git log --no-renames --name-only --format='' 123abc..HEAD . | sort -u

Но надо понимать, что в этом списке будут только файлы которые как-то менялись за этот период, т.е. если нужны все файлы, то список надо обьеденить с текущим списком файлов в папке.

→ Ссылка
Автор решения: Qwertiy
  • Чтобы получить список коммитов, в которых удалялись файлы, надо выводить log с параметром --diff-filter=D.

  • Чтобы увидеть имена удалённых файлов, надо добавить --summary.

    Есть нюанс: иногда имена окажутся в кавычках. В моём случае это какая-то поместь из \ в пути помимо нормальных / - возможно какая-то ошибка при коммите, не знаю.

  • Чтобы сделать сообщения о коммитах однострочными, можно использовать --pretty=oneline, но можно совсем убрать вывод этих сообщений написав --format= (возможно, в случае линукса --format='').

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

git log --format= --diff-filter=D --summary -- .

Чтобы получить список файлов, которые были удалены, но ещё закоммичены, надо из вывода команды

git status --porcelain -- .

выбрать строки, начинающиеся на D.

Ну а чтобы получить файлы, существующие в папке сейчас, git не нужен.

→ Ссылка