GitHubでリポジトリ毎にデフォルトブランチ名が変更可能になっていたので試してみた

2021.01.21

しばたです。

GitHubでは去年の10月から新規リポジトリのデフォルトブランチ名がmainに変更され *1、既存リポジトリについては変更による影響を抑えシームレスに設定できるWEB UIを後日提供するとされていました。

で、この既存リポジトリのデフォルトブランチ名変更機能が最近提供された様なので試してみました。
(具体的にいつから提供されたのか不明なのですが、アナウンスの更新履歴を見るに先週ごろからの様です)

試してみた

具体的な手順は以下の公式アナウンスに記載されています。

詳細については公式アナウンスをご覧いただきたいですが、そんなに難しい手順は無く、ざっくり、

  • GitHubリポジトリの設定ページからデフォルトブランチ名を変更
  • 各クライアントでのローカルリポジトリの設定変更

の手順となっています。

対象リポジトリ

本記事では私個人のstknohg/aws-cli-eq-pwshで試してみました。

以前書いたこちらの記事で作ったサイトのコンテンツ管理用のリポジトリです。
ソースコード管理とGitHub Pagesによるサイトホスティングをしている簡素なリポジトリです。

1. GitHubリポジトリの設定変更

はじめにリモート側であるGitHubリポジトリの設定変更を行います。
リポジトリのSettingsタブから設定画面に遷移します。

設定ページの「Branches」を選ぶと現在のデフォルトブランチが表示されるので画面右側にある「鉛筆マーク」欄をクリックします。

するとブランチ名の変更ダイアログがポップアップします。

テキストボックスの下にはブランチ名の変更と同時に行われる作業や、変更後の残作業について記載されています。
このリポジトリではGitHub Pagesを使ってるので「GitHub Pagesで使うブランチも同時に変わる」旨が記載されています。×印になっているところでは「ローカル側の設定変更は自分でやれ」と教えてくれており、かなり親切な作りになっています。

ちなみに「Learn more」となっている部分を展開するとこんな感じです。

ローカル側の設定変更手順を記載してくれていますが、こちらはまた後で手順が紹介されます。

このポップアップで新しいブランチ名(main)を入力し、「Rename branch」のボタンを押せば名称変更は完了です。

改めてリポジトリのメインページへ移動するとクライアント側の設定変更手順をポップアップしてくれます。

ちゃんとデフォルトブランチ名が変わっています。

2. 各クライアントの設定変更

前項でリモート側の設定は変わりましたので、合わせて各クライアントのローカルリポジトリの設定を変えてやります。

手順としてはリモート側の設定変更時に例示された様に

  • git branch -mでローカルリポジトリの名称を変更する
  • git branch -uで追跡ブランチの設定を更新

するのが基本となります。

git branch -m master <BRANCH>
git fetch origin
git branch -u origin/<BRANCH> <BRANCH>

私はGitに明るくないので他に必要な手順がぱっと浮かびませんが、環境により追加で必要な事項があれば適宜対応すると良いでしょう。

今回はmastarmainと変更したので、クライアント環境で

git branch -m master main
git fetch origin
git branch -u origin/main main

を実行します。

結果、私のクライアント環境ではこんな感じでブランチ設定が切り替わりました。
(実際の実行結果については環境依存となります)

# 変更前ブランチ情報 (表示内容は環境に依る)
> git branch -a
* master
  remotes/origin/main

# 設定変更
> git branch -m master main
> git fetch origin
> git branch -u origin/main main

# 変更後ブランチ情報
> git branch -a
* main
  remotes/origin/main

これでクライアント側の設定変更も完了です。

余談 : GitHub Actionとの連動、その他について

ちなみにGitHub Actionsの設定については自動で切り替わることは無かったので適宜修正が必要です。
(当たり前といえば当たり前ですが...)

(テスト用別リポジトリでデフォルトブランチ名を変えてみた結果)

WEB UIからのブランチ名変更で連動するのは公式アナウンスから引用すると以下の模様です。

Renaming a branch will:
* Re-target any open pull requests
* Update any draft releases based on the branch
* Move any branch protection rules that explicitly reference the old name
* Update the branch used to build GitHub Pages, if applicable
* Show a notice to repository contributors, maintainers, and admins on the repository homepage with instructions to update local copies of the repository
* Show a notice to contributors who git push to the old branch
* Redirect web requests for the old branch name to the new branch name
* Return a "Moved Permanently" response in API requests for the old branch name

追記 : GitHub Pagesの再デプロイについて

本記事を公開した直後にGitHub Pagesのページを参照したところ404になってました...
GitHub上の設定はちゃんと「mainブランチを使う」となっていたもののデプロイ済みのリソースは消失し、再デプロイが必要な様です。
(これが私の環境だけの問題なのかGitHub Pages全般で起きるのかは不明です)

仕方ないので適当な空コミットを作りPushすることで再デプロイしてやり対処しました。

# 適当な空コミットを作りPush、GitHub Pagesを再デプロイさせる
git commit --allow-empty -m "test"
git push

これで無事ページが表示される様になりました。

最後に

以上となります。

私のリポジトリはかなりシンプルなので実施する作業も少なく済んでおり環境によってはもっと手順が必要になる事もあるでしょう。
本記事の内容で概略を把握してもらえれば幸いです。

脚注

  1. ちなみに新規リポジトリのデフォルトブランチ名はユーザー設定で変更可能です