如何在没有镜像存储库中的默认--mirror选项的情况下进行推送

时间:2013-07-03 16:07:00

标签: git

出于某种原因,我必须为中央仓库创建一个镜像仓库。

central repo< ----->镜子回购< -----> dev repo

风险是推入镜像回购可能会覆盖中央回购的历史。

如果有人(J先生)将新提交(commit_X)推送到中央仓库,同时镜像将在没有提取的情况下推送,那么此推送将覆盖中央仓库的历史记录。因此,commit_X将被删除。

J先生需要再次拉动,合并并推送他的commit_X。

根本原因是如果使用clone --mirror创建了回购,push默认情况下会隐式使用--mirror,即使它未在push之后添加。

我知道可以在centrol repo端安装一个钩子脚本来禁用push --mirror

但有没有办法在镜像回购方面禁用它?

[EDIT1] 添加了一个插图,可帮助您理解此问题。

enter image description here

1 个答案:

答案 0 :(得分:0)

只需修改.git/config并取消设置remote.<remote>.mirror,如git help push中所述:

  

<强> - 镜
  而不是将每个引用命名为push,指定将refs /下的所有引用(包括但不限于refs / heads /,refs / remotes /和refs / tags /)镜像到远程存储库。新创建的本地引用将被推送到远程端,本地更新的引​​用将在远程端强制更新,并且已删除的引用将从远程端删除。如果设置了配置选项remote..mirror,则这是缺省值。