首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >githooks(5):Git "null-ref“是什么?

githooks(5):Git "null-ref“是什么?
EN

Stack Overflow用户
提问于 2022-07-15 22:35:48
回答 3查看 54关注 0票数 2

钩子的文档中,它说

它也是在git-clone[1]之后运行的,除非使用了--no-checkout (-n)选项。给钩子的第一个参数是null- ref,第二个参数是新头和标志的引用总是1。同样,对于git worktree add,除非使用--no-checkout

这里的"null-ref“指的是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-15 22:35:48

它是由所有零组成的提交ID。

我在~/.config/git/template/hooks/post-checkout中添加了下面一行

代码语言:javascript
复制
echo "post-checkout" "$@" 1>&2

然后克隆一个新的存储库,得到以下输出:

代码语言:javascript
复制
post-checkout 0000000000000000000000000000000000000000 4abcac4ddfb69f6dfde1af0164f2f0ee0e230336 1

因此,看起来post-checkout脚本中的"null-ref“是0000000000000000000000000000000000000000

这个问题背后的背景是,只有当我从工作的Gitlab服务器克隆存储库时,我才希望设置一个特殊的per配置user.email值。现在,我可以在结帐后脚本中添加以下内容来修改它:

代码语言:javascript
复制
# This value of `$1` is the null-ref from githooks(5) - see
# https://stackoverflow.com/a/73000183/207384.
# for sed trick see torek's answer
if [[ "$1" = "$(git rev-parse HEAD | sed s/./0/g)" ]]; then
    # Set user.email specially for work repositories.
    if [[ "$(git config remote."$(git config branch."$(git branch --show-current)".remote)".url)" =~ "gitlab.example.com" ]]; then
        git config user.name "John Doe"
        git config user.email "John Doe@example.com"
    fi
fi
票数 3
EN

Stack Overflow用户

发布于 2022-07-16 04:32:02

这个文档可能应该更新一点,因为null-ref这个词是误导性的,但是您是正确的,它是一个全零的散列ID,Git在其他地方使用"null ID“这个短语,特别是在函数is_null_oid的内部。由于"OID“是一个首字母缩略词,它通常在英文文本中是大写字母,而"null”有时也会出现:例如,参见2.18发行说明书,vs 文档,其中拼写为"null OID“。

我个人认为git rev-parse应该可以选择吐出(以及空树的散列ID ),因为SHA-256 OID是64字节长,而不是40字节长。然而,作为一种权宜之计,人们可以使用:

代码语言:javascript
复制
null_oid=$(git rev-parse HEAD | sed s/./0/g)

或者,将hash-object的技巧做得更深一点:

代码语言:javascript
复制
empty_tree=$(git hash-object -t tree --stdin </dev/null)
null_oid=$(echo $empty_tree | sed s/./0/g)

这会让你们两人都满意,并将继续在一些未来的Git中工作,这些Git有更长的OID。

票数 1
EN

Stack Overflow用户

发布于 2022-07-16 20:33:40

文档指出,对于正常的git checkout情况,前两个参数是

给出了钩子的三个参数:前一个头的参考值,新头的参考值(可能已经改变了,也可能没有改变),.“

但在git clone的情况下,显然没有先前的参考资料。因此,必须给出某种“空”参数。在git中,提供了所有零的“空引用”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73000182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档