里面有这些遥控器和分支:
> 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.
试图删除本地和所有远程中的所有引用。但是没有用。遥控器会以某种方式记住状态。
试图用一个遥控器重现,它报告了同样的警告。
有没有办法取消镜像远程存储库?
似乎问题出在推送算法的逻辑上。
有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)