我正在为Git编写预接收挂钩。如果推送了多个提交,并且其中任何一个提交失败,则整个推送失败。这就是我想要的。
我的问题是并非传入所有提交的所有哈希值。只有最新的提交哈希值,例如。
2个提交被推送到回购:
Commit 1 - 4b5w<br>
Commit 2 - 6gh7 -------------> passed in to pre-receive hook,
but I want the previous hash too.
我无法使用为每个引用调用的更新挂钩,因为如果其中任何一个失败,我不希望任何提交通过,例如提交1传递和提交2失败是不可接受的,因为当提交2失败时,我必须以某种方式回滚提交1。
如何将所有提交的哈希值传递给预接收挂钩?
答案 0 :(得分:2)
while read old new ref; do
[[ $new = *[^0]* ]] && news="$news $new"
done
git rev-list $news --not --all
这将避免像以前推送的提交快速转发,触发浪费的未更改内容的重新验证。
答案 1 :(得分:1)
您可以使用预接收挂钩并仍然列出所有推送的提交 请参阅this answer,其中包括:
chomp(my @commits = `git rev-list $old..$new`);
if ($?) {
warn "git rev-list $old..$new failed\n";
++$errors, next;
}
foreach my $sha1 (@commits) {
// validate some policy
}
正如torek所评论的那样,这只适用于master
分支。
你可以deal with multiple branches:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
# Do something
fi
done