我如何更新&在checkout hook中提交一个文件,我应该吗?

时间:2016-10-12 16:17:04

标签: git continuous-integration githooks

一些背景:
我对CI系统很感兴趣,因为它们是在拉取请求时触发的,但不是在目标分支更新上触发的。

考虑2个没有合并冲突的拉取请求,但它们之间存在逻辑冲突。每一个都通过CI推送& pr测试。

第一个合并为主人。现在将第二个与master合并将导致逻辑​​问题。但是,没有合并冲突,CI状态表示我们很高兴,因为测试是在旧代码上运行的 简而言之:它看起来不错,但很糟糕。

我对修复的看法:
强迫冲突。 在off master的任何分支上,使用git-checkout钩子更新时间戳文件。现在,如果时间戳是下一次合并,那么它可以合并到master中,但是会与正在工作的其他人发生冲突。

现在,一个没有冲突并通过CI构建的分支可以保证很好用。 听起来不错吗?

要求:
我需要一个更新timestamp文件的钩子,并在master的任何分支上本地提交它。我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

这是一个似乎做正确的事情的脚本。它还没有经过彻底的测试。

#!/bin/sh

# https://git-blame.blogspot.ca/2013/06/checking-current-branch-programatically.html
if BRANCH=$(git symbolic-ref --short -q HEAD)
then
  ON_BRANCH=true
else
  ON_BRANCH=false
fi

MASTER_SHA=`git show-ref --heads -s master`
PREV_SHA=$1
CURRENT_SHA=$2
WAS_CHECKOUT=$3

if [ "$WAS_CHECKOUT" == "1" ] && [ "$MASTER_SHA" == "$CURRENT_SHA" ] && $ON_BRANCH && [ "$BRANCH" != "master" ];
then
  STAMP="$(git rev-parse --show-toplevel)/.stamp"
  echo "$(date +%Y-%m-%d:%H:%M:%S) - $(git config user.name)" >| "$STAMP"
  git add "$STAMP"
  git commit -m "auto stamp update"
fi