Как я могу исключить файлы из git ls файлов?
Как мне перечислить все, кроме файлов разметки? Я попробовал, как показано в приведенном ниже коде, запустить ls файлы с флагом -exclude, но исключенные файлы все еще отображаются на выходе.
Моя версия git - 2.6.4 (Apple Git -63)
$ git ls-files
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md
$ git ls-files --exclude *.md
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md
Ответы
Ответ 1
Git имеет свой собственный способ расширения шаблонов глобуса, в том числе способ исключения файлов, которые соответствуют одному шаблону, но не другому. Например, следующее перечислит все пути, не заканчивающиеся на .md:
git ls-files -- . ':!:*.md'
Важно процитировать шаблон, потому что вы хотите, чтобы git анализировал его, а не оболочку.
И сопоставить все файлы, заканчивающиеся на .js
, кроме тех, которые заканчиваются на .min.js
:
git ls-files -- '*.js' ':!:*.min.js'
Вы также можете использовать это с другими командами, такими как git grep:
git grep -w funcname -- '*.js' ':!:*.min.js'
Этот синтаксис объясняется в pathspec в gitglossary (или git help glossary
или man gitglossary
)
Ответ 2
Это уже обсуждалось в 2010 году:
На странице руководства нет указания, что -x не относится к -c.
Отсюда сложение:
Начиная с b5227d8, -x / --exclude
не применяется к кэшированным файлам.
Это легко пропустить, если вы не прочитаете обсуждение в разделе EXCLUDE PATTERNS
. Уточнить, что параметр применяется к файлам неотслеживаемых и направить читателя к EXCLUDE PATTERNS
.
Страница git ls-files
упоминает:
-x <pattern>
--exclude=<pattern>
Пропустить неотслеживаемые файлы, соответствующие шаблону
Если ваш Readme.md
отслеживается, шаблон исключения не применяется.
Ответ 3
Вам не нужно использовать параметр -exclude
потому что этот ключ используется только для пропусков файлов без следа:
$ man git-ls-files
-x <pattern>, --exclude=<pattern>
Skip untracked files matching pattern. Note that pattern is a shell wildcard pattern. See EXCLUDE PATTERNS below for more information.
Вы должны просто использовать маску для требуемых файлов
В вашем случае (исключая файлы *.md):
$ git ls-files
example1.txt
example2.pdf
readme.md
$ git ls-files *[^.md]
example1.txt
example2.pdf