背景:我使用一个自动构建系统,它将git哈希作为输入,以及该哈希存在的分支的名称,并构建它.但是,构建系统仅使用哈希来检查代码并构建它 - 它只是将给定的分支名称存储在构建DB元数据中.
我担心开发人员在启动构建时意外地提供了错误的分支名称,当人们查看构建历史记录时会引起混淆.
那么,在将哈希和分支名称传递给构建系统之前,如何确认给定哈希实际上来自给定分支?
Dus*_*tin 121
您可以git branch
直接询问哪些分支包含有问题的提交:
% git branch -a --contains 4f08c85ad
* master
remotes/origin/bug_872
remotes/origin/bug_898
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
嗯,这个分支名称的使用似乎很可疑.正如Dustin的回答一样,可能有多个分支包含提交.为什么这些分支名称中的任何一个比另一个更好?
如果您只关心一个特定分支,则可以计算分支和提交之间的"合并基础".
在下面的图中,提交构建是C
,声明的分支的提示是T
,并且合并基础在其M
上方标记.
如果M
等于C
等于T
,那么构建提交是声明的分支的提示.
M
?
o--o--o--o--o--x branch # x is both C and T
Run Code Online (Sandbox Code Playgroud)如果M
等于C
,则声明的分支的提示是构建提交的后代.
M
?
o--o--C--o--o--T branch
Run Code Online (Sandbox Code Playgroud)如果M
等于T
,则构建的提交是声明的分支的提示的后代.
M
?
o--o--T branch
\
o--o--C
Run Code Online (Sandbox Code Playgroud)如果M
等于别的东西,那么它C
就是某些祖先的后代T
.
M
?
o--o--o--o--o--T branch
\
o--o--C
Run Code Online (Sandbox Code Playgroud)如果没有M
,那么构建提交与声明的分支无关.
o--o--o--o--o--T branch
o--o--o--o--C
Run Code Online (Sandbox Code Playgroud)您可以像这样进行此检查:
#!/bin/sh
# Usage: is-ancestor-of <branch> <commit>
if test $# -ne 2; then
echo "$0"': invalid arguments'
exit 128
fi
claimed_branch="$1"
commit="$2"
merge_base="$(git merge-base "$commit" "$claimed_branch")" &&
test -n "$merge_base" &&
test "$merge_base" = "$(git rev-parse --verify "$commit")" &&
exit 0
echo "$commit is not an ancestor of $claimed_branch" 1>&2
exit 1
Run Code Online (Sandbox Code Playgroud)
上面的脚本实际上并不要求或检查'branch'参数是否为分支(它可以是任何commit-ish).要检查某些内容实际上是一个分支,您可以使用以下内容:
#!/bin/sh
# Usage: is-branch <branch>
if test $# -ne 1; then
echo "$0"': invalid arguments'
exit 128
fi
branch="$1"
# check various branch hierarchies, adjust as needed
git show-ref --verify refs/heads/"$branch" ||
git show-ref --verify refs/remotes/"$branch" || {
echo "not a branch name: $branch" 1>&2
exit 1
}
Run Code Online (Sandbox Code Playgroud)
所以你可以一起使用它们来验证某个东西是一个分支,并且某个提交在该分支中:
is-branch "$claimed_branch" && is-ancestor-of "$claimed_branch" "$commit_to_build"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18196 次 |
最近记录: |