Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git钩子只允许合并带有单个提交的分支_Git_Githooks - Fatal编程技术网

git钩子只允许合并带有单个提交的分支

git钩子只允许合并带有单个提交的分支,git,githooks,Git,Githooks,在存储库中,我只允许每个分支使用一次提交。如果有多个提交,则需要在合并之前重新设置基础。。因为失败是人的本性,我常常忘记这一点 我想实现一个git钩子,用于检查合并请求中合并到开发中的分支是否有一个提交 提前感谢。如果您在remote上实现了一个钩子,那么您可以使用更新钩子来运行以列出不同的提交,然后处理输出中的行数。 旧的_散列和新的_散列作为参数传递给这个钩子,钩子是现有的和新的提交散列。Git将此钩子称为 “$GIT\u DIR/hooks/update refname old\u has

在存储库中,我只允许每个分支使用一次提交。如果有多个提交,则需要在合并之前重新设置基础。。因为失败是人的本性,我常常忘记这一点

我想实现一个git钩子,用于检查合并请求中合并到开发中的分支是否有一个提交


提前感谢。

如果您在remote上实现了一个钩子,那么您可以使用更新钩子来运行以列出不同的提交,然后处理输出中的行数。 旧的_散列和新的_散列作为参数传递给这个钩子,钩子是现有的和新的提交散列。Git将此钩子称为

“$GIT\u DIR/hooks/update refname old\u hash new\u hash”

下面是一个示例,您可以插入
git rev list--merges${1}~1..${1}
来确定它是否是合并提交

case "$1" in
  refs/heads/*)
    is_merge = $(git rev-list --merges ${1}~1..${1})
    if [ ! -z "${is_merge}" ]; then 
        commit_count = $(git rev-list $2..$3 | wc -l)
        if [ ${commit_count} > 1 ]; then
            echo <reject with your message>
            exit 1
        fi
    else
       <Not a merge commit do other validations>
    fi
    ;;
esac
中的案例“$1”
参考文献/标题/*)
is_merge=$(git rev list--merges${1}~1..${1})
如果[!-z“${is_merge}”];然后
提交计数=$(git版本列表$2..$3 | wc-l)
如果[${commit_count}>1];然后
回音
出口1
fi
其他的
fi
;;
以撒

如果要在remote上实现钩子,则可以使用更新钩子运行以列出不同的提交,然后处理输出中的行数。 旧的_散列和新的_散列作为参数传递给这个钩子,钩子是现有的和新的提交散列。Git将此钩子称为

“$GIT\u DIR/hooks/update refname old\u hash new\u hash”

下面是一个示例,您可以插入
git rev list--merges${1}~1..${1}
来确定它是否是合并提交

case "$1" in
  refs/heads/*)
    is_merge = $(git rev-list --merges ${1}~1..${1})
    if [ ! -z "${is_merge}" ]; then 
        commit_count = $(git rev-list $2..$3 | wc -l)
        if [ ${commit_count} > 1 ]; then
            echo <reject with your message>
            exit 1
        fi
    else
       <Not a merge commit do other validations>
    fi
    ;;
esac
中的案例“$1”
参考文献/标题/*)
is_merge=$(git rev list--merges${1}~1..${1})
如果[!-z“${is_merge}”];然后
提交计数=$(git版本列表$2..$3 | wc-l)
如果[${commit_count}>1];然后
回音
出口1
fi
其他的
fi
;;
以撒

您的问题是?StackOverflow不是代码编写服务。告诉我们您做了什么,编写代码,如果您有问题,请提出具体问题。@LubošTurek感谢您的建议。我不知道怎么做,正在寻求帮助。我不希望您为我编写代码,而希望您提供提示或帮助。您的问题是?StackOverflow不是一种代码编写服务。告诉我们您做了什么,编写代码,如果您有问题,请提出具体问题。@LubošTurek感谢您的建议。我不知道怎么做,正在寻求帮助。我不希望你为我写代码,而希望你给我一个提示或帮助。看起来很有希望。我想知道是否需要剪下这个片段来估计这是否是一个承诺。我在
update.sample
示例钩子中发现,
case
通过
调用“$refname”,“$newrevu type”
,因此您应该能够检查
refs/heads/*,commit
是的,但是在本地存储库中,如果合并是快进的,则可能不会创建commit。所以它是可靠的远程检查。看起来很有希望。我想知道是否需要剪下这个片段来估计这是否是一个承诺。我在
update.sample
示例钩子中发现,
case
通过
调用“$refname”,“$newrevu type”
,因此您应该能够检查
refs/heads/*,commit
是的,但是在本地存储库中,如果合并是快进的,则可能不会创建commit。因此,远程检查是可靠的。