как перенести "репо init / syn c" на "git" сервер? - PullRequest
1 голос
/ 06 августа 2020

У меня есть вопросы о миграции "репо" на "git", включая каталоги .repo.

<1st Action> Чтобы предотвратить конфликт. git, я удаляю все каталоги .git и .repo. После удаления .repo исходный источник не компилируется.

<2nd Action> Итак, мне нужно загрузить всю информацию .repo на мой новый git сервер. I git add, git commit и git push все исходники и .repo вручную. Но новый исходный код службы git также не компилируется. Произошла ошибка построения рецепта.

<необходимо решение> Я получил исходный код проекта с использованием repo init ~~~ и repo sync. У меня есть тестовый сервер Gitlab. Gitlab использует Git адрес репо как git@<IP>:project/test.git.

Я хотел бы клонировать (зеркало? Дублировать?) Репо и синхронизировать c все источники и истории с моим сервером Gitlab одновременно. Я хотел бы найти решение, как мне реплицировать репо init / syn c на git сервер?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

repo в repo init и repo sync - это сценарий запуска. Вы можете узнать, что это такое which repo.

repo init создает .repo в текущей папке, клонирует репозиторий репозитория с URL-адреса на .repo/repo и проверяет его ветку. URL-адрес и ветвь указываются REPO_URL и REPO_REV в панели запуска или параметрами --repo-url и --repo-branch. Репозиторий инструмента репозитория содержит пусковую установку и другие сценарии подкоманд.

repo init принимает параметры -u <url_to_manifest_repository>, -b <branch> и -m <manifest>. -u указывает репозиторий, содержащий манифесты. -b указывает ветку репозитория, а -m указывает, какой манифест использовать. <branch> по умолчанию master и <manifest> по умолчанию default.xml. Репозиторий манифеста клонируется в .repo/manifest.git, а его рабочее дерево - .repo/manifests.

Манифест, указанный в -m, указывает repo sync на выборку метаданных определенных репозиториев. Метаданные хранятся в .repo/project-objects и .repo/projects. После получения метаданных коды задействованных репозиториев извлекаются по путям, указанным в манифесте. Пути также относятся к репозиториям git, но их папки .git связаны с .repo/projects и .repo/project-objects.

Вы хотите поместить sh все репозитории в Gitlab. Сначала создайте репозитории Gitlab для всех синхронизированных репозиториев. Во-вторых, создайте локальные сиротские ветки, если вы не хотите сохранять исходную историю. В-третьих, pu sh локальные ветки для репозиториев Gitlab.

Инструмент репо имеет подкоманду forall. repo forall выполняет итерацию по всем репозиториям и запускает команды, указанные параметром -c <commands> в каждом репозитории. Вы также можете проанализировать манифест и использовать al oop для выполнения той же работы, что является более гибким. -c удобен для простой команды. Но для сложных команд лучше написать сценарий.

Предположим, что есть локальный репозиторий с именем foo.git и путем foo.

cd foo

# create an orphan branch if you don't want to keep the original history
git checkout --orphan <branch>
git commit

# create Gitlab repository with Gitlab API
# curl .....

# push the local revision to Gitlab repository
git push http://mygitlab.com/xxx/foo.git <branch>:refs/heads/<branch>

После того, как все репозитории загружены, вам необходимо создать манифест для записи репозиториев Gitlab, чтобы вы могли использовать инструмент репо для их загрузки из Gitlab. Исходя из исходного манифеста, вам необходимо изменить <remote/>, <default/> и <projects/> в соответствии с репозиториями Gitlab. После этого загрузите манифест в свой собственный репозиторий манифестов. Для получения подробной информации о формате манифеста вы можете найти do c в .repo/repo/docs/manifest-format.txt.

0 голосов
/ 06 августа 2020

Я не знаком с repo, но, если я правильно помню, repo каталог - это репозиторий git.

Вы можете git push ssh://git@<IP>:project ... без дополнительных модификации.

Кстати: папка .git/ содержит базу данных для вашего локального git репо; удаление этой папки означает стирание всей истории и всех ветвей вашего репо. Не делай этого :)

...