Unmirror 不小心镜像了远程存储库

问题描述 投票:0回答:1

里面有这些遥控器和分支:

> 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 的命令没有错误和警告:

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个回答
0
投票

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

有2个for(伪代码):

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

代替 3 个:

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)

© www.soinside.com 2019 - 2024. All rights reserved.