Git
English ▾ トピック ▾ 最新バージョン ▾ git-check-ref-format は 2.43.0 で最後に更新されました

NAME

git-check-ref-format - リファレンス名が適切な形式であることを確認します

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`ディレクトリ内、または`git gc`によってrefがパックされている場合はファイル`$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'のように特定のオブジェクトを選択するためにも使用できます。「git cat-file blob v1.3.3:refs.c」。

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

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

OPTIONS

--[no-]allow-onelevel

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

--refspec-pattern

refspec(リモートリポジトリで使用される)のリファレンス名パターンとして<refname>を解釈します。このオプションが有効になっている場合、<refname>はrefspecに1つの`*`を含めることができます(例:`foo/bar*/baz`または`foo/bar*baz/`、ただし`foo/bar*/baz*`は不可)。

--normalize

先頭のスラッシュ(`/`)文字を削除し、名前コンポーネント間の隣接するスラッシュの連続を単一のスラッシュに折りたたむことによって、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

git[1]スイートの一部

scroll-to-top