おすすめのgitconfigと周辺ツール
はじめに
本記事は Make IT Advent Calendar 2019の 2 日目の記事です。
明日も 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 ツール
- tig: https://github.com/jonas/tig
- lazygit: https://github.com/jesseduffield/lazygit いままでは tig をずっと利用していましたが最近 lazygit を使ったりしています
Git 関連の便利コマンド
ghq: https://github.com/motemen/ghq
git のリポジトリ管理をいい感じにしてくれるやつです。 自分は
~/Repository
というディレクトリ配下に各種ソースコードを管理しているためこれを活用していますfzf: https://github.com/junegunn/fzf
cui でいい感じにインタラクティヴなフィルターとして使うことができるコマンドです。 パイプ (|)をつかって利用するだけでも便利です,がこれとシェルスクリプトを組み合わせたり、タブ補完と組み合わせたりすることでより便利に使うことができます。
P.S.
私の .gitconfig は今までなにか欲しい機能がある際にぐぐり、誰かのブログや qiita にて良さそうな設定があったらそれを
見様見真似で拝借し自分でアレンジを加えたいわば秘伝のタレ化したようなものです。
例えば gitconfig の[alias]
などは git で ○○ したいけどコマンドがわからないって時に調べて、今後も使いそうなら alias にするみたいなことを何度もしてきました。
そのため自分の'.gitconfig'等の中身に関しては参考記事はいくつもあるはずですが、今回この記事作成にあたってはそれらの文献への参照がないことをご容赦いただきたく思います。