日本語 ▾ トピック ▾ 最新バージョン ▾ 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 階層に保存され、タグは参照名前空間の 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. チルダ ~ とキャレット ^ は、後置の nth parent および peel onion 操作を導入するために使用されます。

  3. コロン : は、fetch および push 操作において srcref:dstref のように「srcref の値を使用し、それを dstref に格納する」という意味で使用されます。また、'git cat-file' のように特定のオブジェクトを選択するためにも使用できます: "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 が示すものよりも厳しくなる場合があります (例: 参照コンポーネントの先頭にダッシュが現れることは許可されますが、ブランチ名の先頭に現れることは明示的に禁止されています)。リポジトリで --branch オプション付きで実行すると、入力は最初に「以前のチェックアウト構文」@{-n} のために展開されます。たとえば、@{-1} は、「git switch」または「git checkout」操作を使用してチェックアウトされた最後のものを参照する方法です。このオプションは、ブランチ名が期待されるどこでもこの構文を受け入れるためにポーセリンで使用されるべきであり、これにより、まるでブランチ名を入力したかのように動作できます。例外として注意すべきは、N番目に最後にチェックアウトされたものがブランチでなかった場合、「以前のチェックアウト操作」がコミットオブジェクト名を結果として返す可能性があることです。

オプション

--[no-]allow-onelevel

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

--refspec-pattern

をリファレンス名のパターンとして、refspec (リモートリポジトリで使用されるような) のために解釈します。このオプションが有効な場合、 は refspec 内で単一の * を含むことができます (例: foo/bar*/bazfoo/bar*baz/ は可能ですが、foo/bar*/baz* は不可)。

--normalize

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