Git 🌙
简体中文 ▾ Topics ▾ Latest version ▾ git-check-ref-format last updated in 2.43.0

名称

git-check-ref-format - 确保引用名称的格式正确

概述

git check-ref-format [--normalize]
       [--[no-]allow-onelevel] [--refspec-pattern]
       <引用名>
git check-ref-format --branch <branchname-shorthand>

描述

检查给定的 ‘引用名’ 是否可接受,如果不可接受,则以非零状态退出。

在 Git 中,引用被用来指定分支和标签。 分支头存储在 refs/heads 层次结构中,而标签存储在引用命名空间的 refs/tags 层次结构中(通常在 $GIT_DIR/refs/heads$GIT_DIR/refs/tags 目录中,或者,如果引用是由 git gc 打包的,则作为文件 $GIT_DIR/packed-refs 的条目)。

Git 对引用的命名方式有以下规则:

  1. 它们可以包括斜线`/,用于分层(目录)分组,但任何斜线分隔的组件都不能以点.开头或以序列.lock`结尾。

  2. 它们必须至少包含一个 /。这就强制要求存在一个类别,如 heads/tags/ 等,但实际名称不受限制。 如果使用了 --allow-onelevel(允许一级)选项,这条规则将被放弃。

  3. 他们不能在任何地方有两个连续的点 ..

  4. 它们不能有 ASCII 控制字符(即数值低于 \040,或 177 DEL 的字节)、空格、斜体字 ~、省略号 ^,或冒号 : 的任何一个。

  5. 它们不能有问号 ?,星号 *,或大括号 [`的地方。 参见下面的 `--refspec-pattern 选项,以了解这一规则的例外情况。

  6. 它们不能以斜线 / 开头或结尾,也不能包含多个连续的斜线(参见下面的 --normalize 选项,该规则的一个例外)。

  7. 它们不能以点 . 结尾。

  8. 它们不能包含一个序列 @{

  9. 它们不能是单个字符 @

  10. 它们不能包含一个 \

这些规则使基于 shell 脚本的工具很容易解析引用名,当引用名未加引号(错误地)使用时由 shell 进行路径名扩展,同时也避免了某些引用名表达的歧义(见 gitrevisions[7]):

  1. 双点 .. 经常被用作 ref1..ref2,在某些情况下,这个符号意味着 ^ref1 ref2(即不在 ref1ref2 中)。

  2. 省略号 ~^ 符号用于介绍后缀 ‘第 n 个父亲’ 和 ‘剥洋葱’ 操作。

  3. 冒号 : 在获取和推送操作中被用于 srcref:dstref,表示 `使用 srcref(源引用)的值并将其存储在 dstref(目标引用)中。 它也可以用来选择一个特定的对象,如 git cat-file: "git cat-file blob v1.3.3:refs.c"。

  4. @{ 被用来作为访问一个引用日志条目的符号。

使用 --branch 选项,该命令接收一个名字,并检查它是否可以作为一个有效的分支名称(例如在创建新的分支时)。但在使用之前的检查语法时要谨慎,因为它可能指的是一个分离的 HEAD 状态。 git check-ref-format --branch $name 实现的规则可能比` git check-ref-format refs/heads/$name` 说的更严格(例如,破折号可以出现在引用组件的开头,但在分支名的开头是明确禁止的)。 当在仓库中使用 --branch 选项运行时,输入的内容首先被扩展为 ``以前的检出语法" @{-n}。 例如,@{-1} 是指使用 "git switch" 或 "git checkout" 操作签出的最后一件东西。 这个选项应该被上层命令用来在任何需要分支名的地方接受这个语法,这样他们就可以像你输入分支名一样行事。作为一个例外,请注意,当最后签出的第 N 个东西不是一个分支时,"以前的签出操作" 可能会导致一个提交对象的名字。

选项

--[no-]allow-onelevel

控制是否接受单级参考名称(即不包含多个 / 分隔的参考名称)。 默认值是 --no-allow-onelevel

--refspec-pattern

将 <引用名> 解释为引用规范的参考名称模式(如用于远程仓库)。 如果这个选项被启用,<引用名> 允许在引用规范中包含一个 *(例如, foo/bar*/bazfoo/bar*baz/,但不允许 foo/bar*/baz*)。

--normalize

将 ‘引用名’ 规范化,去掉任何前导斜线(/)字符,并将名称成分之间的相邻斜线折叠成一个斜线。 如果规范化后的引用名有效,则将其打印到标准输出,并以 0 的状态退出,否则以非零状态退出。 (--print--normalize 的一种废弃的拼写方式。)

实例

  • 打印前一个检出的东西的名称:

    $ git check-ref-format --branch @{-1}
  • 确定新分支要使用的引用名称:

    $ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")||
    { echo "我们不喜欢将 '$newbranch' 作为分支名称。" >&2 ; exit 1 ; }

GIT

属于 git[1] 文档

scroll-to-top