如何获取在预接收挂钩中提交的所有哈希值?
How to get ALL hashes that are being committed in a pre-receive hook?
我正在为 Git 编写预接收挂钩。如果推送多个提交,其中任何一个提交失败,那么整个推送都会失败。这就是我想要的。
我的问题是并非所有提交的所有哈希值都被传入。只有最近的提交哈希值是,例如
2 个提交被推送到一个 repo:
Commit 1 - 4b5w<br>
Commit 2 - 6gh7 -------------> passed in to pre-receive hook,
but I want the previous hash too.
我不能使用为每个引用调用的更新挂钩,因为我不希望任何提交在其中任何一个失败时通过,例如提交 1 通过和提交 2 失败是不可接受的,因为当提交 2 失败时我将不得不以某种方式回滚提交 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
while read old new ref; do
[[ $new = *[^0]* ]] && news="$news $new"
done
git rev-list $news --not --all
这将避免像 fastforwards over previously pushed commits 触发未更改内容的浪费重新验证之类的事情。
我正在为 Git 编写预接收挂钩。如果推送多个提交,其中任何一个提交失败,那么整个推送都会失败。这就是我想要的。
我的问题是并非所有提交的所有哈希值都被传入。只有最近的提交哈希值是,例如
2 个提交被推送到一个 repo:
Commit 1 - 4b5w<br>
Commit 2 - 6gh7 -------------> passed in to pre-receive hook,
but I want the previous hash too.
我不能使用为每个引用调用的更新挂钩,因为我不希望任何提交在其中任何一个失败时通过,例如提交 1 通过和提交 2 失败是不可接受的,因为当提交 2 失败时我将不得不以某种方式回滚提交 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
while read old new ref; do
[[ $new = *[^0]* ]] && news="$news $new"
done
git rev-list $news --not --all
这将避免像 fastforwards over previously pushed commits 触发未更改内容的浪费重新验证之类的事情。