【问题标题】:Is there a way to configure git repository to reject 'git push --force'?有没有办法配置 git 存储库以拒绝“git push --force”?
【发布时间】:2010-12-17 18:58:32
【问题描述】:

我想知道有没有办法防止在存储库上出现“git push --force”(仅在主分支上)?

假设我有远程 git 存储库并执行以下操作:

  • 'git push' 到 'master'。它有效。
  • 'git push --force' 到 'branch-1'。它有效。
  • 'git push --force' 到 'master'。被拒绝了。

有可能吗?

感谢您的任何回答和建议。

BR, 大卫。

【问题讨论】:

    标签: git


    【解决方案1】:

    设置配置变量:

    receive.denyNonFastForwards
    receive.denyDeletes
    

    将防止任何“强制”推送在所有分支中起作用。

    如果您想要更好的预分支控制,那么您将不得不在远程存储库上使用“挂钩”,可能是“更新”挂钩。

    有一个名为“update-paranoid”的示例更新钩子,它可能在“contrib”文件夹中的 git 发行版中满足您的需要(以及更多)。

    gitweb link

    【讨论】:

    【解决方案2】:

    Github 已经引入了受保护分支的概念!

    可以在Settings -> Branches -> Protected Branches 下找到。该功能现在可供所有用户使用 - 不仅仅是企业!

    可以为任何分支和任何用户(包括管理员)启用此“保护”。

    更多细节在这里 - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

    因此不再需要任何钩子和任意代码。

    【讨论】:

    • 是的,但在编写 OP 时它并不存在。 :)
    【解决方案3】:

    我编写了这个快速更新钩子来防止存储库中“dev”分支上的非快进更新(推送):

    #!/bin/sh
    
    REFNAME=$1
    OLDSHA=$2
    NEWSHA=$3
    
    if [ "refs/heads/dev" != $REFNAME ]; then
      exit 0
    fi
    
    MERGEBASE=$(git merge-base $OLDSHA $NEWSHA)
    if [ $OLDSHA = $MERGEBASE ]; then
      exit 0
    fi
    
    echo "Not a fast-forward on branch dev"
    exit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2019-01-11
      • 2014-06-15
      • 2016-06-02
      • 1970-01-01
      相关资源
      最近更新 更多