Gitコア開発者はGitをどう設定して使っているのか?
(blog.gitbutler.com)- 『Pro Git』の著者であるScott Chaconが、グローバルで有効にしているいくつかのGit設定と、その理由を説明
- 設定の多くは、実際にGitコアのコードベースで作業する開発者たちから学んだもの
- 以下はGitをより良くする
~/.gitconfig設定[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # 使わない理由がある? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # 個人の好みによる設定(必要ならコメントを外して使用) [core] # fsmonitor = true # untrackedCache = true [merge] # (Gitのバージョンが2.3未満の場合は「diff3」を使用) # conflictstyle = zdiff3 [pull] # rebase = true
Gitコア開発者たちはGitをどう設定しているのか?
- Gitメーリングリストで、Felipe Contrerasがコアチームに対し、すべての設定とエイリアスを外してデフォルトのGitを使ってみるよう提案したことがある
- この実験の結果として、9個の設定と3個のエイリアスが新しいデフォルト値として提案された
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - これらの設定はまだデフォルト値として採用されていない
- しかし、多くのGit開発者が、このうちいくつかを有効にしないとGitを使うのが難しいと感じているのは興味深い
- さらに興味深いのは、読者の大半がこれの意味をまったく知らないということ
- 3つのカテゴリに分けて説明する
- Gitを明らかにより良くするもの(Clearly Makes Git Better)
- 使わない理由がある?(Why the Hell Not?)
- 好みの問題(A Matter of Taste)
# Gitを明らかにより良くするもの
ブランチ一覧の並び替え
- デフォルトではGitはブランチをアルファベット順に並べるが、最近のコミット日時順のほうが便利なことがある
- 次の設定で、ブランチを最新コミット順に並べ、カラム形式で表示できる
git config --global column.ui auto git config --global branch.sort -committerdate
タグ一覧の並び替え
- タグをアルファベット順ではなくバージョン順に並べるには、次の設定を使う
git config --global tag.sort version:refname
デフォルトブランチ名の設定
- 新しいリポジトリを初期化するときのデフォルトブランチ名を設定するには、次のようにする
git config --global init.defaultBranch main
改善されたdiff設定
- デフォルトのdiffアルゴリズムを
histogramに変更し、より正確な比較を行う - コードの移動を検出して色分け表示するには、次の設定を追加する
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
改善されたpush設定
- 次の設定でpushの挙動を改善できる
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
改善されたfetch設定
- fetch時に不要なブランチやタグを自動削除するには、次の設定を使う
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# 使わない理由がある?
自動修正プロンプト
- コマンド入力時にタイプミスを検出して候補を提案するよう設定するには、次を使う
git config --global help.autocorrect prompt
コミット時にdiffを表示
- コミットメッセージ作成時に変更内容も一緒に表示するには、次の設定を追加する
git config --global commit.verbose true
コンフリクト解決の再利用
- 以前のコンフリクト解決を自動的に再利用するには、次の設定を使う
git config --global rerere.enabled true git config --global rerere.autoupdate true
グローバル .gitignore ファイルの設定
- グローバルに無視するファイルを指定するには、次のように設定する
git config --global core.excludesfile ~/.gitignore
rebase設定の改善
- rebase時に自動でsquashやstashを行うには、次の設定を使う
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# 好みの問題
改善されたマージコンフリクト表示
- マージコンフリクト時にベースバージョンもあわせて表示したい場合は、次の設定を検討するとよい
git config --global merge.conflictstyle zdiff3
pull時にrebaseを使う
git pull時に自動でrebaseを行いたい場合は、次のように設定するgit config --global pull.rebase true
ファイル変更検出の高速化
git statusなどの性能を向上させるには、次の設定を使えるgit config --global core.fsmonitor true git config --global core.untrackedCache true
# まとめ
- これらの設定によりGitをより快適に使えるようになり、一部はコア開発者たちも積極的に使っている設定でもある
- Git設定を最適化することで、作業フローを改善し、より効率的に使えるようになる
7件のコメント
「さらに興味深いのは、皆さんの大半がこれが何を意味するのかまったく分かっていないということ」って、グサッと刺してきますね。😨😨😨
--globalではなく-globalですか?--globalが正しいです。コピペ中に手違いがありましたね。修正しました。人気のあるGit設定オプション
競合解決の再利用がいいですね
diff を見るときは
git-deltaを使って TUI 形式で見ています。まあ、あれこれ面倒なら
tigを……(笑)もっといい何かがあるでしょうか……?
Hacker Newsの意見
git out。これはプッシュされていないコミットをすべて一覧表示する。いつも使っているgit config --global core.pager bat