设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.43.1 → 2.50.1 无更改
-
2.43.0
2023-11-20
- 2.23.1 → 2.42.4 无变更
-
2.23.0
2019-08-16
- 2.17.0 → 2.22.5 无变更
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
- 2.13.7 → 2.14.6 无更改
-
2.12.5
2017-09-22
- 2.11.4 无更改
-
2.10.5
2017-09-22
- 2.7.6 → 2.9.5 无变更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 无更改
-
2.0.5
2014-12-17
概要
git check-ref-format [--normalize]
[--[no-]allow-onelevel] [--refspec-pattern]
<refname>
git check-ref-format --branch <branchname-shorthand>
描述
检查给定的 refname 是否可接受,如果不可接受则以非零状态退出。
Git 中使用引用来指定分支和标签。分支头存储在 refs/heads 层次结构中,而标签存储在引用命名空间的 refs/tags 层次结构中(通常在 $GIT_DIR/refs/heads 和 $GIT_DIR/refs/tags 目录中,如果引用由 git gc 打包,则作为文件 $GIT_DIR/packed-refs 中的条目)。
Git 对引用的命名施加以下规则:
-
它们可以包含斜杠
/用于分层(目录)分组,但任何斜杠分隔的组件都不能以点.开头或以序列.lock结尾。 -
它们必须包含至少一个
/。这强制要求存在诸如heads/、tags/等类别,但实际名称不受限制。如果使用--allow-onelevel选项,则此规则被豁免。 -
它们不能在任何地方有两个连续的点
..。 -
它们不能在任何地方包含 ASCII 控制字符(即值低于 \040 或 \177
DEL的字节)、空格、波浪号~、脱字号^或冒号:。 -
它们不能在任何地方包含问号 ?、星号
*或左方括号 [。请参阅下面的--refspec-pattern选项,了解此规则的例外情况。 -
它们不能以斜杠
/开头或结尾,也不能包含多个连续的斜杠(请参阅下面的--normalize选项,了解此规则的例外情况)。 -
它们不能以点
.结尾。 -
它们不能包含序列
@{。 -
它们不能是单个字符
@。 -
它们不能包含 \。
这些规则使得基于 shell 脚本的工具能够轻松解析引用名称,避免在未加引号(错误地)使用引用名称时 shell 的路径名扩展,并且还避免了某些引用名称表达式中的歧义(参见 gitrevisions[7])。
-
双点
..常用作ref1..ref2,在某些上下文中,此表示法表示^ref1ref2(即不在ref1中但在ref2中)。 -
波浪号
~和脱字号^用于引入后缀 *第N个父提交* 和 *剥离引用* 操作。 -
冒号
:用于srcref:dstref形式,在 fetch 和 push 操作中表示“使用 srcref 的值并将其存储在 dstref 中”。它也可以用于选择特定的对象,例如与 'git cat-file' 一起使用时:“git cat-file blob v1.3.3:refs.c”。 -
at-open-brace
@{用作访问 reflog 条目的表示法。
使用 --branch 选项时,该命令接受一个名称并检查其是否可用作有效的分支名称(例如,在创建新分支时)。但请注意,使用旧的 checkout 语法时可能会引用分离的 HEAD 状态。 git check-ref-format --branch $name 所实现的规则可能比 git check-ref-format refs/heads/$name 所说的更严格(例如,破折号可以出现在引用组件的开头,但在分支名称的开头是明确禁止的)。当在仓库中运行带有 --branch 选项时,输入会首先针对“上一次检出语法” @{-n} 进行扩展。例如,@{-1} 是指通过 "git switch" 或 "git checkout" 操作检出的上一个内容的引用方式。此选项应由高层命令(porcelains)使用,以便在任何预期分支名称的地方接受此语法,从而使它们表现得如同您输入了分支名称一样。值得注意的是,作为例外,“上一次检出操作”在第N次检出的内容不是分支时,可能会导致提交对象名称。
选项
- --[no-]allow-onelevel
-
控制是否接受单层引用名称(即不包含多个
/分隔组件的引用名称)。默认值为--no-allow-onelevel。 - --refspec-pattern
-
将 <refname> 解释为 refspec 的引用名称模式(如与远程仓库一起使用)。如果启用此选项,<refname> 允许在 refspec 中包含单个
*(例如,foo/bar*/baz或foo/bar*baz/,但不包括foo/bar*/baz*)。 - --normalize
-
通过移除任何开头的斜杠 (
/) 字符并将名称组件之间连续的斜杠合并为单个斜杠来标准化 refname。如果标准化后的 refname 有效,则将其打印到标准输出并以状态 0 退出,否则以非零状态退出。(--print是--normalize的已废弃写法。)
示例
-
打印上次检出内容的名称
$ git check-ref-format --branch @{-1} -
确定用于新分支的引用名称
$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")|| { echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }