gpt4 book ai didi

Git 接收/更新 Hook 和新分支

转载 作者:IT王子 更新时间:2023-10-29 01:01:37 26 4
gpt4 key购买 nike

我对“更新” Hook 有疑问。在新分支的情况下,它得到 000000000000000000000000000000000000000 作为“oldrev”。我不知道如何处理这种情况。

我们有要求,每个提交消息都引用一个有效的 Jira 问题。所以我在我们的中央存储库上安装了一个“更新” Hook 。那个钩子(Hook)有一个“oldrev”和一个“newrev”。然后我像这样将它们传递给“git rev-list”:

git rev-list $oldrev..$newrev

这给了我所有转速的列表,然后我可以遍历它,并做我需要做的任何事情。

问题是,当用户推送一个新分支时,钩子(Hook)得到 0000000000000000000000000000000000000000 作为 oldrev。而“git rev-list”只是提示:

致命:无效的修订范围 0000000000000000000000000000000000000000..21bac83b2

那么我如何获得新分支上的所有 revs 的列表?我已经在网上搜索了很长时间,但一无所获。我发现的示例钩子(Hook)

  • 不处理问题,失败并返回上面的错误信息
  • 错误地尝试通过将 oldrev 设置为 ""来解决问题,这会从 rev-list 返回错误的结果
  • 遇到那个旧版本就直接放弃

这些听起来都不是特别令人兴奋。

那么有人知道如何在这种情况下得到正确答案吗?我正在考虑查询 git 以获取“给我所有可以从 newrev 访问的版本,但不能从任何其他分支(=除新分支之外的所有分支)”。但如果从新分支 merge 到任何旧分支,即使这样也会给出错误的答案。

最佳答案

在这种情况下,术语“正确答案”有点模棱两可。我实际上认为“所有可从 newrev 获得但无处可及的转速”是完全正确的。即使存在 merge 也是如此 - 在这种情况下,您应该看到新引用独有的提交和 merge 提交,但看不到 merge 后的提交。

所以,我想说的是,检查“oldrev”是否全为零,如果是,则采取相应行动:

if [ "$oldrev" -eq 0 ]; then
# list everything reachable from newrev but not any heads
git rev-list $(git for-each-ref --format='%(refname)' refs/heads/* | sed 's/^/\^/') "$newrev"
else
git rev-list "$oldrev..$newrev"
fi

关于Git 接收/更新 Hook 和新分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3511057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com