如何在GitHub中设置仓库的receive.denyNonFastForwards

huus2vyu  于 2023-02-28  发布在  Git
关注(0)|答案(3)|浏览(168)

我在GitHub上托管了一个仓库,它有几个分支。
如何设置主存储库的配置以设置receive.denyNonFastForwards标志,使主存储库只能接受快进推送,而拒绝任何非快进推送,即使它们是--forced

o4tp2gmn

o4tp2gmn1#

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

  • GitHub支持可以在存储库上设置此设置。
  • 你可以通过将GitHub仓库设置为另一个你有更多控制权的仓库的镜像来模拟。只给予GitHub账户的写访问权限授予最少的负责人和一个用于镜像的账户。非GitHub仓库将是你设置receive.denyNonFastForwards的地方,并让每个人推送。镜像可以通过post-receive钩子来完成。两个都用的原因是为了在两个仓库之间获得最小的时间延迟,并且即使post-receive钩子更新GitHub失败(例如,如果GitHub关闭),仍然确保所有内容都是最新的。
e0bqpujr

e0bqpujr2#

Github企业版现在有一个disabling force pushes的特性,对于那些没有使用企业版的用户,你可以使用configure a pre-push hook
这是一个很好的做法,从来没有强迫推动掌握,除非绝对必要。

agxfikkp

agxfikkp3#

您可以使用ssh连接通过另一个集线器(如sourceforge.net)完成此操作。
只要把它作为github.com的镜像,并不时同步即可。
X1 M2 N1 X的一个更先进的功能是,你可以使用动态密码(2因子),而不需要外部连接。你可以只安装谷歌X1 M3 N1 X手机应用程序,并设置由集线器给出的私钥,然后你可以在没有任何外部连接(没有互联网或短信)的情况下使用密码的动态部分进行身份验证。

优点

  • 不需要禁用强制推送和修改提交功能。只需默认使用服务器配置文件选项进行推送即可。
  • 您将始终在github.com之外有一个备份,并且可以比较推送重写之前和之后的2个存储库。
  • 您仍然可以避免在远程sf.net存储库中打开和关闭receive.denyNonFastForwards标志,方法是将本地master分支推送到一个新的远程分支(例如master-<id>),然后将它与之前同步的master-<id>进行比较,这样可以完全避免合并,因为git新建/删除分支是一个代价很低的操作。但是,由于receive.denyDeleteCurrent变量上的当前分支保护,您无法轻松删除sf.net中的当前分支,因此这会导致当前主分支处于休眠状态。
    缺点
  • 您需要为github.com上的每个这样的存储库分配sf.net上的存储库,并控制同步。但是仍然有一个优点-receive.denyNonFastForwards标记默认为sf.net上的所有新存储库打开。

相关问题