【问题标题】:Git hook prevent merging specific branchGit钩子防止合并特定分支
【发布时间】:2018-07-22 09:41:33
【问题描述】:

我有两个分支,一个生产分支和一个主分支。我想防止从 ma​​ster 和 master self 签出的任何新分支合并到 production

有一个 git pre 钩子可以帮助解决这个问题吗?

【问题讨论】:

  • 在您的情况下,您是否已经阻止用户推送主远程分支?
  • 推到哪里?
  • 从远程到本地分支。需要防止用户禁用自己计算机上的挂钩以尝试执行远程推送

标签: git


【解决方案1】:
  • 在 .git/hooks/ 文件夹中创建 prepare-commit-msg
  • 设置 chmod 权限:chmod +x .git/hooks/prepare-commit-msg
  • 禁用快进合并:git config branch.master.mergeoptions "--no-ff"

.git/hooks/prepare-commit-msg

#!/usr/bin/env ruby

# Only for exceptions. In your case is empty array
WHITELIST_BRANCH = ["hotfix"]

def merge?
  ARGV[1] == "merge"
end

def into_master?
  current_branch = `git branch | grep '*' | sed 's/* //'`.chop
  current_branch == "master"
end

def merge_msg
  @msg ||= `cat .git/MERGE_MSG`
end

def from_branch
  @from_branch = merge_msg.match(/Merge branch '(.*?)'/)[1]
end

def whitelist_branch?
  WHITELIST_BRANCH.include?(from_branch)
end

if merge? && into_master? && !whitelist_branch?
  out = `git reset --merge`
  puts
  puts " Fail #{from_branch} into the *master* branch "
  puts
  puts " run the following command now to discard your working tree changes:"
  puts
  puts " git reset --merge"
  puts
  exit 1
end

在此代码中,只有 WHITELIST_BRANCH 可用于合并

【讨论】:

  • 但是为什么我们需要WHITELIST_BRANCH?我需要能够将任何未从 master 签出的分支合并到生产分支。
  • WHITELIST_BRANCH 用于例如修补程序分支。在您的情况下,WHITELIST 是一个空数组。在此代码中,使用“dev”作为白名单确实不是一个好选择。固定答案
猜你喜欢
  • 2019-03-28
  • 1970-01-01
  • 2011-12-30
  • 2016-01-12
  • 2011-08-31
  • 2011-11-20
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多