おすすめのgitconfigと周辺ツール

はじめに

本記事は Make IT Advent Calendar 2019の 2 日目の記事です。

qiita.com

明日も isshun がなにかを書いてくれるはずです。

TL;DR

git を普段使いしており、自分の dotfiles をそれなりに管理していて、ls ~/.git*これの結果がすでに存在していて、自分で中身を書いたことがある人にとっては常識のような話かもしれません。 gitconfigや実際に使ってみて便利な設定について書きます。

agenda

  • gitconfig とは
  • これはやっておいた方が便利
  • git やその周辺でつかってる便利ツール

の流れで書いていきます


gitconfig とは

ref: 1.6 使い始める - 最初の Git の構成 とはその名の通りで git コマンドを実行する際の設定を記述するファイル、およびその設定のことをです。 ※ ファイル自体を示す時は明示的に '.gitconfig'のように記載します

git を初めて install した後に以下のようなコマンドを実行した覚えはないでしょうか。

$ git config --global user.name "YOUR NAME"
$ git config --global user.email "YOUR EMAIL"

これも gitconfig を設定するためのコマンドです。

これは誰がコミットをしたのかを保存するために利用すされますので本名ないし、ハンドルネーム等を利用しましょう。ユニークであれば良いような気がします(?)

また、この gitconfig は三箇所で設定することができ、次の各コマンドに --edit, --listオプションを渡してあげることで、それぞれ編集 or 一覧を表示することができます。

それぞれの設定ファイルは以下に作成されます (DOC より引用)

  • system: /etc/gitconfig
  • global: ~/.gitconfig or ~/.config/git/config
  • local: PROJECT_ROOT/.git/config
$ git config --global -l # or -e
$ git config --system -l # or -e
$ git config --local -l # or -e

基本的に PC として利用する全般的な設定は global を編集するようにし、repositoryURL 等は local の gitconfig に記述することで基本的な対応はできると思います。

※ ちなみに筆者の環境(MBP)においては git を brew にて管理しているためか system の設定ファイルは以下に作成されていました。

brew --prefix/etc/gitconfig

FYI: 参考までに私の gitconfig をおいておきます。 ref: github.com:fumihumi/dotfiles/gitconfig

これはやっておいた方が便利

⚠️ これより先は実際に設定用のコマンドを記載します。前後にその設定が何を意味するのか Doc や参考記事をリンクするので各自で見てその設定が自分にあってるなぁと感じたら設定してみて下さい。

$ git config --global push.default current

ref: https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushdefault

value description
simple _default_: upstream が登録されていて、ブランチ名が同一の時に push する
nothing git push origin masterのように remote ブランチを明示して push する
matching ローカルとリモートで同一の名前のリポジトリがあれば全て push する。
upstream 今のブランチに upstream が登録されている場合そこに push する
tracking deprecated, これをつかうなら一つ前の upstream を使う
current 今のブランチと同名のブランチを push する

nothing でやるべきなのかもしれませんが、大抵の場合ローカルのブランチと同名にするのではないでしょうか?そういった使い方をしているなら current にすると楽になると思います。

$ git config --global pull.rebase true

git pullを実行する際に upstream ブランチを rebase してくれます ref: https://git-scm.com/docs/git-config#Documentation/git-config.txt-pullrebase

rebase の説明はここでは割愛しますが知っている前提とします。 大抵 rebase を好む人は git pull --rebase origin master ないし、 git pull --rebase origin develop をしてから push し、PR を開いたりするのではないでしょうか。 この --rebaseを省略してくれるのがこの設定です。

rebase 派の人は設定した方がタイプ数減って便利ですね. これを知るまでは git stash -> git pull or git rebase, git stash pop をしていたのでそれを考えずによくなってかなり快適になりました。

``` ???: alias で設定してるからこんな設定しなくてもいい??

A: それはまた別の話ですし、常に rebase するなら設定していいのでは??? ```

$ git config --global rebase.autostash true

これも rebase 派の人のためのものですね。 rebase を実行する時に毎回 stash をしなくてよくなります。便利.

$ git config --global fetch.prune true

これをすることで git fetch を実行した際に--pruneオプションを付けてくれます。 GitHub 側のリモートブランチを削除してもそれの追跡ブランチがローカルに残っていると汚く感じますよね(?) git branch や git branch -a の結果が不要なブランチで溢れていると使いにくいですよね???削除してないブランチが溜まってきたら不定期で '--prune'を実行する人は少なくないと思いますが、この設定をしておくだけでそのような煩わしさから開放されます! :tada:

git config --global core.***

ここからは coreの設定を紹介します。

$ git config --global core.ignorecase false

これでファイルの大文字/小文字を区別するようになります

$ git confnig --global core.quotepath false

日本語ファイルの文字化けがなくなります。

$ git config --global core.editor vim

git commitコマンドで起動するエディタを指定できます vim なり emacs なり好きなエディタをここで指定してあげましょう。

$ git config --global core.pager "less -R -F -X"

git log などでページングが必要な時にどんな挙動をするのか設定することができます。
今回の less を利用することで less コマンドと同じように使うことができます。(↓ のブログより拝借しました)

ref: https://nojima.hatenablog.com/entry/2017/09/12/103130

git やその周辺でつかってる便利ツール

diff のハイライト系

何も設定をしていない状態での git diff は差分が読みにくく、色合いも正直読みにくいと私は感じます。そういったものをより読みやすくするためのツールをここでは二つ紹介します。

diff-so-fancy: https://github.com/so-fancy/diff-so-fancy diff-highlihght: https://udomomo.hatenablog.com/entry/2019/12/01/181404

私はdiff-so-fancyを利用しています、昨日 diff-highlight を紹介している記事もありましたのでそちらも貼っておきます。 diff-so-fancy, diff-highlight どちらも git diff の結果をよりみやすくするもので色が可視化するツールです。

TUI ツール

Git 関連の便利コマンド

P.S.

私の .gitconfig は今までなにか欲しい機能がある際にぐぐり、誰かのブログや qiita にて良さそうな設定があったらそれを 見様見真似で拝借し自分でアレンジを加えたいわば秘伝のタレ化したようなものです。 例えば gitconfig の[alias]などは git で ○○ したいけどコマンドがわからないって時に調べて、今後も使いそうなら alias にするみたいなことを何度もしてきました。 そのため自分の'.gitconfig'等の中身に関しては参考記事はいくつもあるはずですが、今回この記事作成にあたってはそれらの文献への参照がないことをご容赦いただきたく思います。