人気のあるGit設定オプション
(jvns.ca)-
pull.ff onlyまたはpull.rebase true- どちらの設定も、
git pullを実行したときにブランチが上位ブランチと異なる場合、誤ってマージコミットを作成するのを防ぐためのもの。 pull.rebase trueは毎回git pull --rebaseを実行するのと同じ。pull.ff onlyは毎回git pull --ff-onlyを実行するのと同じ。- 2つの設定を同時に使う意味はなく、
--ff-onlyが--rebaseを上書きするため。
- どちらの設定も、
-
merge.conflictstyle zdiff3- マージ競合をより読みやすくする設定。
diff3は既定の設定でのマージ競合表示方法を変更し、元のコードを中央に表示する。zdiff3はdiff3の改良版で、より優れていると考えられている。
-
rebase.autosquash true- 古いコミットを修正しやすくする機能。
git commit --fixup OLD_COMMIT_IDを使ってコミットすると、git rebase --autosquash mainを実行した際にfixup!コミットを自動的に対象と結合する。
-
rebase.autostash truegit rebaseの前後で自動的にgit stashとgit stash popを実行する。
-
push.default simple,push.default current- 現在のブランチを同じ名前のリモートブランチへ自動的にプッシュするよう設定する。
push.default simpleは既定の設定で、ブランチがすでにリモートブランチを追跡している場合にのみ動作する。push.default currentは常にローカルブランチを同じ名前のリモートブランチへプッシュする。
-
init.defaultBranch main- 新しいリポジトリを作成するときに
masterの代わりにmainブランチを作成する。
- 新しいリポジトリを作成するときに
-
commit.verbose true- コミットメッセージを書くテキストエディタにコミット差分全体を追加し、何をしたか思い出しやすくする。
-
rerere.enabled truegit rebase中にマージ競合をどう解決したかを記憶し、自動的に競合を解決する。
-
help.autocorrect 10- git の自動修正機能はタイプミスを確認するが、修正後のコマンドを自動実行はしない。
- 自動実行するようにするには、
help.autocorrectを1、10、immediate、またはpromptに設定する。
-
core.pager deltagit diff、git log、git showなどの出力表示に使われる「pager」。deltaはシンタックスハイライト機能を備えた高度な diff 表示ツールとして設定する。
-
diff.algorithm histogram- 既定の diff アルゴリズムは、関数の順序が変更されたときによく問題を引き起こす。
diff.algorithm histogramはそれをより明確に表示する。
-
core.excludesfile: グローバル.gitignore- すべてのリポジトリに適用されるグローバル gitignore ファイルを設定する。
-
includeIf: 個人用と業務用で別々の git 設定- 個人用と業務用のリポジトリで異なるメールアドレスを設定するために使う。
-
url."git@github.com:".insteadOf 'https://github.com/'https://github.comをgit@github.com:に自動的に置き換える。
-
fsckobjects: データ破損の防止- データ破損を積極的に検出し、チームを何度か救った設定。
-
submodule 関連の設定
status.submoduleSummary truediff.submodule logsubmodule.recurse true
-
その他の設定
blame.ignoreRevsFile .git-blame-ignore-revsbranch.sort -committerdatecolor.ui falsecommit.cleanup scissorscore.autocrlf falsecore.editor emacscredential.helper osxkeychaindiff.tool difftasticdiff.colorMoved defaultdiff.colorMovedWS allow-indentation-changediff.context 10fetch.prune trueおよびfetch.prunetagsgpg.format sshlog.date isomerge.keepbackup falsemerge.tool meldpush.followtags truerebase.missingCommitsCheck errorrebase.updateRefs true
-
設定方法
- 一般的には
git config --global NAME VALUEを使って設定する。 - オプションを削除するには
~/.gitconfigを手動で編集する。
- 一般的には
-
この記事を書いた後に変更した設定
diff.algorithm histogrambranch.sort -committerdatemerge.conflictstyle zdiff3
-
まとめ
- 多くの人にお気に入りの設定を尋ね、最も多く挙がったものを列挙するのは有用。
GN⁺の意見
- この記事で最も重要なのは、開発者がよく使う git 設定オプションを知れる点。
- git を使う初級ソフトウェアエンジニアにとって、これらの設定は作業効率を高め、日常的な問題を解決する助けになる。
- 特に
merge.conflictstyle zdiff3やrebase.autosquash trueのような設定は、マージ競合の解決やコミット履歴の管理を容易にし、協業の過程で起こりうる問題を減らせる。
4件のコメント
オプションを削除するには、
git config --global --unset NAMEコマンドを使う方法もあります自分の設定を確認するには
git config --listを追加してください。メインの開発環境では設定していたのに、別の環境では設定されていなくて、どうして動かないんだろう……となった経験があります(笑) 開発者なら Git を毎日使うだけに、Git の設定に関することにももっと関心を持てるといいですね
Hacker Newsの意見
core.autocrlfとsafecrlfの設定gitattributesでオーバーライド可能.gitconfigのalias設定rebase.autosquashとfixupエイリアスpull.rebaseも重要だが、fixupの使用頻度のほうが高いinsteadOf設定の有用性advice.statusHints,include.path,remote "origin".fetch,interactive.singleKeyなど多様な設定への言及.gitconfig設定例alias,tag,tar,log,pull,diff,difftool,pager,safe,advice,init設定を含むdeltaをページャーとして使う設定user.useConfigOnly設定user.emailをコメントアウトし、新しいリポジトリでコミット時にメールを設定merge.conflictstyleのデフォルト値を変える必要性diff3スタイルはコンフリクト解決により多くの情報を提供core.commentChar,alias.newtask,alias.zip,git checkout -,format.pretty,delta設定branch.sort設定に関する誤解.gitconfig設定例alias.lg,alias.hist,alias.quick-push,alias.search,user,core,url設定quick-pushエイリアスによってシンプルなワークフローを定義可能上記は、Hacker News のコメントでユーザーたちが共有した個人的な
.gitconfig設定と、彼らが好む Git 設定のコツを要約したもの。これらの設定は、Git 利用の効率を高め、特定の作業を自動化し、ユーザー体験を改善することに重点を置いている。