git-check-ref-format

Ensures that a reference name is well formed

SYNOPSIS



gitcheck -ref -format [ --normalize] [ --[no -]allow -onelevel] [ --refspec -pattern] <refname> gitcheck -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 gitgc ).
Git imposes the following rules on how references are named:
'-04' 1. '+01' .sp -1

" 1." 4.2 They can include slash / for hierarchical (directory) grouping, but no slash -separated component can begin with a dot . or end with the sequence .lock .
'-04' 2. '+01' .sp -1

" 2." 4.2 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 .
'-04' 3. '+01' .sp -1

" 3." 4.2 They cannot have two consecutive dots . . anywhere .
'-04' 4. '+01' .sp -1

" 4." 4.2 They cannot have ASCII control characters (i .e . bytes whose values are lower than \ 040, or \ 177 DEL ),space, tilde ~ ,caret ^ ,or colon : anywhere .
'-04' 5. '+01' .sp -1

" 5." 4.2 They cannot have question -mark ? ,asterisk * ,or open bracket [ anywhere . See the --refspec -pattern option below for an exception to this rule .
'-04' 6. '+01' .sp -1

" 6." 4.2 They cannot begin or end with a slash / or contain multiple consecutive slashes (see the --normalize option below for an exception to this rule)
'-04' 7. '+01' .sp -1

" 7." 4.2 They cannot end with a dot . .
'-04' 8. '+01' .sp -1

" 8." 4.2 They cannot contain a sequence @{ .
'-04' 9. '+01' .sp -1

" 9." 4.2 They cannot be the single character @ .
'-04'10. '+01' .sp -1

"10." 4.2 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 gitrevisions (7)):
'-04' 1. '+01' .sp -1

" 1." 4.2 A double -dot . . is often used as in ref1. .ref2 ,and in some contexts this notation means ^ref1ref2 (i .e . not in ref1 and in ref2 ).
'-04' 2. '+01' .sp -1

" 2." 4.2 A tilde ~ and caret ^ are used to introduce the postfix nthparent and peelonion operation .
'-04' 3. '+01' .sp -1

" 3." 4.2 A colon : is used as in srcref:dstref to mean "use srcref value and store it in dstref" in fetch and push operations . It may also be used to select a specific object such as with gitcat -file :"git cat -file blob v1 .3 .3:refs .c" .
'-04' 4. '+01' .sp -1

" 4." 4.2 at -open -brace @{ is used as a notation to access a reflog entry .
With the --branch option, the command takes a name and checks if it can be used as a valid branch name (e .g . when creating a new branch) . But be cautious when using the previous checkout syntax that may refer to a detached HEAD state . The rule gitcheck -ref -format --branch $name implements may be stricter than what gitcheck -ref -format refs/heads/$name says (e .g . a dash may appear at the beginning of a ref component, but it is explicitly forbidden at the beginning of a branch name) . When run with --branch option in a repository, the input is first expanded for the checkout syntax @{-n} . For example, @{-1} is a way to refer the last thing that was checked out using "git switch" or "git checkout" operation . This option should be used by porcelains to accept this syntax anywhere a branch name is expected, so they can act as if you typed the branch name . As an exception note that, the checkout operation might result in a commit object name when the N -th last thing checked out was not a branch .

OPTIONS

--[no -]allow -onelevel Controls whether one -level refnames are accepted (i .e ., refnames that do not contain multiple / -separated components) . The default is --no -allow -onelevel .

--refspec -pattern Interpret <refname> as a reference name pattern for a refspec (as used with remote repositories) . If this option is enabled, <refname> is allowed to contain a single * in the refspec (e .g ., foo/bar*/baz or foo/bar*baz/ but not foo/bar*/baz* ).

--normalize Normalize refname by removing any leading slash ( / )characters and collapsing runs of adjacent slashes between name components into a single slash . If the normalized refname is valid then print it to standard output and exit with a status of 0, otherwise exit with a non -zero status . ( --print is a deprecated way to spell --normalize .)

EXAMPLES


'-04' '+03' .sp -1

2.3 Print the name of the previous thing checked out:
.RS 4
$ git check -ref -format --branch @{ -1} .RE

'-04' '+03' .sp -1

2.3 Determine the reference name to use for a new branch:
.RS 4
$ ref=$(git check -ref -format --normalize "refs/heads/$newbranch")|| { echo "we do not like (Aq$newbranch (Aq as a branch name ." >&2 ; exit 1 ; } .RE

GIT


Part of the git (1)suite

Copied to clipboard
free 100$ digital ocean credit