有两个远程存储库,如下所示。
git clone --mirror original.git
克隆的镜像存储库。使用git push --mirror
将引用从镜像推送到原始远程服务器,可以正常工作。但是,当refspec
(例如分支名称)与git-push
结合使用时,Git会尝试从原始存储库和镜像存储库中删除除指定分支之外的所有其他分支。
receive.denyDeletes
的情况下,如何防止删除远程分支? (我只是误删了远程分支。)注意:我现在正在使用git v2.18.0
,据我所知,git push --mirror <repo> <refsepc>
在较旧的版本(例如git v1.7.1
)中是不允许的。
bash-4.1$ cd mirror.git/
bash-4.1$ git branch
* master
new_branch
bash-4.1$ git config --list | grep remote
remote.origin.url=/user/han/git/original.git/
remote.origin.fetch=+refs/*:refs/*
remote.origin.mirror=true
bash-4.1$ git push --mirror
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 280.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /user/han/git/original.git/
* [new branch] new_branch -> new_branch
bash-4.1$ git push origin master
To /user/han/git/original.git/
- [deleted] new_branch
答案 0 :(得分:0)
specification for the --mirror
option in git push
是:
不是指定每个引用来推送,而是指定以下所有引用
refs/
(包括但不限于refs/heads/
,refs/remotes/
和refs/tags/
)镜像到远程 资料库。新创建的本地裁判将被推送到远程 端,本地更新的参考将在远端强制更新, 和已删除的引用将从远端删除。这是 如果设置了配置选项remote.<remote>.mirror
,则默认设置。
(黑体字)。将--mirror
与命令行refspec结合使用会使您的Git相信命令行上提到的所有 not 引用都将被删除,这将导致您的Git发送“删除此ref”请求。 > 1 到另一个Git。
有人可能会认为这是一个错误-您自己的Git应该只是拒绝将--mirror
与命令行参数refspecs结合使用的尝试-这肯定有点不友好。另请参见--prune
,它具有相似的行为,并且是旨在与命令行参考规范结合使用。
1 像往常一样,它们采取有礼貌的形式,“如果愿意,请执行--force
标志,或者生成请求的refspec的加号。不幸的是,默认情况下,要遵守 delete 分支的礼貌请求,而不同于礼貌地请求以非快进方式移动分支。