Я бы настоятельно рекомендовал разбор файла .gitmodules
, как правило, безопаснее и намного быстрее, чем git submodule status
. Этот файл может быть проанализирован с помощью git config
, чтобы гарантировать, что все разборе крайние случаи обрабатываются должным образом - форматирование, пробелы, комментарии и т.д.:
git ls-files | grep -Fxvf <(git config --file .gitmodules --name-only --get-regexp path | cut -d '.' -f2-)
В качестве альтернативы, файл может быть проанализирован непосредственно до тех пор, как регулярное выражение разработан таким образом, что он не будет соответствовать подмодулям, которые были Commended вне через #
:
git ls-files | grep -Fxvf <(grep "^\s*\[submodule " .gitmodules | cut -d '"' -f2)
Обратите внимание, что git submodule status
имеет выходной формат, что делает его трудно правильно разобрать через cut
. Двумя основными недостатками являются:
поле имени файла будет меняться в зависимости от того, если модуль инициализации или не
имя файла не ограничен вкладке \t
, и это не последний на строке, поэтому имена файлов с пробелами нельзя обрабатывать правильно.
Возможно, нет, поскольку эти подмодули имеют записи дерева в вашем родительском хранилище git. Кажется вполне разумным, что они отображаются 'git ls-files'. Я рекомендую вам рассмотреть возможность применения флага '--no-subodules' для' git ls-files' и отправки патча 'git'; они могли бы просто взять это. – larsks