SYNOPSIS

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

DESCRIPTION

指定の refname が受け入れ可能かどうかを確認し、受け入れられない場合はゼロ以外のステータスで終了します。

参照はGitでブランチとタグを指定するために使用されます。ブランチヘッドは refs/heads 階層に格納され、タグはref名前空間の refs/tags 階層に格納されます(通常は $GIT_DIR/refs/heads ディレクトリと $GIT_DIR/refs/tags ディレクトリに、または refが git gc によってパックされている場合はファイル $GIT_DIR/packed-refs のエントリとしてあります)。

Gitは、参照の命名方法に以下のルールを課しています:

  1. 階層(ディレクトリ)グループ化のためにスラッシュ(/)を含めることができますが、スラッシュで区切られたコンポーネントは、ドット(.)で開始したり、シーケンス .lock で終了したりすることはできません。

  2. 少なくとも1つのスラッシュ(/)が含まれている必要があります。これにより、 heads/tags/ などのカテゴリの存在が強制されますが、実際の名前は制限されません。 --allow-onelevel オプションが使用されている場合、このルールは放棄されます。

  3. どこにも2つの連続したドット(..)を含めることはできません。

  4. ASCII制御文字(つまり、値が \040 未満のバイト または \177(DEL))、スペース、チルダ(~)、キャレット(^)、コロン(:)はどこにでも含めることはできません。

  5. 疑問符()、アスタリスク(*)、角かっこ([)がどこにあってもいけません。この規則の例外については、以下の --refspec-pattern オプションを参照してください。

  6. スラッシュ(/)で開始または終了したり、複数の連続したスラッシュを含めることはできません(この規則の例外については、以下の --normalize オプションを参照してください)。

  7. ドット(.)で終わらせることはできません。

  8. シーケンス @{ を含めることはできません。

  9. 単一の文字 @ にすることはできません。

  10. \ を含めることはできません。

これらのルールにより、シェルスクリプトをベースにしたツールで参照名を簡単にパースできるようになり、参照名が(誤って)引用符なしで使われたときにシェルでパス名を展開したり、特定の参照名表現におけるあいまいさを回避することができます(gitrevisions(7) を参照)。

  1. 二重ドット(..)は、 ref1..ref2 などとよく使用されます。一部のコンテキストでは、この表記は ^ref1 ref2 を意味します(つまり、ref1 に無く かつ ref2 にある)。

  2. チルダ(~)とキャレット(^)は、接尾辞 nth parent (n番目の親)と peel onion (玉ねぎ剥き)操作を導入するために使用されます。

  3. コロン()は、 srcref:dstref のように、フェッチおよびプッシュ操作で「srcrefの値を使用してdstrefに格納する」ことを意味するために使用されます。 git cat-file blob v1.3.3:refs.c のようにして git cat-file などで特定のオブジェクトを選択するためにも使用できます。

  4. at-open-brace(@{)は、reflogエントリにアクセスするための表記法として使用されます。

--branch オプションを使用すると、コマンドは名前を取得し、それが有効なブランチ名として使用できるかどうかを確認します(たとえば、新しいブランチを作成するとき)。ただし、切り離された(detached)HEAD状態を参照する可能性のある、遡及チェックアウト構文(previous checkout syntax)を使用する場合は注意が必要です。 git check-ref-format --branch $name が実装するルールは、 git check-ref-format refs/heads/$name が言うことよりも厳しい場合があります(たとえば、参照コンポーネントの先頭にダッシュが表示される場合がありますが、ブランチ名の先頭では明示的に禁止されています)。リポジトリで --branch オプションを指定して実行すると、入力は最初に「遡及チェックアウト構文」 @{-n} 用に展開されます。たとえば、 @{-1} は、 git switch または git checkout 操作を使用して最後にチェックアウトされたものを参照する方法です。磁器コマンドでは、ブランチ名が必要な場所でこの構文を受け入れるために、このオプションを使用する必要があります。これにより、あなたがブランチ名を入力したかのように機能できます。注意: 「遡及チェックアウト操作」では、例外として、チェックアウトされたN番目の最後のものがブランチではなかった場合にコミットオブジェクト名が生成される可能性があることに注意してください。

OPTIONS

--[no-]allow-onelevel

1レベルのrefnameを受け入れるかどうかを制御します(つまり、複数の / で区切られたコンポーネントを含まないrefname)。 デフォルトは --no-allow-onelevel です。

--refspec-pattern

<refname>を(リモートリポジトリで使用される)refspecの参照名パターンとして解釈します。このオプションを有効にすると、<refname>はrefspecに単一の * を含めることができます(例: foo/bar*/baz または foo/bar*baz/ はOKですが、 foo/bar*/baz* はダメです)。

--normalize

先行スラッシュ(/)文字を削除し、名前コンポーネント間の隣接するスラッシュを1つのスラッシュに折りたたむことにより、 refname を正規化します。正規化されたrefnameが有効な場合は、それを標準出力に出力し、ステータス0で終了します。それ以外の場合は、ゼロ以外のステータスで終了します。 ( --print--normalize を綴る非推奨の方法です。)

EXAMPLES

  • チェックアウトしたのモノの一つ前のものの名前を印刷します:

    $ 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 ; }

GIT

Part of the git(1) suite