日本語 ▾ トピック ▾ 最新バージョン ▾ git-check-ref-format は 2.43.0 で最終更新されました

名前

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 階層に格納され、タグは ref 名前空間の refs/tags 階層に格納されます(通常は $GIT_DIR/refs/heads および $GIT_DIR/refs/tags ディレクトリ、または参照が 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. チルダ ~ とキャレット ^ は、接尾辞の N番目の親剥がす操作 を導入するために使用されます。

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

  4. アットマークと開き中括弧 @{ は、reflog エントリにアクセスするための表記として使用されます。

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

オプション

--[no-]allow-onelevel

1レベルの参照名(つまり、複数の / で区切られたコンポーネントを含まない参照名)が受け入れられるかどうかを制御します。デフォルトは --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 ; }

GIT

git[1]スイートの一部

scroll-to-top