Git добавить субмодули в супер проект из существующих репозиториев - PullRequest
4 голосов
/ 16 сентября 2010

У меня есть несколько (около 10-15) Git-репозиториев в каталоге:

~/plugins/admin
~/plugins/editor
~/plugins/etc

У каждого есть свой отдельный репозиторий и удаленный сервер.

Проблема в том, что вытащить всеизменения из всех репозиториев, которые мне нужны:

cd ~/plugins/admin
git pull origin master
password: ********
cd ..

cd ~/plugins/editor
git pull origin master
password: ********
cd ..

cd ~/plugins/etc
git pull origin master
password: ********
cd ..

Как я могу настроить подмодули Git для извлечения всех репозиториев с помощью 1 команды,

ИЛИ альтернативно написать скрипт для Windows, Linuxи Mac (поскольку я использую все 3 операционные системы), чтобы эффективно делать то же самое.Помните, что репозитории могут находиться в разных ветках и не обязательно иметь настройку отслеживания ветвей.

Те же примечания:

  • Пароль одинаков для всех репо
  • Удаленный сервер - это те же репозитории (очевидно, в отдельных репозиториях / каталогах)
  • Я хочу ввести пароль только один раз
  • Я хочу ввести только одну команду, чтобы вытащить всеrepos
  • Открытый / закрытый ключи не доступны
  • Я подключаюсь к пульту через ssh

Ответы [ 3 ]

9 голосов
/ 01 декабря 2010
bash-3.2$ git submodule add git@repoUrl:SubmoduleName.git existing/submodule/path
Adding existing repo at 'existing/submodule/path' to the index

когда вы пытаетесь добавить субмодуль из места, где уже существует git-репо, это репо будет добавлено в индекс.

2 голосов
/ 22 ноября 2010

Используйте Perl, как это делает Git.Предполагая, что у вас есть пароль для каждого:

#!/usr/bin/perl

@dirs = ("admin", "editor", "etc" );
foreach(@dirs)
{
  chdir($_);
  exec( "git pull origin master" );
  chdir("..");
}

С небольшой дополнительной полировкой вы можете добавить лучшую обработку ошибок и чтение пароля один раз, а не каждый раз.

0 голосов
/ 21 июня 2017

(я знаю, что этот вопрос очень старый, но, возможно, мой ответ будет кому-то полезен.)

В настоящее время вы можете использовать подмодуль git для каждой задачи.

И, возможно, git pullgit pull --recurse-submodules = yes также может помочь вам

...