Список файлов, существовавших в папке
Хочу для папки получить имена всех файлов, существовавших в ней когда-либо.
Годится как вариант за всё время существования репозитория, так и между двумя коммитами. Но если файл был добавлен, а потом удалён между проверяемыми точками (т. е. не входит в diff), то он тоже должен быть в списке.
Поэтому не подходит
git diff --name-only 1111111111111111111111111111111111111111 -- .
Ответы (2 шт):
Список всех файлов в папке с начала времён:
git log --no-renames --name-only --format='' . | sort -u
Для списка изменённых файлов с коммита 123abc:
git log --no-renames --name-only --format='' 123abc..HEAD . | sort -u
Но надо понимать, что в этом списке будут только файлы которые как-то менялись за этот период, т.е. если нужны все файлы, то список надо обьеденить с текущим списком файлов в папке.
Чтобы получить список коммитов, в которых удалялись файлы, надо выводить
logс параметром--diff-filter=D.Чтобы увидеть имена удалённых файлов, надо добавить
--summary.Есть нюанс: иногда имена окажутся в кавычках. В моём случае это какая-то поместь из
\в пути помимо нормальных/- возможно какая-то ошибка при коммите, не знаю.Чтобы сделать сообщения о коммитах однострочными, можно использовать
--pretty=oneline, но можно совсем убрать вывод этих сообщений написав--format=(возможно, в случае линукса--format='').
Таким образом получится список всех файлов, кдаления которых были закоммичены в репозиторий (насколько я понимаю, имена могут повторяться если файл удалили, потом добавили, а потом снова удалили):
git log --format= --diff-filter=D --summary -- .
Чтобы получить список файлов, которые были удалены, но ещё закоммичены, надо из вывода команды
git status --porcelain -- .
выбрать строки, начинающиеся на D.
Ну а чтобы получить файлы, существующие в папке сейчас, git не нужен.