Gitを使い始めたら一番最初にやりたい 'git config' 設定メモ

Gitで一番最初にやる設定をよく忘れるのでちょっとメモしておきます。

git config

Gitの設定を行うにはgit configコマンドを利用するか、設定ファイルを直接作成&編集します。

git configコマンドを実行すると自動的に設定ファイルが作成されます。すでに設定ファイルが存在している場合には、指定した項目が上書き保存されます。設定ファイル自体も以下のようにini形式のファイルとなっており、編集自体もそれほど難しくありません。

$ cat ~/.gitconfig 
[user]
    name  = Makito Katsube
    email = katsubemakito@gmail.com
[color]
    ui = true

また設定ファイルを設置する場所、またコマンドのオプションで影響範囲が変わりますので、複数人でチーム開発する際にはGitの設定をどうやって管理するかは事前に話し合っておく必要もあります。

影響範囲 ファイル コマンド
システム全体 /etc/gitconfig git config --system (設定内容)
各ユーザー ~/.gitconfig または ~/.config/git/config git config --global (設定内容)
リポジトリ リポジトリの .git/config git config --local (設定内容)
※カレントディレクトリが各リポジトリのワーキングディレクトリである必要があります

同じ設定項目があった場合、リポジトリ内にある設定が最優先されます。

このページでは git config --global を前提としてご紹介します。

初期設定

ユーザー名とメールアドレス

git logなどで表示されるユーザー名やメールアドレスを登録します。これをしておかないと初回commit時に怒られます。

$ git config --global user.name 'Makito Katsube'
$ git config --global user.email 'katsubemakito@gmail.com'

push方式

git push時の動作を指定します。

$ git config --global push.default current
説明
nothing git push origin masterのように常に何をどこにpushするか指定する。
matching ローカルとリモートで同じ名前のリポジトリがあればpushする。過去のバージョンのデフォルト。
upstream upstream branchが現在のブランチに設定されている場合pushする。
simple upstream branchが現在のブランチに設定されており、同名のブランチ名の場合のみpushする。現状のデフォルト。
current 現在のブランチをリモートに同じ名前でpushする。upstreamを設定していなくてもpushされる。

諸説ありますが個人的にはcurrent派です。

pull方式

追記

Gitのバージョン2.27.0からpullをどのように行うか指定しないと警告が表示されるようになったこともあり、git pull時のデフォルト動作を指定しておきます。

merge commitを作成するか

詳細は割愛しますが、pull時に問答無用でmerge commitを作成するか設定します。

$ git config --global pull.ff only

好みもあると思いますが、意図しないmergeがされない安全志向のonly派の人が多い印象です。

説明
デフォルト fast-forwardな場合のみmergeをし、それ以外の場合はmerge commitを作成する。 git pull --ffと同義。
only fast-forwardな場合のみmergeをし、それ以外の場合はmergeはされずエラーとなる。git pull --ff-onlyと同義。
false fast-forwardかどうかに関わらず常にmerge commitを作成する。git pull --no-ffと同義。

rebaseするか

コミットログを整理するrebaseをpull時に行うか設定します。

$ git config --global pull.rebase false

trueにするとrebaseが実行され、falseだとされません(普通にmergeされます)。デフォルトはfalseです。

これも諸説ありますがrebaseの挙動を正確に理解していないうちはfalseで良いと思います。

デフォルトのブランチ名

追記

Gitのバージョン2.28から、デフォルトのブランチ名が指定されていない場合はgit init時に警告文が表示されるようになったため設定します。

$ git config --global init.defaultBranch main

BLM運動の関係からGitHubではmainブランチがデフォルトで使用されるようになったこともあり、長い物に巻かれる方は「main」で、これまでと同じように利用したい場合は「master」を指定します。

プロキシ

Gitがリモートと通信する際にプロキシを通す必要がある場合、指定を行う必要があります。HTTPとHTTPSでそれぞれ設定が必要です。

$ git config --global http.proxy http://proxy.example.com:8080
$ git config --global https.proxy http://proxy.example.com:8080

なおIDとパスワードによる認証が必要な場合は、URL中に記載します。

http://username:password@proxy.example.com:8080

改行コードの自動変換

Gitには改行コードを自動的に変換する機能が備わっており、WindowsとmacOS/Linuxが混在している環境で開発を行っているとトラブルになる可能性があります。以下でその機能をOFFにすることができます。

$ git config --global core.autocrlf false

ファイル名の大文字と小文字を区別する

Gitではファイルの名の大文字と小文字をデフォルトでは同一視します。この挙動で問題がある場合は以下のように無効にしておきます。

$ git config --global core.ignorecase false

git cloneしたリポジトリ内の設定ファイル.git/config上でtrueになっている場合、上記の設定をしても効きません。同じ設定項目の場合リポジトリ内の設定ファイルが優先されるためです。直接.git/configを編集します。

試してみましょう。以下のようにファイル名を変更してもgitは認識してくれません。

$ mv Home.md home.md
$ git status
nothing to commit, working tree clean

設定した後だと無事に更新を認識してくれるようになりました。

$ git config --global core.ignorecase false
$ vi .git/config
ignorecase = false

$ mv Home.md home.md
$ git status
Untracked files:
    home.md

使い勝手を向上する

文字色

gitではgit statusgit diff時などにTerminalの文字色を良い感じにしてくれる機能が備わっているので、ONにしておきます。

$ git config --global color.ui true

機能によってON/OFFすることも可能です。以下のキーワード毎に truefalse を指定します。

  • color.branch
  • color.diff
  • color.interactive
  • color.status

エディター

gitではユーザーに何らかの入力を促す際にエディターを起動することがありますが、そのデフォルトのエディターを変更することが可能です。特に設定しない場合はviが起動します。Emacsやその他のエディターを所望される場合はこの設定をお忘れなく。

$ git config --global core.editor emacs

Windowsの場合はエディターのフルパスを "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession" といったような形で指定します。

エイリアス

頻繁に実行するgit statusのようなコマンドはキーボードのタイプ数をできる限り短くしたいものです。そんなときに利用するのがエイリアス。

$ git config --global alias.st status
$ git config --global alias.df diff
$ git config --global alias.co commit
$ git config --global alias.br branch
$ git config --global alias.ps push
$ git config --global alias.pl pull
$ git config --global alias.ck checkout

上記の設定を行うことでgit stとタイプするだけでgit statusを発動することが可能です。

なおエイリアスはタイプ数を短縮するだけでなく、独自のコマンドを作成する(っぽい)ことも可能です。オプション指定が激しく長くなる場合などに活用すると非常に捗ります。

$ git config --global alias.graph log --pretty=format:'%Cgreen[%cd] %Cblue%h %Cred<%cn> %Creset%s' --date=short  --decorate --graph --branches --tags --remotes

LinuxやmacOSをお使いの場合、シェルのaliasに登録しておくと最初のgit部分も端折ることができますが、やりすぎると自分でも混乱するのでほどほどにw

alias pull='git pull'
alias push='git push'

日本語ファイル名をエンコードしない

$ git config --global core.quotepath false

この設定をしないと以下のように日本語ファイル名がエンコードされちょっと見づらい。

$ git status
Changes not staged for commit:
    modified:   "Git\343\201\256\345\247\213\343\202\201\346\226\271.md"

設定後は以下のようにエンコードされなくなります。

$ git config --global core.quotepath false
$ git status
Changes not staged for commit:
    modified:   Gitの始め方.md

認証情報をキャッシュする

GitはリモートリポジトリにHTTP(HTTPS)でログインした際の認証情報をデフォルトではキャッシュしてくれません。そのためpushpullする度に毎回IDとパスワードを求められてしまいます。GitHubを訳あってHTTPSで使うときなど気が狂いそうになりますw

以下の設定でメモリ上に24時間キャッシュしてくれます。

$ git config --global credential.helper 'cache --timeout=86400'

もしくは以下の設定でファイルに半永久的に保存することもできますが、パスワードがそのまま平文でファイルに記録されるためセキュリティ面を考えると気が狂いそうになるためおすすめできません。

$ git config --global credential.helper 'store --file ~/.git_credentials'

というわけで通常はOSが提供するパスワード管理の仕組みを利用します。macOSの場合は以下のようにするだけです。

$ git config --global credential.helper osxkeychain

Windowsの場合は以下をインストール。 github.com

LinuxのXWindowの一種であるGNOMEを利用している場合は以下をインストール。 github.com

※以下のページを参考にさせていただきました。 https://qiita.com/usamik26/items/c655abcaeee02ea59695

セキュリティを向上する

パスワードの登録を禁止

追記

別のページにまとめました。AWSなどクラウドサービスを利用している場合はぜひ。IAMのシークレットアクセスキーなどをリポジトリへ登録できなくすることができます。 blog.katsubemakito.net

GPG署名

追記

別のページにまとめました。コミットやタグの改ざんの検知を可能にしたり、第三者があなたになりすますことの抑止力になります。 blog.katsubemakito.net

設定内容の確認

git config--listオプションを指定することで現在の設定を確認することができます。

$ git config --list
user.name=Makito Katsube
user.email=katsubemakito@gmail.com
color.ui=auto
alias.st=status
alias.co=commit
alias.br=branch
alias.ck=checkout
branches --tags --remotes
push.default=current

もしくは$HOME/.gitconfigに設定がまとまっている場合は、こちらをそのまま覗いても良いでしょう。

$ cat ~/.gitconfig 
[user]
name  = Makito Katsube
email = katsubemakito@gmail.com

[color]
ui = true

[alias]
st = status
co = commit
br = branch
ck = checkout

[push]
default = current

設定内容を削除する

すでに設定した項目を削除するには、--unsetオプションを使用します。例えばuser.nameを削除するには以下のようにします。

$ git config --global --unset user.name

実際に試してみましょう。

$ git config user.name
Makito Katsube

$ git config --global --unset user.name

$ git config user.name

もしくは直接~/.gitconfigなどを編集してしまってもかまいません。

ここまでの~/.gitconfig

ひとまずここまで設定すればそれなりに使い始めることができるでしょうか。

[user]
name  = Makito Katsube
email = katsubemakito@gmail.com

[color]
ui = true

[alias]
st = status
df = diff
co = commit
br = branch
ps = push
pl = pull
ck = checkout
graph = log --pretty=format:'%Cgreen[%cd] %Cblue%h %Cred<%cn> %Creset%s' --date=short  --decorate --graph --branches --tags --remotes
diffw = diff --word-diff

[push]
default = current

[pull]
ff = only
rebase = false

[init]
defaultBranch = main

[core]
quotepath  = false
autocrlf   = false
ignorecase = false
editor     = vi

[credential]
helper = osxkeychain

# [http]
# proxy = http://proxy.example.com:8080
# [https]
# proxy = http://proxy.example.com:8080

ここではコマンドを叩いて設定する方法をご紹介しましたが、設定ファイルを直接編集するのが一覧性も高くて楽チンです。設定ファイル自体もGitで管理できますしね。他にもおすすめの設定があればコメントなどで教えてください!

書籍

わかばちゃんと学ぶ Git使い方入門
シーアンドアール研究所 (2017-04-21)
売り上げランキング: 1,575

参考サイト