Home Explore Blog CI



git

1st chunk of `Documentation/git-check-ref-format.adoc`
4e06c38bb1f1fb5c46c8a65653a719d14bce8746a5a8661700000001000009d5
git-check-ref-format(1)
=======================

NAME
----
git-check-ref-format - Ensures that a reference name is well formed

SYNOPSIS
--------
[verse]
'git check-ref-format' [--normalize]
       [--[no-]allow-onelevel] [--refspec-pattern]
       <refname>
'git check-ref-format' --branch <branchname-shorthand>

DESCRIPTION
-----------
Checks if a given 'refname' is acceptable, and exits with a non-zero
status if it is not.

A reference is used in Git to specify branches and tags.  A
branch head is stored in the `refs/heads` hierarchy, while
a tag is stored in the `refs/tags` hierarchy of the ref namespace
(typically in `$GIT_DIR/refs/heads` and `$GIT_DIR/refs/tags`
directories or, as entries in file `$GIT_DIR/packed-refs`
if refs are packed by `git gc`).

Git imposes the following rules on how references are named:

. They can include slash `/` for hierarchical (directory)
  grouping, but no slash-separated component can begin with a
  dot `.` or end with the sequence `.lock`.

. They must contain at least one `/`. This enforces the presence of a
  category like `heads/`, `tags/` etc. but the actual names are not
  restricted.  If the `--allow-onelevel` option is used, this rule
  is waived.

. They cannot have two consecutive dots `..` anywhere.

. They cannot have ASCII control characters (i.e. bytes whose
  values are lower than \040, or \177 `DEL`), space, tilde `~`,
  caret `^`, or colon `:` anywhere.

. They cannot have question-mark `?`, asterisk `*`, or open
  bracket `[` anywhere.  See the `--refspec-pattern` option below for
  an exception to this rule.

. They cannot begin or end with a slash `/` or contain multiple
  consecutive slashes (see the `--normalize` option below for an
  exception to this rule).

. They cannot end with a dot `.`.

. They cannot contain a sequence `@{`.

. They cannot be the single character `@`.

. They cannot contain a `\`.

These rules make it easy for shell script based tools to parse
reference names, pathname expansion by the shell when a reference name is used
unquoted (by mistake), and also avoid ambiguities in certain
reference name expressions (see linkgit:gitrevisions[7]):

. A double-dot `..` is often used as in `ref1..ref2`, and in some
  contexts this notation means `^ref1 ref2` (i.e. not in
  `ref1` and in `ref2`).

. A tilde `~` and caret `^` are used to introduce the postfix
  'nth parent' and 'peel onion' operation.

. A colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
  value and store it in dstref" in

Title: Git Check Ref Format
Summary
Git check-ref-format is a command that checks if a given reference name is well-formed according to Git's rules, which include restrictions on characters and formatting to ensure compatibility with shell scripts and avoid ambiguities.