Подмодулей являются отягчающими и в моем опыте, как правило, это плохая идея. То, что я делаю в некоторых из моих проектов, - это вложенные вложенные репозитории и записи .gitignore
. Таким образом, вложенные репозитории игнорируются внешним контейнером-репо, но мне вообще не нужно хлопотать с подмодулями.
В моей ситуации я обычно использую свои собственные скрипты для обработки таких вещей, как клонирование, обновление и очистка вложенных репозиториев. Нетрудно приготовить что-то подобное.
Вот пример того, что я делаю для управления плагинами Vim в виде вложенных репозиториев. Полный скрипт по этому URL-адресу, его фрагмент ниже.
https://github.com/tangledhelix/dotfiles/blob/master/install.pl
# install or update vim bundles
sub vim_bundle_installer {
my $bundle_path = "$ENV{HOME}/.vim/bundle";
mkdir $bundle_path unless -d $bundle_path;
foreach my $bundle (keys %vim_bundles) {
my $repo = $vim_bundles{$bundle};
unless ($repo =~ /^(https?|git):\/\//) {
if ($use_ssh) {
$repo = "git\@github.com:$repo.git";
} else {
$repo = "https://github.com/$repo.git";
}
}
my $this_bundle_path = "$bundle_path/$bundle";
if (-d $this_bundle_path) {
next if $vim_newmods_only;
if ($vim_do_updates) {
print " updating vim bundle $bundle\n";
system "cd $this_bundle_path && git pull";
} else {
print " skipping vim bundle $bundle (already exists)\n";
}
} else {
print " cloning vim bundle $bundle\n";
system "git clone $repo $this_bundle_path";
}
}
}
sub vim_newmods_installer {
$vim_newmods_only = 1;
vim_bundle_installer();
}
sub vim_bundle_updater {
$vim_do_updates = 1;
vim_bundle_installer();
}
Подмодуля _is_ вложенного хранилища. Все, что делает команда субмодуля, просто (предназначено) для удобства, например. за то, что помогли клонерам найти его прямо вверх по течению для репо и сохранить его в безопасности от «rm -r» (путем подъема его в удобное и произвольное место для скрытия в переполнении репо) и т. д. 'git add' из репо добавляет хеш-код фиксации в настоящий момент. Это все, что он делает. 'git checkout' пути, который имеет хэш хеширования aka commit id, просто создает там каталог, если вы хотите, чтобы этот фиксатор был извлечен, либо вы это сделаете, либо получите, например, команду subodule, чтобы сделать это за вас. – jthill