没有强制推送的Git镜像

6

有没有可能建立一个 git 存储库,它能够像传统的 --mirror 一样用于向其中拉取内容,但是在从中推送到另一个存储库时不强制要求?


这个链接可能对你有用:http://superuser.com/questions/276079/disable-specific-git-commands-in-a-particular-repository - sjakubowski
你想要推送的--mirror是什么?如果你正在寻找标签和远程引用,你应该能够使用refspec来推送它们。 - andygavin
3个回答

4
您可以添加 --no-force 参数来禁用强制行为,如下所示:
git push --mirror --no-force

这将禁用非快进更新(在git 1.8.0.2中测试过)。


2
1.8.4中没有看到这种行为,也没有在git-push的man页面中记录--no-force。此外,在1.8.0.21.8.4之间的发布说明中也没有提到删除--no-force选项。 - bloudermilk
1
有趣的是,如果远程配置中设置了“mirror”选项,则--no-force选项无效。一旦我从配置中删除了“mirror”选项,并像上面显示的那样从命令行设置了--mirror,一切都按照广告所说的那样工作了。我的git版本是1.8.4 - bloudermilk

3
我希望进行git push --mirror,如果需要非快速转发更新,则操作失败。
如果上游repo的配置设置为 receive.denyNonFastForwards true,则git push --mirror应该失败: git config man page:
receive.denyNonFastForwards

如果设置为truegit-receive-pack将拒绝非快进的ref更新。使用此功能可以防止通过推送进行这种更新,即使是强制推送也不行。在初始化共享存储库时设置此配置变量。这意味着您不必“复制--mirror”所做的操作:您可以简单地使用它,并且如果涉及任何非快进合并,则仍然会出现推送失败。

这是一个好主意;不幸的是,我想以那种方式推送到Github,但它不支持这个。 - miracle2k
1
@miracle2k 如果您向GitHub支持团队请求以这种方式保护您的存储库,那么它是可以的。 - VonC

1

有没有可能用其他选项复制--mirror的操作?

使用一些推送命令可以完成mirror的部分操作:

git push <remote> --all  # push all branches
git push <remote> --tags # push all tags
git push <remote> refs/remotes/* #push the remote refs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接