gpt4 book ai didi

git - 为什么 git update-ref 接受 non/refs 引用?

转载 作者:太空狗 更新时间:2023-10-29 12:47:24 26 4
gpt4 key购买 nike

虽然像“git log”这样的命令很乐意接受相同引用的不同表达式,例如

refs/heads/master
heads/master
master

这对于“git update-ref”是不正确的。例如

git update-ref master HEAD^

不一样

git update-ref refs/heads/master HEAD^

第一个命令创建了一个新的 ref .git/master(并且反过来引入了关于 refs/heads/master 的歧义)。只有第二个命令真正更新了 master 的头部。 (.git/refs/heads/master)

为什么 git update-ref 接受没有“refs/”前缀的引用?难道不应该至少有一个警告或命令行选项来强制创建此类引用吗?

我花了很长时间才弄清楚为什么

git update-ref master HEAD^

没有按预期工作。

最佳答案

tl;dr

git log的主要原因和 git update-ref行为不同是因为git-log是一个高级命令——因此被设计成用户友好的——而git-update-ref是用于脚本的低级命令。

瓷器与管道

在 Git 中,高级命令被称为 porcelain而低级的统称为plumbing .

瓷器命令旨在供人类交互使用,因此暴露了熟悉的高级概念,例如 symbolic references .另一方面,管道命令旨在以编程方式使用——通常在脚本中——并允许直接操作 Git 的内部文件系统结构。

git-更新引用

同时 git-log能够解析引用git-update-ref – 它是一个管道命令 – 解释 the first argument作为符号链接(symbolic link)或常规文件名,具体取决于指定方式。

来自documentation :

It follows real symlinks only if they start with "refs/": otherwise it will just try to read them and update them as a regular file.

这就是为什么如果你说 git update-ref master <value>它会治疗master作为文件名并在 .git 目录中创建它。同样的道理,当你说 git update-ref HEAD <value>它会写<value>.git/HEAD文件。

关于git - 为什么 git update-ref 接受 non/refs 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36006054/

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