Сценарий
У нас была (и все еще есть) проблема с подключением к 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вопрос в том, есть ли какие-нибудь решения, подобные этому, которые лучше использовать, чем то, что я придумал?
Кроме того, мне не нравится, как я должен удалять ветви и воссоздавать ихубедитесь, что они находятся на той же позиции в репо, где находятся исходные ветви.Есть ли способ перемотать их вперед (из-за отсутствия лучшего термина) в голом репо?