Ответ 1
Прежде всего позвольте мне убедиться, что вы не путаете --ignored
с --other
.
--other
- это вариант, который вы бы предоставили для списка невоспроизводимых файлов. Из руководства git-ls-files
(выделено мной):
-o, --others
Показать другие (т.е. не проверенные) файлы на выходе
Итак, посмотрим, что делает --ignored
. Независимо от того, что вы публикуете, независимо от того, отслеживали ли вы файлы, необработанные файлы, измененные файлы и т.д., Вы можете исключить некоторые файлы из вывода. Подумайте об этом как о бесплатном grep -v
, автоматически создаваемом на выходе. Например:
git ls-files --other --exclude=*.o
перечислит все несохраненные файлы, которые не соответствуют *.o
. Шаблон исключения не имеет ничего общего с .gitignore
. Действительно, .gitignore
определяет, что будет выводить --other
, а --exclude
фильтрует выход после завершения записи (или, по крайней мере, это наблюдаемое поведение) 1.
Теперь --ignored
просто возвращает результат. Итак, что было исключено exclude=
, будет напечатано вместо этого, и то, что не было исключено, будет опущено. Поэтому, например:
git ls-files --other --exclude=*.o --ignored
будет печатать все необработанные файлы, которые делают соответствуют *.o
.
1 Не так, --exclude
только фильтрует невоспроизводимые файлы, поэтому, если вы отправляете отслеживаемые файлы, --exclude
ничего не исключит. Однако с --ignored
он будет перечислять файлы, которые должны были быть исключены. Это немного странно.
Заключение: --ignored
в основном вернет шаблон исключения, указанный в командной строке. По умолчанию шаблон exclude пуст (вы видите все), поэтому --ignored
без каких-либо исключающих шаблонов приводит к тому, что все опущено. Это никогда не бывает полезным и поэтому для работы --ignored
требуется шаблон исключения.
Поскольку упоминался --exclude-standard
, я хотел бы также рассказать об этом. --exclude-standard
добавит игнорируемые шаблоны (например, написанные в .gitignore
) как исключающие шаблоны в листинге. Поэтому подумайте о следующей команде:
git ls-files --ignored --exclude-standard
Сначала эта команда выводит список всех отслеживаемых файлов. Затем, учитывая команду --ignored
, она будет печатать только те файлы, которые соответствуют шаблону exclude. Учитывая --exclude-standard
, будут напечатаны файлы, соответствующие шаблонам в .gitignore
. НО это файлы, которые вы не отслеживали. Так эффективно, вы ничего не увидите. Единственный случай, который вы увидите что-то, - это если вы отслеживаете файлы, о которых вы также упоминали, чтобы их игнорировать в .gitignore
.
Другими словами, если эта команда выводит что-либо, это означает, что вы сказали git игнорировать определенные файлы, но вы все равно нарушили свои собственные правила и добавили их в репозиторий.
Другими интересными командами могут быть:
git ls-files --other --exclude-standard
Показывает все ненужные файлы, которые вы не указали в .gitignore
. Вы также увидите эти файлы в git status
.
git ls-files --other --ignored --exclude-standard
Показывает все неископанные файлы, которые вам удалось успешно игнорировать с помощью .gitignore
. Другими словами, (если предыдущий запрос пуст, т.е. Нет незарегистрированных файлов без следа), это показывает все файлы, которые находятся в текущем каталоге, которые не принадлежат репозиторию. Это полезно для проверки файлов, которые не должны игнорироваться и должны быть помещены в репозиторий.