在 Git 中,引用被用来指定分支和标签。 分支头存储在 refs/heads 层次结构中,而标签存储在引用命名空间的 refs/tags 层次结构中(通常在 $GIT_DIR/refs/heads 和 $GIT_DIR/refs/tags 目录中,或者,如果引用是由 git gc 打包的,则作为文件 $GIT_DIR/packed-refs 的条目)。
refs/heads
refs/tags
$GIT_DIR/refs/heads
$GIT_DIR/refs/tags
git gc
$GIT_DIR/packed-refs
Git 对引用的命名方式有以下规则:
冒号 : 在获取和推送操作中被用于 srcref:dstref ,表示 `使用 srcref(源引用)的值并将其存储在 dstref(目标引用)中。 它也可以用来选择一个特定的对象,如 git cat-file : "git cat-file blob v1.3.3:refs.c"。
:
srcref:dstref
@{ 被用来作为访问一个引用日志条目的符号。
@{
使用 --branch 选项,该命令接收一个名字,并检查它是否可以作为一个有效的分支名称(例如在创建新的分支时)。但在使用之前的检查语法时要谨慎,因为它可能指的是一个分离的 HEAD 状态。 git check-ref-format --branch $name 实现的规则可能比` git check-ref-format refs/heads/$name` 说的更严格(例如,破折号可以出现在引用组件的开头,但在分支名的开头是明确禁止的)。 当在仓库中使用 --branch 选项运行时,输入的内容首先被扩展为 ``以前的检出语法" @{-n} 。 例如, @{-1} 是指使用 "git switch" 或 "git checkout" 操作签出的最后一件东西。 这个选项应该被上层命令用来在任何需要分支名的地方接受这个语法,这样他们就可以像你输入分支名一样行事。作为一个例外,请注意,当最后签出的第 N 个东西不是一个分支时,"以前的签出操作" 可能会导致一个提交对象的名字。
--branch
git check-ref-format --branch $name
@{-n}
@{-1}
将 <引用名> 解释为引用规范的参考名称模式(如用于远程仓库)。 如果这个选项被启用,<引用名> 允许在引用规范中包含一个 * (例如, foo/bar*/baz 或 foo/bar*baz/ ,但不允许 foo/bar*/baz* )。
*
foo/bar*/baz
foo/bar*baz/
foo/bar*/baz*
将 ‘引用名’ 规范化,去掉任何前导斜线( / )字符,并将名称成分之间的相邻斜线折叠成一个斜线。 如果规范化后的引用名有效,则将其打印到标准输出,并以 0 的状态退出,否则以非零状态退出。 ( --print 是 --normalize 的一种废弃的拼写方式。)
/
--print
--normalize