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 status
やgit diff
時などにTerminalの文字色を良い感じにしてくれる機能が備わっているので、ONにしておきます。
$ git config --global color.ui true
機能によってON/OFFすることも可能です。以下のキーワード毎に true
や false
を指定します。
- 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)でログインした際の認証情報をデフォルトではキャッシュしてくれません。そのためpush
やpull
する度に毎回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で管理できますしね。他にもおすすめの設定があればコメントなどで教えてください!
書籍
売り上げランキング: 1,575