git检查提交是否是来自主的合并提交

时间:2019-02-25 13:12:18

标签: git jenkins

我正在建立詹金斯的工作,并且正在制作修补程序。我有合并到master的hotfix分支,然后此提交标记有次要版本。这项工作被合并后成为开发大师。我需要检测此提交。如果它是从master合并而来,则使用标记版本进行构建。如果不是,则仅构建最新版本。有没有简单的方法来检测它是否是来自主服务器的合并提交?

1 个答案:

答案 0 :(得分:1)

尝试使用以下代码片段作为脚本来测试提交是否为合并。

#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
  p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
  if [[ ! -z $p ]]
  then
    echo "merged; master"
    exit 0
  else
    echo "merged; non-master"
    exit 2
  fi
else
  echo "not merged"
  exit 1
fi

背景

在git中,合并只是意味着一次提交有多个父级。

  • 命令git rev-list --parents -n 1 $commit_hash返回一组作为该提交父级的提交哈希。

  • 要检查是否有两个以上的父母*,请测试wc -w <<< $parent_hashes

  • 通过xargs将其插入,git name-rev将收集每个提交引用的名称,以便我们可以测试它是否为master –这就是{{1} }命令

最后,该命令将打印一些调试文本,并根据情况返回退出代码。

免责声明

此脚本尚未准备就绪。我可能没有考虑一些极端情况;如果找到任何内容,请给我一行,然后我将更正此答案。


* 注意。 grep -e (fancy regex) 还返回此提交的哈希值。我尚未调查原因,但如果您知道,请告诉我!