Вы игнорируете подмодуль git в своем .gitignore или фиксируете его в своем репо? - PullRequest
66 голосов
/ 27 октября 2011

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

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

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

Просто начинаю работать с подмодулями и, похоже, не могу найти много информации помимо их настройки.

1 Ответ

61 голосов
/ 27 октября 2011

Нет, вам не нужно добавлять ваш подмодуль к вашему .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) .
(Объединено с Junio ​​C Hamano - gitster - 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/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...