Нет, вам не нужно добавлять свой подмодуль в ваш .gitignore
: то, что родитель будет видеть из вашего подмодуля, - это gitlink ( специальная записьmode 160000
).
Это означает: любое изменение, непосредственно сделанное в подмодуле, должно сопровождаться фиксацией в родительском каталоге.
Таким образом, родительский каталог будет записывать правильную фиксацию для состояния подмодуля: эта фиксация - это «gitlink», упомянутый выше;
Вы можете узнать больше об этой политике в « git submodule update (истинная природа подмодулей) ».
Основная идея подмодулей - это компонентный подход , когда вы ссылаетесь на другие репозитории в конкретных коммитах. Но если вы что-то измените в этих подмодулях, вам также необходимо обновить эти ссылки в родительском репо.
Обратите внимание, что с Git 2.13 (второй квартал 2017 г.), не игнорируя gitlink, вы все равно можете игнорировать подмодуль с помощью:
git config submodule.<name>.active false
См. Больше в « Игнорировать новые коммиты для подмодуля git ».
Примечание: с Git 2.15.x / 2.16 (Q1 2018) игнорирование подмодуля является более точным.
" git status --ignored --untracked
" не остановился на рабочем дереве отдельного проекта, который встроен в игнорируемый каталог и перечисляет файлы в этом другом проекте, вместо того, чтобы просто показать сам каталог как игнорируемый.
См. Commit fadb482 (25 октября 2017 г.) Йоханнеса Шинделина ( dscho
) .
(Объединено Junio C Hamano - gitster
- в commit da7996a , 6 ноября 2017 г.)
status
: не запутайтесь подмодулями в исключенных каталогах
Мы тщательно передаем exclude
флаг treat_directory()
функции, чтобы мы могли указать, что файлы в ней исключаются, а не не отслеживаются при рекурсии.
Но мы еще не относились к субмодулям так же.
Из-за этого git status --ignored --untracked
с подмодулем
submodule
в gitignored tracked/
подмодуль будет отображаться в разделе " Untracked files
", например
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
Вместо этого мы бы хотели, чтобы подмодуль отображался в разделе " Ignored files
":
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
файла. Это правда, что этот единственный файл (эти.gitmodules
) может включать учетные данные, но если он используется только для клонирования общедоступных репозиториев, он не должен их включать. Кроме того, их можно в любом случае кэшировать, даже в Windows, с помощью помощников по учетным данным, таких как «Git Credential Manager для Windows» ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ). Так что наличие верительных грамот -.gitmodules
это не смертельный исход.По какой-то причине submodule.module-name.active у меня не работал.
Вот почему я использовал submodule.module-name.ignore
https://git-scm.com/docs/gitmodules - здесь вы можете найти описание возможных значений параметра
У меня работает для сообщений (новые коммиты) и (измененное содержимое).
источник
Чтобы добавить к принятому ответу, я обнаружил, что добавление папки подмодуля Git в .gitignore на самом деле вызывает проблемы - особенно при попытке создать новый клон проекта. В частности, выполнение обычных команд клонирования подмодуля привело к тому, что папка подмодуля оказалась пустой:
Только попытавшись перезапустить
было ясно, в чем проблема, исходя из вывода:
Вместо добавления
-f
я удалил папку подмодуля Git из .gitignore и повторно выполнил команды клонирования подмодуля, которые теперь успешно создали папку. Я думаю, что может быть ошибка в том, что одна из команд клонирования подмодуля уважает .gitignore, но не предупреждает, что она соответственно пропускает подмодуль.источник