2015-10-29 4 views
2

Что может быть правдоподобным рабочим процессом для использования вложенных репозиториев вместо подмодулей в репозитории git? идея состоит в том, чтобы отделить части большого репо без использования git-подмодулей, но без добавления большого количества осложнений.Замена подмодулей git рабочим процессом вложенных репозиториев

Может ли это быть выполнено путем простого вложения репозиториев, имеющих свои собственные пульты, в то же время приводящие к разумному рабочему процессу?

+0

Подмодуля _is_ вложенного хранилища. Все, что делает команда субмодуля, просто (предназначено) для удобства, например. за то, что помогли клонерам найти его прямо вверх по течению для репо и сохранить его в безопасности от «rm -r» (путем подъема его в удобное и произвольное место для скрытия в переполнении репо) и т. д. 'git add' из репо добавляет хеш-код фиксации в настоящий момент. Это все, что он делает. 'git checkout' пути, который имеет хэш хеширования aka commit id, просто создает там каталог, если вы хотите, чтобы этот фиксатор был извлечен, либо вы это сделаете, либо получите, например, команду subodule, чтобы сделать это за вас. – jthill

ответ

1

Подмодулей являются отягчающими и в моем опыте, как правило, это плохая идея. То, что я делаю в некоторых из моих проектов, - это вложенные вложенные репозитории и записи .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(); 
} 
+0

Это имеет смысл, кроме того, что это может исключить возможность использования стандартных услуг непрерывной интеграции, таких как travis.ci ... поскольку это не обязательно запустит ваш скрипт для получения всего кода. Я не проверял, но я думаю, что это может быть проблемой. – matanster

Смежные вопросы