Подтвердить что ты не робот

Как перечислить файлы, игнорируемые git, которые в настоящее время выполняются или выполняются?

Как получить список тех файлов, которые соответствуют правилу в файле .gitignore, но которые были поставлены или переданы в прошлом?

4b9b3361

Ответ 1

Документация к ls-files написана не совсем четко, но похоже, что следующий простой псевдоним выполняет задание:

git config --global alias.showtrackedignored "ls-files -i --exclude-standard"

Вышеупомянутая команда создает псевдоним showtrackedignored. Чтобы использовать, запустите:

git showtrackedignored

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

Ошибка в git ls-files

К сожалению, это не работает на 100% надежно. По-видимому, Git отлично справляется с поиском файлов, которые должны игнорироваться не, но при поиске файлов, которые игнорируются (опция -i на git ls-files), он не перечисляет проигнорированные файлы внутри каталога, если это каталог, соответствующий правилам игнорирования.

Чтобы обойти эту ошибку, попробуйте преобразовать свои правила игнорирования, чтобы сопоставлялись только файлы, а не каталоги (это не всегда возможно).

(Спасибо Christoph за обнаружение этой ошибки и сообщив об этом 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 запускает алиасы на основе оболочки из каталога toplevel, а не текущий каталог, см. раздел alias.* в git help config)
  • Определите переменную с именем untracked_list. Эта переменная содержит путь к временному файлу, который будет содержать список игнорируемых в настоящее время файлов. Этот временный файл находится в каталоге .git.
  • Запишите список игнорируемых файлов в ${untracked_list}.
  • Сообщите Git действовать так, как если бы индекс был пустым и список всех проигнорированных файлов.
  • Труба, которая выводится на grep, которая отфильтровывает файлы, которые были записаны на ${untracked_list}.
  • Удалить временный файл ${untracked_list}.

Недостатки этого подхода:

  • Создает временный файл в вашем каталоге .git.
  • Предполагается, что у вас есть совместимая с POSIX оболочка.
  • Предполагается, что у вас есть POSIX-совместимая реализация grep.

Он также страдает от той же ошибки, что и прежний псевдоним.

Ответ 2

Просто собираюсь оставить это здесь, на основании ответа Ричарда:

git ls-files -i --exclude-standard | xargs git rm --cached

Это приведет к удалению каждого отслеживаемого файла, который игнорируется .gitignore.

Ответ 3

На этот вопрос ответил fooobar.com/info/16774/.... В принципе, git clean -ndX расскажет вам, что можно безопасно игнорировать.