一些背景:
我对CI系统很感兴趣,因为它们是在拉取请求时触发的,但不是在目标分支更新上触发的。
考虑2个没有合并冲突的拉取请求,但它们之间存在逻辑冲突。每一个都通过CI推送& pr测试。
第一个合并为主人。现在将第二个与master合并将导致逻辑问题。但是,没有合并冲突,CI状态表示我们很高兴,因为测试是在旧代码上运行的 简而言之:它看起来不错,但很糟糕。
我对修复的看法:
强迫冲突。
在off master的任何分支上,使用git-checkout钩子更新时间戳文件。现在,如果时间戳是下一次合并,那么它可以合并到master中,但是会与正在工作的其他人发生冲突。
现在,一个没有冲突并通过CI构建的分支可以保证很好用。 听起来不错吗?
要求:
我需要一个更新timestamp文件的钩子,并在master的任何分支上本地提交它。我该怎么做?
感谢。
答案 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