Документация к ls-files
написана не совсем четко, но кажется, что следующий простой псевдоним выполняет эту работу:
git config --global alias.showtrackedignored "ls-files -i --exclude-standard"
Приведенная выше команда создает псевдоним showtrackedignored
.Чтобы использовать, запустите:
git showtrackedignored
, и он выведет список всех файлов в текущем каталоге и подкаталогах, которые отслеживаются, но будут игнорироваться, если они не отслеживались.
Ошибка вgit ls-files
К сожалению, это не работает на 100% надежно.Очевидно, Git делает хорошую работу по поиску файлов, которые не следует игнорировать, но при поиске файлов, которые игнорируются (параметр -i
для git ls-files
), он не 'Перечислите пропущенные файлы в каталоге, если это каталог, который соответствует правилам игнорирования.
Чтобы обойти эту ошибку, попробуйте преобразовать правила игнорирования, чтобы сопоставлялись только файлы, а не каталоги (это не всегда возможно)).
(Спасибо Кристофу за обнаружение этой ошибки и сообщение о ней в списке рассылки Git ! Редактировать: патч в разработке и сделает егов git 1.7.11.2 или новее)
Альтернативный подход
Вот другой подход.Это намного сложнее и может иметь неработающие угловые случаи.
git config --global alias.showtrackedignored '!
cd "${GIT_PREFIX}" &&
untracked_list=$(git rev-parse --git-dir)/ignored-untracked.txt &&
git ls-files -o -i --exclude-standard >"${untracked_list}" &&
GIT_INDEX_FILE="" git ls-files -o -i --exclude-standard | grep -Fvxf "${untracked_list}" &&
rm -rf "${untracked_list}"'
Псевдоним выполняет следующие действия:
cd
обратно в каталог, из которого git showtrackedignored
был запущен (Git запускает псевдонимы на основе оболочки из каталога верхнего уровня, а не из текущего каталога, см. Раздел alias.*
в git help config
) - Определите переменную с именем
untracked_list
.Эта переменная содержит путь к временному файлу, который будет содержать список игнорируемых в данный момент файлов.Этот временный файл находится в каталоге .git
. - Записать список игнорируемых файлов в
${untracked_list}
. - Сказать Git действовать так, как будто индекс пуст, и перечислить все игнорируемые файлы..
- Канал, который выводит в
grep
, который отфильтровывает файлы, которые были записаны в ${untracked_list}
. - Удаляет временный файл
${untracked_list}
.
Недостатки этого подхода:
- Он создает временный файл в каталоге
.git
. - Предполагается, что у вас есть POSIX-совместимая оболочка.
- Itпредполагается, что у вас есть POSIX-совместимая реализация
grep
.
Она также страдает от той же ошибки, что и прежний псевдоним.