Я хочу сделать форк проекта, состоящего из нескольких репозиториев .git, переместив их все в разные (локальные) репозитории, но поддерживая точно такой же набор ветвей и тегов для каждого отдельного репозитория git.
Этот проект изначально загружается с помощью инструмента «репо». Существует файл manifest.xml, описывающий расположение каждого отдельного репозитория .git, загруженный с помощью репозитория init, а затем синхронизация репо клонирует все репозитории git.
В этом примере я буду использовать bitbucket.com, но не заостряйте внимание на битбакете, это всего лишь пример.
Вот шаги, которые я делаю прямо сейчас:
Создайте пустой репозиторий manifest.git в битбакете. Потом:
cd existing-manifest.git
git remote set-url origin ssh://[email protected]/project/manifest.git
git push -u origin --all
git push origin --tags
Создайте набор репозиториев 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://[email protected]/project/${REPO_PROJECT}.git
git push -u origin --all
git push origin --tags
popd
done
После этого отредактируйте файл manifest.xml вручную, чтобы изменить удаленный объект по умолчанию для каждого проекта, и зафиксируйте новый файл manifest.xml в моем пользовательском репозитории.
Это очень ручной процесс, не очень дружелюбный. Итак, мои вопросы:
2-й шаг можно улучшить. repo forall
достаточно и не нужно оборачивать for
.
repo forall -p -c 'git remote add origin ssh://[email protected]/project/${REPO_PROJECT}.git \
&& git push -u origin --all --tags'
В файле manifest.xml могут быть следующие теги и атрибуты:
<remote fetch = "ssh://[email protected]/project" name = "origin" />
<default remote = "origin" revision = "foo" />
<project name=bar path=bar />
которые определяют пульт по умолчанию origin
, поэтому вам не нужно указывать пульт для каждого проекта, если только один или несколько из них не размещены в других местах. Для проекта bar
его удаленным по умолчанию будет origin ssh://[email protected]/project/bar
как для извлечения, так и для отправки.