59 ポイント 投稿者 GN⁺ 2024-02-17 | 4件のコメント | WhatsAppで共有
  • 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 は既定の設定でのマージ競合表示方法を変更し、元のコードを中央に表示する。
    • zdiff3diff3 の改良版で、より優れていると考えられている。
  • rebase.autosquash true

    • 古いコミットを修正しやすくする機能。
    • git commit --fixup OLD_COMMIT_ID を使ってコミットすると、git rebase --autosquash main を実行した際に fixup! コミットを自動的に対象と結合する。
  • rebase.autostash true

    • git rebase の前後で自動的に git stashgit stash pop を実行する。
  • push.default simple, push.default current

    • 現在のブランチを同じ名前のリモートブランチへ自動的にプッシュするよう設定する。
    • push.default simple は既定の設定で、ブランチがすでにリモートブランチを追跡している場合にのみ動作する。
    • push.default current は常にローカルブランチを同じ名前のリモートブランチへプッシュする。
  • init.defaultBranch main

    • 新しいリポジトリを作成するときに master の代わりに main ブランチを作成する。
  • commit.verbose true

    • コミットメッセージを書くテキストエディタにコミット差分全体を追加し、何をしたか思い出しやすくする。
  • rerere.enabled true

    • git rebase 中にマージ競合をどう解決したかを記憶し、自動的に競合を解決する。
  • help.autocorrect 10

    • git の自動修正機能はタイプミスを確認するが、修正後のコマンドを自動実行はしない。
    • 自動実行するようにするには、help.autocorrect110immediate、または prompt に設定する。
  • core.pager delta

    • git diffgit loggit 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/'

  • fsckobjects: データ破損の防止

    • データ破損を積極的に検出し、チームを何度か救った設定。
  • submodule 関連の設定

    • status.submoduleSummary true
    • diff.submodule log
    • submodule.recurse true
  • その他の設定

    • blame.ignoreRevsFile .git-blame-ignore-revs
    • branch.sort -committerdate
    • color.ui false
    • commit.cleanup scissors
    • core.autocrlf false
    • core.editor emacs
    • credential.helper osxkeychain
    • diff.tool difftastic
    • diff.colorMoved default
    • diff.colorMovedWS allow-indentation-change
    • diff.context 10
    • fetch.prune true および fetch.prunetags
    • gpg.format ssh
    • log.date iso
    • merge.keepbackup false
    • merge.tool meld
    • push.followtags true
    • rebase.missingCommitsCheck error
    • rebase.updateRefs true
  • 設定方法

    • 一般的には git config --global NAME VALUE を使って設定する。
    • オプションを削除するには ~/.gitconfig を手動で編集する。
  • この記事を書いた後に変更した設定

    • diff.algorithm histogram
    • branch.sort -committerdate
    • merge.conflictstyle zdiff3
  • まとめ

    • 多くの人にお気に入りの設定を尋ね、最も多く挙がったものを列挙するのは有用。

GN⁺の意見

  • この記事で最も重要なのは、開発者がよく使う git 設定オプションを知れる点。
  • git を使う初級ソフトウェアエンジニアにとって、これらの設定は作業効率を高め、日常的な問題を解決する助けになる。
  • 特に merge.conflictstyle zdiff3rebase.autosquash true のような設定は、マージ競合の解決やコミット履歴の管理を容易にし、協業の過程で起こりうる問題を減らせる。

4件のコメント

 
pril1 2024-02-23

オプションを削除するには、git config --global --unset NAME コマンドを使う方法もあります

 
rumbarum 2024-02-21

自分の設定を確認するには

git config --list を追加してください。

 
pmc7777 2024-02-18

メインの開発環境では設定していたのに、別の環境では設定されていなくて、どうして動かないんだろう……となった経験があります(笑) 開発者なら Git を毎日使うだけに、Git の設定に関することにももっと関心を持てるといいですね

 
GN⁺ 2024-02-17
Hacker Newsの意見
  • core.autocrlfsafecrlf の設定
    • CRLF ファイルのコミットを防ぎ、LF への変換を強制
    • 必要に応じて gitattributes でオーバーライド可能
  • .gitconfigalias 設定
    • コミット履歴を簡潔なグラフで出力するエイリアス設定
    • Stack Overflow の投稿から持ってきた設定
  • rebase.autosquashfixup エイリアス
    • よく使われる設定で、コミット後のリベースを自動化
    • pull.rebase も重要だが、fixup の使用頻度のほうが高い
  • insteadOf 設定の有用性
    • GitHub リモート追加時に短縮記法を使用
    • 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 利用の効率を高め、特定の作業を自動化し、ユーザー体験を改善することに重点を置いている。