git-check-ref-format.1   [plain text]


'\" t
.\"     Title: git-check-ref-format
.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\"      Date: 08/19/2012
.\"    Manual: Git Manual
.\"    Source: Git 1.7.12
.\"  Language: English
.\"
.TH "GIT\-CHECK\-REF\-FOR" "1" "08/19/2012" "Git 1\&.7\&.12" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-check-ref-format \- Ensures that a reference name is well formed
.SH "SYNOPSIS"
.sp
.nf
\fIgit check\-ref\-format\fR [\-\-normalize]
       [\-\-[no\-]allow\-onelevel] [\-\-refspec\-pattern]
       <refname>
\fIgit check\-ref\-format\fR \-\-branch <branchname\-shorthand>
.fi
.sp
.SH "DESCRIPTION"
.sp
Checks if a given \fIrefname\fR is acceptable, and exits with a non\-zero status if it is not\&.
.sp
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)\&.
.sp
git imposes the following rules on how references are named:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  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\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  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\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
They cannot have two consecutive dots
\&.\&.
anywhere\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
They cannot have ASCII control characters (i\&.e\&. bytes whose values are lower than \e040, or \e177
DEL), space, tilde
~, caret
^, or colon
:
anywhere\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  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\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  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)
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 7.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  7." 4.2
.\}
They cannot end with a dot
\&.\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 8.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  8." 4.2
.\}
They cannot contain a sequence
@{\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 9.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  9." 4.2
.\}
They cannot contain a
\e\&.
.RE
.sp
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 avoids ambiguities in certain reference name expressions (see \fBgitrevisions\fR(7)):
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
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)\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
A tilde
~
and caret
^
are used to introduce the postfix
\fInth parent\fR
and
\fIpeel onion\fR
operation\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
A colon
:
is used as in
srcref:dstref
to mean "use srcref\(cqs value and store it in dstref" in fetch and push operations\&. It may also be used to select a specific object such as with
\fIgit cat\-file\fR: "git cat\-file blob v1\&.3\&.3:refs\&.c"\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
at\-open\-brace
@{
is used as a notation to access a reflog entry\&.
.RE
.sp
With the \-\-branch option, it expands the `previous branch syntax\(aq\(aq `@{\-n}\&. For example, @{\-1} is a way to refer the last branch you were on\&. 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\&.
.SH "OPTIONS"
.PP
\-\-allow\-onelevel, \-\-no\-allow\-onelevel
.RS 4
Controls whether one\-level refnames are accepted (i\&.e\&., refnames that do not contain multiple
/\-separated components)\&. The default is
\-\-no\-allow\-onelevel\&.
.RE
.PP
\-\-refspec\-pattern
.RS 4
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 place of a one full pathname component (e\&.g\&.,
foo/*/bar
but not
foo/bar*)\&.
.RE
.PP
\-\-normalize
.RS 4
Normalize
\fIrefname\fR
by removing any leading slash (/) characters and collapsing runs of adjacent slashes between name components into a single slash\&. Iff the normalized refname is valid then print it to standard output and exit with a status of 0\&. (\-\-print
is a deprecated way to spell
\-\-normalize\&.)
.RE
.SH "EXAMPLES"
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Print the name of the previous branch:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git check\-ref\-format \-\-branch @{\-1}
.fi
.if n \{\
.RE
.\}
.sp
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Determine the reference name to use for a new branch:
.sp
.if n \{\
.RS 4
.\}
.nf
$ ref=$(git check\-ref\-format \-\-normalize "refs/heads/$newbranch") ||
die "we do not like \(aq$newbranch\(aq as a branch name\&."
.fi
.if n \{\
.RE
.\}
.sp
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite