【问题标题】:Unmirror accidentally mirrored remote repositoriesUnmirror 不小心镜像了远程仓库
【发布时间】:2023-02-25 18:49:33
【问题描述】:

拥有这些遥控器和分支机构:

> git show-ref
... refs/heads/master
... refs/heads/old-master
... refs/remotes/bb/master
... refs/remotes/bb/old-master
... refs/remotes/gh/HEAD
... refs/remotes/gh/master
... refs/remotes/gh/old-master
... refs/remotes/sf/master
... refs/remotes/sf/old-master

gh 用作主头,所有其他遥控器用作副本(分支镜像,而不是 refs 镜像)。

这些用于拉取和分配所有 refs 的命令没有错误和警告:

git pull gh *:*
git pull bb *:*
git pull sf *:*

但是有一天,一个或多个遥控器被意外地镜像了:

git push gh --mirror
git push bb --mirror
git push sf --mirror

或者

git push gh *:*
git push bb *:*
git push sf *:*

现在远程计数器部分进入镜像状态并报告警告:

> git pull gh *:*
warning: refs/remotes/gh/master usually tracks refs/heads/master, not refs/remotes/gh/master
warning: refs/remotes/gh/old-master usually tracks refs/heads/old-master, not refs/remotes/gh/old-master
Already up to date.

试图删除本地和所有遥控器中的所有引用。但是没有用。遥控器会以某种方式记住状态。

试图用一个遥控器重现,它报告了相同的警告。

有没有办法取消镜像远程存储库?

【问题讨论】:

    标签: git mirror unmirror


    【解决方案1】:

    似乎问题出在推送算法的逻辑上。

    有 2 个 for(伪代码):

    for remote in remotes:
      for branch in branches:
        git_push([remote, ':refs/remotes/' + remote + '/' + branch])
    

    而不是 3 for:

    for remote in remotes:
      for ref_remote in remotes:
        for branch in branches:
          git_push([remote, ':refs/remotes/' + ref_remote + '/' + branch])
    

    因为每个远程镜像后面都有num(refs) = num(branches) x num(remotes)

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 2016-02-05
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2021-09-01
      相关资源
      最近更新 更多