Gitで使えない文字列を調べてみた
概要
ドキュメントを確認してgitで使えない文字列を調べまとめた。
調査方法
公式のドキュメントを確認した。
以下コマンドでドキュメントを参照できる。
git help check-ref-format
以下にドキュメントがある。
file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-check-ref-format.html
参照は、Git でブランチやタグを指定するために使われます。ブランチの先頭は refs/heads 階層に、タグは ref 名前空間の refs/tags 階層に格納されます (通常は $GIT_DIR/refs/heads や $GIT_DIR/refs/tags ディレクトリに格納されます。)
Gitをふんわり使っていたので、実際にGit管理されているリポジトリを確認してみたら理解ができた。
Gitのブランチやタグの実態は階層構造で管理されていて、以下をたどるとrefs
フォルダがある。
タグ:/.git/refs/tags
リモートブランチ:/.git/refs/remotes/origin
HEADS:/.git/refs/heads/
結論
ドット.、クエスチョンマーク?、スラッシュ/、アットマーク@、バックスラッシュ\の使用には注意が必要。
Git は、参照の名前の付け方について次のようなルールを課しています。
ドットの使用には注意
- 始端終端はドットにできない
階層的な(ディレクトリの)グループ化のためにスラッシュ /
を含めることができますが、スラッシュで区切られたコンポーネントは、ドット .
で始まったり、.lock で終わったりすることはできない。
これにより、head/
やtags/
などのカテゴリの存在が強制されますが、実際の名前は制限されません。もし --allow-onelevel
オプションが使われている場合、この規則は放棄される。
- 2つの連続したドットを持つことはできない
それらは、ASCII制御文字(すなわち、値が\040, または\177 DELより小さいバイト)、スペース、チルダ〜
、キャレット^
、またはコロン :
をどこにも持つことはできない。
- ドットで終わることはできない
クエスチョンマークの使用には注意
- クエスチョンマーク ? この規則の例外については、以下の
--refspec-pattern
オプションを参照すべし。
スラッシュの使い方には注意
- スラッシュ
/
で始まったり終わったり、複数の連続したスラッシュを含むことはできない
アットマークの使用
- シーケンス
@{
を含むことはできない。 -
@
を一文字にはできない。
バックスラッシュの使用
- バックスラッシュ
\
を含めることはできない。
ブランチ名のチェック
以下のコマンドで妥当なブランチ名なのかチェックができる。
git check-ref-format --branch <ブランチ名>
例:
$ git check-ref-format --branch //next
fatal: '/next' is not a valid branch name
終わりに
今回、Gitが内部的にどう動いているか意識するきっかけになった。
内部的なことを知らなくてもググればわかりやすい資料やら記事が出てくるけど、ドキュメントを読むと読み解くために必要な用語を調べなきゃいけなかったりするので世界が広がってよいなあと思った。
知れば知るほどGit難しい。
Headやブランチについては今後調べて理解を深めていきたい所存、、!
この方の記事とか参考になりそう。
Discussion