⚙️

gitのデフォルトブランチ名が変わらない

2021/08/08に公開

はじめに

gitのデフォルトブランチ名をmainに変更しようとした時に気がついたことを整理。

要約

  • gitの設定ファイルの検索範囲は3種類ある(system, global, local)[1]
  • 同じkeyに異なるvalueが登録されていた場合の優先順序は local > global > system

デフォルトブランチ名が変わらない

前提

  • Windows10, 64bit
  • git 2.32.0

デフォルトブランチ名を変えよう

Zennに記事を投稿しようと思い立ち、諸々のアカウント作成やソフトウェアのインストールを実施。gitは以前使っていたがversionが古かったので最新化。
そういえばブランチ名がmasterからmainに変わったんだっけ?」と思い出し、デフォルトブランチ名の変え方を調べて以下のコマンドを実行。

git config --global init.defaultBranch main


設定が反映されたかを確認するために以下のコマンドを実行。目grep[2]すると、デフォルトブランチ名がmasterのままになっていることを発見。あれ、なんでだ…?

git config -l
~~~
init.defaultbranch=master


範囲をグローバルに絞って確認すると、きちんと反映されている。う~ん…

git config --global -l
~~~
init.defaultbranch=main


とりあえずリポジトリ作ったら、mainでブランチがつくられた。

git init
git branch
~~~
* main

困ったら公式ドキュメント

困ったらまずは公式ドキュメントだ!ということでいそいそ調査。
https://git-scm.com/docs/git-config

When reading, the values are read from the system, global and repository local configuration files by default, and options --system, --global, --local, --worktree and --file <filename> can be used to tell the command to read from only that location (see FILES).

お、systemレベルのコンフィグあるの?と思って確認したら大当たり。

git config --system -l
~~~
init.defaultbranch=master


同じ設定があった場合の優先順位は「local > global > system」なので動作上は問題ないんだけど、統一されていないと気持ち悪いので、systemの設定を更新して一件落着。[3]

git config --system init.defaultbranch main

おまけ

  • 目grepした時、実はinit.defaultbranch=mainも出力されていたけど、最初にmasterが目に入ってしまい、全然気がついていなかった。

  • 同じkeyに異なるvalueが登録されている場合は--get-allオプションで全ての値を取得できる。

    git config --get-all init.defaultbranch
    ~~~
    master
    main
    
  • keyの大文字・小文字が識別されていないのはcore.ignorecase=tureのせいかな?と思って試してみたけど、そもそもkeyは大文字・小文字が識別されないっぽい

    The variable names are case-insensitive, allow only alphanumeric characters and -, and must start with an alphabetic character.

脚注
  1. 本当はworktreefileもあるんだけど、単純化するために省略 ↩︎

  2. バイナリファイルじゃないんだけどね、目grep言いたかっただけ ↩︎

  3. systemのコンフィグを変更する場合は管理者権限でコマンドを実行する必要あり ↩︎

Discussion