みんな大好きGit。先日、久々に自分の.gitconfigを見たら若干秘伝のタレ化していて、「なんでこの設定にしたんだっけ??」状態になったので、設定を見直して棚卸ししてみた。Gitの設定に自信がない人は参考になるかも?
見直した結果
こうなった
[core]
quotepath = false
whitespace = cr-at-eol
editor = vim
[user]
name = koirand
email = koirand.jp@gmail.com
[fetch]
prune = true
[pull]
ff = only
[merge]
ff = false
[push]
default = current
ちなみに、この.gitconfigファイルはINI形式といわる形式なので、;でコメントが書けたりする。行頭のインデントはなくても動作するけど、git configコマンドで設定を行うとタブ文字でインデントされるので、それに倣うのがいいかと思われる。
削除した設定
color.ui = true
git diff
とかした時に色付けする設定。デフォルトtrueだったので削除。
core.ignorecase = false
ファイル名の大文字小文字の差分を無視する設定。デフォルトfalseだったので削除。
というか、git init
をすると、リポジトリのローカル設定(.git/config)がignorecase = true
になる(MacOS)。グローバルの設定よりもローカルの設定が優先されるので、実はグローバルにtrueを設定しようがfalseを設定しようが、あまり意味がない。ファイル名の大文字小文字を無視したい場合は、リポジトリ個別に設定を変更しないといけない。なかなかの罠。
$ git config core.ignorecase false
filemode = false
ファイルのパーミッションの変更を無視する設定。
これもignorecaseと同じく、git init
をすると、リポジトリのローカル設定(.git/config)がfilemode = true
になる(MacOS)。なのでグローバルに設定してもあまり意味がないので消した。
Unix系の端末で作成したリポジトリをWindows端末で開いたりなどすると、ファイルのパーミッションが自動的に変更されて、それが差分として検知されてしまうことがあるらしいので、その場合はWindows端末上で、
$ git config core.filemode true
とやるとパーミッションの変更がGit上で検出されなくなる。 ただこれをやると、いざシェルスクリプトなどに実行権限を付与したい時に困る。そんなときは、
$ git update-index --add --chmod=+x {ファイル名}
とやるといける。
core.autocrlf = false
改行コードを自動的に変換しないようにする設定。デフォルトfalseだったので削除。
user.useConfigOnly
user name、emailが指定されいないとコミットできないようにする設定。user name、emailともに設定ファイルで明示的に設定してあるので特に不要。
credential.helper = cache –timeout=86400
HTTPでの認証情報を記憶しておく時間の設定。SSHしか使っていないので削除。
残った設定
core.quotepath = false
日本語ファイル名の文字化けを防ぐ。日本人なので残す。
core.whitespace = cr-at-eol
行末のCRを許容する。Windows端末で触る時のために残す。最近Windowsで開発することが殆どなくなってきたけど、一応。
core.editor = vim
コミットやマージした時に起動するエディタ。Ubuntuとかでたまにnanoが起動してうざいので設定しておく。OSのデフォルトのエディタを変更したほうがいいかもだけど、コンテナとかで毎回やるの面倒くさいし。
user.name, user.email
まあこれは要るよね。
fetch.prune = true
リモートで削除されたブランチをローカルで自動的に削除する設定。プルリクがマージされた時、ローカルのブランチをいちいち削除しなくて良くて済む。普通に便利なので残す。
pull.ff = only
git pull --ff-only
をデフォルトにする設定。pull時に変なマージコミットを作りたくないので設定している。普通にやってたらマージコミットは発生しないはずだけど念の為。
merge.ff = false
git merge --no-ff
をデフォルトにする設定。さっきのpull.ffとは逆に、マージする時はマージコミットを必ず作りたいマンなので設定している。そうすることで、コミットログのどこからどこまでがトピックのまとまりなのか分かりやすくなる。
push.default = current
git push origin HEAD
をデフォルトにする設定。カレントブランチと違う名前のリモートブランチにプッシュすることがこれまで無かったので問題なし。
おわり。