📍

GitHubのブランチ指定にmasterを使うと(基本的に)デフォルトブランチにリダイレクトされる

2021/09/12に公開

現在、GitHub上でリポジトリを新規作成した場合、デフォルトブランチはmainとなっています。
従来はmasterでした。

https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/

また、GitHubのファイル閲覧ページは、そのパスにブランチ名が含まれています。

https://github.com/[owner]/[repo]/(blob|tree)/[branch]/[file/to/path]

こうなると、「デフォルトブランチのファイルへリンクしたいけどブランチ名がmastermainかわからない」という場合に困ってしまいそうです。

ところが、実はどんな名前の場合もmasterにしておけば良い仕様になっています。

デフォルトがmasterの場合

こちらはkawarimidollのプロフィールリポジトリです。デフォルトブランチはmasterです。
このようにmasterを入れると、そのままリンクします。

https://github.com/kawarimidoll/kawarimidoll/blob/master/README.md

https://github.com/kawarimidoll/kawarimidoll/blob/master/README.md

これは当然ですね。

デフォルトがmainの場合

ではデフォルトがmainのリポジトリではどうでしょうか。
以下のリポジトリで試してみます。

https://github.com/kawarimidoll/typograssy/blob/master/README.md

https://github.com/kawarimidoll/typograssy/blob/master/README.md

Branch not found, redirected to default branch.

という表示が出て、mainブランチへリダイレクトされます。
Branch not foundとは言っていますが、適当なブランチ名(hogeとか)ではリダイレクトされないので、masterのみ特別な処理を挟んでいるようです。

また、ファイル自体を直接参照するパス(raw.githubusercontent.com)の場合もちゃんとリンクします。

https://raw.githubusercontent.com/kawarimidoll/typograssy/master/README.md

https://raw.githubusercontent.com/kawarimidoll/typograssy/master/README.md

デフォルトがmasterでもmainでもない場合

デフォルトブランチはユーザーが任意で設定できるので、masterでもmainでもない場合もありえます。その場合はどうなるでしょうか。

こちらのリポジトリで試してみます。

https://github.com/unkontributors/super_unko/blob/master/README.md

https://github.com/unkontributors/super_unko/blob/master/README.md

これでも同様にデフォルトブランチへ運ばれます。

なお、mainを指定すると404になります。

https://github.com/unkontributors/super_unko/blob/main/README.md

https://github.com/unkontributors/super_unko/blob/main/README.md

やはりmasterだけはデフォルトへのリンクとして確保してあるようですね。

非デフォルトのmasterがある場合

実験的に、デフォルトがmainだけど別にmasterというブランチがある場合も作ってみました。

https://github.com/kawarimidoll/deno-dev-playground/blob/master/README.md

https://github.com/kawarimidoll/deno-dev-playground/blob/master/README.md

https://github.com/kawarimidoll/deno-dev-playground/blob/main/README.md

https://github.com/kawarimidoll/deno-dev-playground/blob/main/README.md

これは、masterおよびmainが各々のブランチにリンクしています。まあ当然ですかね。

mainmasterが共存する場合は少ないと思いますが、「masterはあるけどdevelopがデフォルト」みたいなことはあると思います。

したがって、常に「masterならデフォルトブランチ」とは言えない点には注意が必要です。
本記事のタイトルに「基本的に」と入れているのは、この例外があるためです。

おわりに

本仕様に関しての説明が見つからなかったのでまとめておきました。

「ブランチ指定にmasterを指定した場合、masterが存在すればそこへリンクし、存
在しなければデフォルトブランチへリダイレクトされる」
ということです。

おそらく、多くのツールがmasterを参照する前提で作られているため、masterで404を出すわけにいかなかったのだと思われます。

なお、以下の記事で紹介したプロジェクトではこの仕様を利用しています。
というか開発の中でこの仕様に気づきました。

https://zenn.dev/kawarimidoll/articles/f02d2891a9634d

Discussion