Git钩防止合并特定分支

时间:2018-07-22 09:41:33

标签: git

我有两个分支,一个生产分支和一个主分支。我想防止合并到生产的任何新分支,这些分支从 master 和master 自身签出。

有一个git pre钩子可以帮上忙吗?

1 个答案:

答案 0 :(得分:0)

  • 在.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可用于合并