Вы игнорируете подмодуль git в своем .gitignore или передаете его вашему репо?

Я добавил подмодуль к моему проекту в project_dir/vendor/submodule_one теперь каждый раз, когда я запускаю git status, я получаю modified: vendor/submodule_one (new commits).

Мой вопрос - это лучший способ справиться с этим? Добавить ли vendor/submodule_one -панель в мой .gitignore, так как мой основной проект не должен знать о специфике моего подмодуля?

Или когда я изменяю и изменяю свои подмодули, мне также нужно сделать коммиты в моем основном проекте?

Просто начав с подмодулей и не мог найти много информации, кроме их настройки.

Ответ 1

Нет, вам не нужно добавлять свой подмодуль в .gitignore: родитель увидит из вашего подмодуля gitlink (специальная запись , mode 160000).

Это означает, что любое изменение, непосредственно сделанное в подмодуле, должно сопровождаться фиксацией в родительском каталоге.
Таким образом, родительский каталог будет записывать правильную фиксацию для состояния подмодуля: эта фиксация является упомянутой выше "gitlink";

Вы можете прочитать больше об этой политике в "git submodule update (истинная природа подмодулей)".
Основная идея подмодулей - это компонентный подход, где вы ссылаетесь на другие репозитории при определенных фиксациях. Но если вы что-то измените в этих подмодулях, вам также необходимо обновить эти ссылки в родительском репо.


Обратите внимание, что в Git 2.13 (Q2 2017), не игнорируя gitlink, вы все равно можете игнорировать подмодуль с помощью:

git config submodule.<name>.active false

Подробнее см. в разделе "Игнорировать новые коммиты для подмодуля git".


Примечание: в Git 2.15.x/2.16 (Q1 2018) игнорирование подмодуля является более точным.
"git status --ignored --untracked" не остановился на рабочем дереве отдельного проекта, который встроен в игнорируемый каталог и перечислил файлы в этом другом проекте, вместо того, чтобы просто показывать сам каталог как проигнорированный.

См. коммит fadb482 (25 октября 2017 г.), автор Йоханнес Шинделин (dscho).
(Merged by Junio C Hamano -- [TG45] -- in commit da7996a, 06 Nov 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/

Ответ 2

По какой-то причине submodule.module-name.active у меня не сработало.

Вот почему я использовал submodule.module-name.ignore

git config submodule.<your module path>.ignore all

https://git-scm.com/docs/gitmodules - здесь вы можете найти описание возможных значений для параметра

У меня работает для (новые коммиты) и (модифицированный контент) сообщений.