Как перечислить все текстовые (небинные) файлы в репозитории git?
У меня есть репозиторий с большим количеством автогенерированных исходных файлов, которые я обозначил как "двоичный" в .gitattributes
(они проверены, потому что не все имеют доступ к средствам генератора). Кроме того, у репо есть много исходных файлов в игнорируемых каталогах (опять же, сгенерировано как часть процессов сборки) и несколько реальных двоичных файлов (например, небольшие файлы ресурсов, такие как значки).
Теперь я хотел бы найти все неавтоматизированные и не проигнорированные файлы в репо. Я думал, что просто сделаю это с помощью find
и кучей исключений, но теперь у меня есть ужасающий оператор find
с дюжиной статей (и он все еще не выполняет эту работу). git ls-files
работает, но показывает мне все двоичные файлы без дифференцирования, которые я должен отфильтровать.
Итак, мне интересно: есть ли простая команда, которую я могу запустить, которая перечисляет каждый файл, зарегистрированный в репо, и который git
считает "текстовым" файлом?
Ответы
Ответ 1
git grep --cached -Il ''
перечисляет все непустые регулярные (без символических ссылок) текстовые файлы:
-
-I
: не соответствуют шаблону в двоичных файлах -
-l
: показывать только совпадающие имена файлов, а не соответствующие строки -
''
: пустая строка заставляет git grep
соответствовать любому непустому файлу -
--cached
: также найти файлы, добавленные с добавлением git add
но еще не выполненными (необязательно)
Или вы можете использовать Как определить, обрабатывает ли Git файл как двоичный или как текст? в цикле for с git ls-files
.
TODO пустые файлы.
Найти все двоичные файлы: Найти все двоичные файлы в git HEAD
Протестировано на Git 2.16.1 с помощью этого тестового репо.
Ответ 2
Умный взлом для этого: перечисление всех не двоичных файлов, содержащих возврат каретки
$ git grep --cached -I -l -e $'\r'
В моем случае пустая строка работает лучше:
$ git grep --cached -I -l -e $''
Взял его из git список двоичных и/или недвоичных файлов?.
Ответ 3
Стандартный метод для перечисления не проигнорированных файлов:
git ls-files --exclude-standard --cached
Но, как вы видели, в нем перечислены все файлы с версиями.
Обходным решением может быть определение в отдельном файле exclude_binaries
" шаблона исключения, чтобы соответствуют всем исполняемым файлам, которые вы знаете.
git ls-files --exclude-standard --cached \
--exclude-from=/path/to/`exclude_binaries`
Это будет менее сложным find
, но он не предоставляет полностью автоматизированный способ отображения недвоичных файлов: вам все равно придется идентифицировать и перечислить их в отдельном файле шаблонов.