1

设想

我们已经(并且仍然存在)与 Bitbucket 的连接问题,我们的下载速度非常慢(并且我们有相当大的存储库)并且使用 Team City 不时喜欢擦除它下载的 git 存储库,最多可能需要 5 个小时才能再次提取整个 repo。不知道如何从 Team city 关闭这个 repo 擦除想法,也不知道这个速度问题会持续多久,我们决定创建一个 Team City 可以连接到的本地 bitbucket 镜像,以获取整个 repo(这需要 5 分钟而不是 5 小时)。

解决方案

我所做的是创建一个裸 Git 存储库。

C:\My_bare_repo> git init --bare

然后我通过将裸存储库添加为新的远程存储库将本地开发存储库推送到这个新的裸存储库(因为我不想进行需要 5 小时才能完成的克隆)。

之后,我将我的 bitbucket url 作为远程 url 添加到我的裸存储库中。

C:\My_bare_repo> git 远程添加源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

结果

它不会进行完全同步(除了推送 Team City 创建的任何新标签外,我不希望它与 Bitbucket 同步)。它似乎正在工作,因为它成功地将标签传播到 Bitbucket,并确保 Bitbucket 存储库的最新副本位于可供 Team City 查看的裸存储库中。

问题

不过我的问题是,是否有任何这样的解决方案比我想出的更好用?

另外,我不喜欢我必须删除分支并重新创建它们以确保它们在源分支所在的存储库中的相同位置。有没有办法在一个裸仓库中快速转发它们(因为缺乏更好的术语)?

4

0 回答 0