Как использовать инструмент репо для зеркалирования проекта, состоящего из нескольких репозиториев git - PullRequest
0 голосов
/ 13 июня 2019

Я хочу сделать ветвь проекта, состоящего из нескольких репозиториев .git, переместив их все в разные (локальные) репозитории, но сохранив точно такой же набор веток и тегов для каждого отдельного репозитория git.

Этот проект изначально загружен с использованием инструмента «РЕПО».Существует файл manifest.xml, описывающий расположение каждого отдельного репозитория .git, загруженный с помощью repo init, а затем синхронизирующий репозиторий клонирует все репозитории git.

В этом примере я буду использовать bitbucket.com, но нене фокусирую внимание на bitbucket, это всего лишь пример.

Вот шаги, которые я делаю сейчас:

  1. Создание пустого хранилища manifest.git в bitbucket,Затем:

    cd existing-manifest.git
    git remote set-url origin ssh://git@bitbucket.com/project/manifest.git
    git push -u origin --all
    git push origin --tags
    
  2. Создайте набор репозиториев git вручную внутри bitbucket.Затем:

    #! /bin/sh
    for LINE in $(repo forall -c 'echo ${REPO_PROJECT}":"${REPO_PATH}')
    do
        REPO_PROJECT=$(echo $LINE | cut -f 1 -d ":")
        REPO_PATH=$(echo $LINE | cut -f 2 -d ":")
        pushd $REPO_PATH
        git remote add origin ssh://git@bitbucket.com/project/${REPO_PROJECT}.git
        git push -u origin --all
        git push origin --tags
        popd
    done
    

После этого отредактируйте вручную файл manifest.xml, чтобы сменить пульт по умолчанию для каждого проекта, и зафиксируйте новый файл manifest.xml в моем настраиваемом репо.

Это очень ручной процесс, не очень дружелюбный.Итак, мои вопросы:

  1. Можно ли каким-то образом улучшить этот процесс?
  2. Возможно ли просто с помощью инструмента "РЕПО"?

1 Ответ

1 голос
/ 13 июня 2019

2-й шаг может улучшиться. repo forall достаточно, и вам не нужно оборачивать его for.

repo forall -p -c 'git remote add origin ssh://git@bitbucket.com/project/${REPO_PROJECT}.git \
                   && git push -u origin --all --tags'

Манифест.xml может иметь эти теги и атрибуты,

<remote fetch="ssh://git@bitbucket.com/project" name="origin" />
<default remote="origin" revision="foo" />
<project name=bar path=bar />

, которые определяют пульт по умолчанию origin, поэтому вам не нужно указывать пульт для каждого проекта, если один или несколько из них не размещены в других местах. Для проекта bar его удаленным по умолчанию будет origin ssh://git@bitbucket.com/project/bar как для извлечения, так и для отправки.

...