如何在GitHub上设置存储库的“receive.denyNonFastForwards”?

8

我在GitHub上有一个仓库,其中有几个分支。

如何设置主要仓库的配置以设置receive.denyNonFastForwards标志,以便主要仓库只能接受快进式推送,并将拒绝任何非快进式推送,即使它们是--forced

3个回答

9

GitHub没有公开此功能,但有两个选项:

  • GitHub支持团队可以在某个仓库上设置此功能。

  • 您可以通过将GitHub存储库设置为另一个您更容易控制的存储库的镜像来模拟此功能。只给予GitHub帐户的最小负责人和用于镜像的帐户写入权限。非GitHub存储库是您设置receive.denyNonFastForwards的地方,并且所有人都可以进行推送。然后可以通过使用post-receive钩子、cron作业或两者的组合来完成镜像。选择两种方式的原因是可以使两个存储库之间的时间差最小化,即使post-receive钩子未能更新GitHub(例如,如果GitHub宕机),也可以确保一切都是最新的。


1
虽然这似乎是正确的,但我能够通过联系GitHub的支持团队并要求他们完成此操作来代表我们设置它。 - Sam Holder
1
好的,我会修改答案并提到 GitHub 支持。 - Jacob Helwig

0

Github企业版现在有一个禁用强制推送的功能。对于没有使用企业版的人,您可以配置预推钩子

除非绝对必要,否则从不强制推送到主分支是一个好习惯。


0

你可以通过另一个中心,如 sourceforge.net,使用 ssh 连接来完成。

只需将其用作 github.com 的镜像,并定期同步即可。

sourceforge.net 的另一个高级功能是,您可以使用动态密码(2FA)而无需外部连接。您只需安装谷歌的 2FAS 手机应用程序并设置中心提供的私钥,然后您就可以使用密码的动态部分进行身份验证,而无需任何外部连接(无需互联网或短信)。

优点

  • 不需要禁用强制推送和提交修订功能。默认情况下,使用服务器配置选项进行推送即可。
  • 您始终可以在github.com之外备份,可以在推送重写前后比较两个存储库。
  • 您仍然可以通过将本地master分支推送到新的远程分支(例如master-<id>)来避免在远程sf.net存储库中切换receive.denyNonFastForwards标志。然后,将其与以前同步的master-<id>进行比较。这将完全避免合并,因为git新分支的创建/删除是一项廉价操作。但是,由于当前分支保护了receive.denyDeleteCurrent变量,因此您无法轻松删除sf.net中的当前分支,因此当前主分支处于休眠状态。

缺点

  • 你需要在sf.net上为每个在github.com上的仓库分配一个仓库,并控制同步。但仍然有一个优点-对于sf.net上的所有新存储库,默认情况下都会打开receive.denyNonFastForwards标志。

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