#git #continuous-integration #teamcity #git-mirror
#git #непрерывная интеграция #teamcity #git-зеркало
Вопрос:
Сценарий
У нас была (и все еще есть) проблема с подключением к Bitbucket, из-за чего скорость загрузки у нас очень низкая (и у нас довольно большой репозиторий), и при использовании Team City, который время от времени любит стирать загруженный репозиторий git, повторное извлечение всего репозитория может занять до 5 часов. Не зная, как отключить эту идею удаления репозитория из Team city и не зная, как долго эта проблема со скоростью будет сохраняться, мы решили создать локальное зеркало bitbucket, к которому Team City может подключиться, для извлечения всего репозитория (что занимает 5 минут вместо 5 часов).
Решение
Что я сделал для достижения этой цели, так это создал простой репозиторий Git.
C:My_bare_repo > инициализация git —голый
Затем я перенес свой локальный репозиторий разработки в этот новый пустой репозиторий, добавив пустой репозиторий в качестве нового удаленного (поскольку я не хочу создавать клон, на завершение которого уйдет 5 часов).
После этого я добавил свой URL bitbucket в качестве удаленного URL в моем простом репозитории.
C:My_bare_repo > git remote добавить источникhttps://bitbucket.org/my_repo.git
Затем я выполнил удаленное обновление.
C:My_bare_repo > источник удаленного обновления git
Затем я написал этот скрипт PowerShell, который будет выполняться (через планировщик задач Windows каждые 5 минут):
git fetch --all --tags
git branch --list | % {
git branch -D $_.Replace(" ", "")
}
git branch --remotes | where { ($_.Replace(" ", "")) -ne "origin/master" } | % {
$remote = $_.Replace(" ", "")
$local = $remote.Replace("origin/", "")
git branch --track $local $remote
}
git push origin --tags
Результат
Он не выполняет полную синхронизацию (и я не хочу, чтобы он синхронизировался с Bitbucket, за исключением добавления каких-либо новых тегов, созданных Team City). Кажется, это работает, поскольку оно успешно распространяет теги в Bitbucket и гарантирует, что последняя копия репозитория Bitbucket находится в чистом репозитории для просмотра Team City.
Вопросы
Однако мой вопрос заключается в том, существуют ли уже какие-либо подобные решения, которые было бы лучше использовать, чем то, что я придумал?
Кроме того, мне не нравится, как мне приходится удалять ветви и создавать их заново, чтобы убедиться, что они находятся в той же позиции в репозитории, где находятся исходные ветви. Есть ли способ их быстрой перемотки вперед (за неимением лучшего термина) в простом репозитории?