git check-ref-format
名称
git-check-ref-format - 确保引用名称格式正确
概要
git check-ref-format [--normalize] [--[no-]allow-onelevel] [--refspec-pattern] <refname>git check-ref-format --branch <branchname-shorthand>
描述
检查给定refname
是否可接受,如果不是,则退出非零状态。
Git 使用引用来指定分支和标签。分支头存储在refs/heads
层次结构中,而标记存储在refs/tags
ref命名空间的层次结构中(通常位于$GIT_DIR/refs/heads
和$GIT_DIR/refs/tags
目录中,或者作为$GIT_DIR/packed-refs
文件中的条目,如果引用被git gc
打包)。
Git 对引用的命名方式施加了以下规则:
1. 它们可以包括/
用于分层(目录)分组的斜杠,但没有斜线不以.
开始或以.lock
序列结束。
2. 它们必须包含至少一个/
。这强制类似的heads/
,tags/
等存在,但是实际名称不受限制。如果使用--allow-onelevel
选项,则放弃该规则。
3. 他们不能在..
任何地方有两个连续的点。
4. 它们不能具有任何位置的 ASCII 控制字符(即,其值低于\ 040或\ 177DEL
的字节),空格,波浪形符号~
,插入符号^
或冒号:
。
5. 他们不能在任何地方出现问号?
,星号*
或开口支架[
。有关--refspec-pattern
此规则的例外情况,请参阅下面的选项。
6. 它们不能以斜杠开始或结束,/
或者包含多个连续的斜杠(请参阅--normalize
下面的选项以了解此规则的例外情况)
7. 它们不能以点.
结束。
8. 他们不能包含一个@{
序列。
9. 他们不能是单个@
角色。
10. 他们不能包含一个\
。
这些规则使得基于 shell 脚本的工具可以很容易地解析引用名称,当引用名称被不加引号(错误地)使用引用名称时,通过 shell 进行路径名扩展,并且还避免了某些引用名称表达式中的歧义(请参阅gitrevisions [7]):
1. 像在ref1..ref2
中经常使用双点..
,在某些情况下,这个表示意味着^ref1 ref2
(即不在ref1
和在ref2
)。
2. 腭化符号~
字符和补注号^
字符被用于引入后缀nth parent
和peel onion
操作。
3. 冒号:
被用来在srcref:dstref
中表示“ 在 srccref 的值中使用 srcref的值并将其存储在 dstref 中”在读取和推送操作中。它也可以用来选择一个特定的对象,比如 'git cat-file':“git cat-file blob v1.3.3:refs.c”。
4. at-open-brace @{
被用作访问 reflog 条目的符号。
通过--branch
选项,它可以扩展“以前的分支语法” @{-n}
。例如,@{-1}
是一种引用最后一个分支的方法。这个选项应该被porcelains用来在任何需要分支名称的地方接受这个语法,所以他们可以像你输入分支名称一样行事。
选项
--no-allow-onelevel
控制是否接受单层refnames(即不包含多个/
分离组件的refnames )。默认是--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 ; }