gpt4 book ai didi

git - 如何防止特定分支在git中被 merge ?

转载 作者:太空狗 更新时间:2023-10-29 14:35:24 25 4
gpt4 key购买 nike

我们有一个用于发布生产代码的 master 分支,一个用于测试服务器代码的 dev 分支,以及各种功能分支(从 master),每个开发人员都认为合适。

随着时间的推移,dev 分支与 master 分支有所不同。此外,那里还有一些不正确的 merge ,导致部分代码困惑。我们已经多次尝试重置(强制推送)devmaster 相同。可以说,从头开始。

不幸的是,这不会持续很长时间。迟早有人会将旧的 dev merge 到新的 dev 中,将所有的困惑带回来。我怀疑这甚至可能自动发生,其中一个天真的 git pull 默默地 merge 新旧分支头。

是否可以使用服务器端提交 Hook 来防止这种情况发生?如果 merge 了错误的提交,会拒绝接受 git push 的东西?

最佳答案

Git Hooks 是可能的.将以下 POC 脚本放入远程(服务器端)存储库上的 .git/hooks/pre-receive 并授予其正确的执行权限。

配置你要保护的分支,例如master

$ git config hooks.protected-branch.refs master

文件:.git/hooks/pre-receive

#!/bin/sh

read old_value new_value ref_name

refs=$(git config hooks.protected-branch.refs)

for ref in $refs; do
if [ "$ref_name" == "refs/heads/$ref" ]; then
if [ "$old_value" == "0000000000000000000000000000000000000000" ]; then
continue
fi

if ! git merge-base --is-ancestor "$ref_name" "$new_value"; then
echo "$ref_name is protected branch"
exit 1
fi
fi
done

当您尝试通过强制推送重置 master 时,您将得到类似如下的输出:

Counting objects: 12, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (12/12), 920 bytes | 153.00 KiB/s, done.
Total 12 (delta 4), reused 0 (delta 0)
remote: refs/heads/master is protected branch
To ../demo
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '../demo

关于git - 如何防止特定分支在git中被 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52968175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com