Сборка сервера git mirror - PullRequest
       40

Сборка сервера git mirror

0 голосов
/ 03 апреля 2019

Сценарий

У нас была (и все еще есть) проблема с подключением к Bitbucket, где у нас очень низкая скорость загрузки (и у нас довольно большое репо) и использование Team City, которое время от временивремя любит стереть загруженный репозиторий git, может потребоваться до 5 часов, чтобы снова вытащить весь репо.Не зная, как отключить эту идею очистки репо из Team City, и не зная, как долго эта проблема будет сохраняться, мы решили создать локальное зеркало битбакета, к которому может подключиться Team City, чтобы получить весь репо (который занимает 5 минутвместо 5 часов).

Решение

Для этого я создал пустой репозиторий Git.

C: \ My_bare_repo> gitinit --bare

Затем я поместил свой локальный репозиторий разработки в этот новый пустой репозиторий, добавив пустой репозиторий в качестве нового удаленного (так как я не хочу делать клон, который займет 5 минут).часов до завершения).

После этого я добавил URL-адрес своего битового сегмента в качестве удаленного URL-адреса в моем пустом хранилище.

C: \ My_bare_repo> git remote add origin https://bitbucket.org/my_repo.git

Затем я сделал удаленное обновление.

C: \ My_bare_repo> источник удаленного обновления git

Затем я написал сценарий PowerShell, который будетвыполнено (через Windows Task Schedчерез каждые 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Город создан).Похоже, что он работает, поскольку он успешно распространяет теги в Bitbucket и следит за тем, чтобы последняя копия Bitbucket репо находилась в голом репозитории для просмотра Team City.

Вопросы

Myвопрос в том, есть ли какие-нибудь решения, подобные этому, которые лучше использовать, чем то, что я придумал?

Кроме того, мне не нравится, как я должен удалять ветви и воссоздавать ихубедитесь, что они находятся на той же позиции в репо, где находятся исходные ветви.Есть ли способ перемотать их вперед (из-за отсутствия лучшего термина) в голом репо?

...