Gitの設定は使い始める一番最初に行いますが、使っているうちに設定の変更や追加などをしたくなる状況がでてきます。そのための情報として役立つように少しだけ詳しくGitの設定を整理します。
Gitの設定
Gitを使い始めるときに最初に行うのがGitの設定です。
この記事(https://codeaid.jp/blog/git-github/)でも書いてますが最初に必要最低限の設定をするだけで使い始めることができます。
通常Gitを1つのユーザー環境で使用して、リポジトリも1種類であれば使い始めるときに設定したものを変更なしに使い続けると思います。
ですが、そのうち複数のリポジトリを扱うようになり、複数のユーザーで操作するようになると同じ設定のままでは扱いづらくなります。
例えばリポジトリごとに異なったユーザーとして作業する場合などは設定内容が変わります。
Gitの設定について少し詳しく知ってこういった作業に役立てればと思います。
Gitの設定ファイルの種類と保存場所
Gitの設定は「git config」コマンドで設定の追加・変更・確認を行います。
もしくは、設定ファイルを直接作成・編集してもその内容を反映できます。
Gitの設定は「システム、グローバル、ローカル」の3つのレベルで設定可能です。
- システム ⇒ システム上の全ユーザーの全リポジトリ向けの設定
- グローバル ⇒ 特定ユーザーの全リポジトリ向けの設定
- ローカル ⇒ 特定リポジトリ向けの設定
これらの設定はシステム→グローバル→ローカルの順で読み込み、あとから読んだ値がその前の値を上書きします。
例えばシステム上で設定している内容と同じ内容がローカルで設定されているとローカルの設定が優先されます。
各レベルのコマンドオプションとファイルは以下となります。
設定対象 | ファイル | コマンド |
システム全体 | /ect/gitconfig | git config –system [設定内容] |
各ユーザー | ~/.gitconfig または~/.config/git/config | git config –global [設定内容] |
各リポジトリ | リポジトリの.git/config | git config –local [設定内容] |
これらのファイルの内容は例えば以下のようになります。
[user]
name = Foo Bar
email = foobar@example.com
[color]
ui = true
このような内容で上記のファイル名でそれぞれの場所で作成することでも設定内容は反映されます。
設定方法
Gitの設定でよくされる内容を中心に各設定項目を説明します。
また例文はすべてグローバルオプションを付けて記述します。
ユーザー名とメールアドレス
Gitを使い始めるときに必須となる設定です。
これでユーザー名とメールアドレスを登録します。
$ git config --global user.name 'Foo Bar'
$ git config -- global user.email 'foobar@example.com'
文字色
Gitのその他コマンドgit statusやgit giffなど実行したときに文字色を着けて表示する設定です。
$ git config --global color.ui true
コマンドごとに設定することも可能です。
$ git config --global color.status true
$ git config --global color.diff true
エディター
Gitコマンドはオプションなどによりユーザーに何か入力を促す際にエディターを起動します。
そのデフォルトで起動するエディタを設定します。
設定がない場合はviが起動されます。
$ git config --global core.editor nano
例えば設定ファイルをエディタで表示するには以下を実行します。
$git config --global --edit
するとこの場合はユーザーの設定ファイルがnanoで表示されます。
改行コードの自動変換
Gitは改行コードを自動的に変換します。
そのためWindowsやmacOSやLinuxが混在している環境でGitを使ってソースなどをやりとりするとトラブルが発生することもあります。
WindowsでGit for Windowsインストール時のデフォルトは設定のcore.autocrlfがtrueなので、チェックアウトのときはCRLFに自動変換します。
コミットのときにLFへ変換してくれますが、作業環境がLinuxやMacでも作業する場合はこれでは困ります。
自動変換をOFFにすると、Windowsで作業したものはリモートリポジトリもCRLFになってしまいます。
Windowsだけで作業するのであれば問題ないですが、プラットフォームが混在する環境で作業する場合はcore.autocrlfの設定はinputをおすすめします。
チェックアウト | コミット | core.autocrlf |
LF -> CRLF | CRLF -> LF | true |
変換しない | CRLF -> LF | input |
変換しない | 変換しない | false |
$ git config --global core.autocrlf input
ファイル名の大文字/小文字の区別
Gitはデフォルトでは大文字と小文字を同一として処理します。
不都合がある場合は区別するように設定します。
$ git config --global core.ignorecase false
日本語のファイル名のエンコード
Gitで管理しているファイルに日本語のファイル名があった場合、コマンドによってコンソールに表示されるファイル名がエンコードされて表示されるのでどのファイルかわかりません。
エンコードしないように設定しておくとわかるようになります。
$ git config --global core.quotepath false
認証情報の記憶
Gitはリモートリポジトリのログイン情報はデフォルトでは覚えてくれません。
なので、pushやpullするたびに毎回ユーザー名とパスワードを聞いてきます。
これを設定で時間を指定してキャッシュしておくことが可能です。
$ git config --global credential.helper 'cache --timeout=86400'
時間は秒単位で指定するので、この場合は24時間キャッシュする設定になります。
またWindowsやmacOSはアプリやOSの機能を使って覚えておくことができます。
Windowsの資格情報記憶
Windowsの場合はGit for Windowsをインストールして以下のコマンドで設定します。
$ git config --global credential.helper wincred
また、WSLで使うGitはLinux環境でインストールしたGitになります。
なので設定もLinux環境での設定が有効になります。
そのため認証情報はそのままではWindowsのものを確認できませんが以下の方法で共通の資格情報を使って動作することができます。
$ git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
ただし、複数のリモートアカウントに接続したい場合、登録してるものと違うアカウントで接続はできません。
その場合は一時的に.gitconfigの[credential]設定をコメント化しパスワードを入力して接続できるようにすれば動作します。
Windowsでリモートリポジトリの複数アカウント情報を覚えるには、「remote add」や「clone」を実行するときにユーザー名を付けてHTTPSで接続します。
$ git remote add https://ユーザー名@ドメイン/リポジトリ
以下はgithub.comを使うときの例です。
$ git remote add https://foobar@github.com/foobar/repository.git
とか
$ git clone https://foobar@github.com/foobar/repository.git
となります。
するとアカウントごとに資格情報が作成されます。
Windowsで資格情報を見るには、タスクバーの検索で「資格情報」を入力すると表示される「資格情報マネージャー」を起動します。
Windows資格情報を選択し一覧に表示されるリモートリポジトリの情報をチェックします。
以下はgithub.comの資格情報の例です。
macOSのキーチェーン記憶
macOSの場合はキーチェーンに覚えるため以下のコマンドで設定します。
$ git config --global credential.helper osxkeychain
これが正しく動作するためにosxkeychain helperがインストールされている必要があります。
使っているGitがHomebrewからインストールされたものである場合は、すでにosxkeychain helperはインストールされています。
もし、Xcode Command Line Toolsを通してインストールしていた場合は、Mac OS X 10.7以上であれば、Gitインストール時に自動的にインストールされています。
osxkeychain helperがインストールされているかどうかを確認するには、
$ git credential-osxkeychain
このコマンドを実行します。
インストールされていればUsageのメッセージが表示されます。
インストールされていなければ、requesting installのメッセージが表示されます。
そのときはHomebrewかXcode Command Line ToolsでGitをインストールすればインストールされます。
GitHubのサイトに説明があるので以下を参照してみてください。
https://docs.github.com/en/github/using-git/caching-your-github-credentials-in-git
また、macOSでこの覚えた情報を書き換えたい場合は一度キーチェーンを削除します。
例えばあるアカウントでリモートリポジトリと接続して作業していたが、違うアカウントで作業したいときは違うアカウントにログインする必要があるのですが、一度キーチェーンを削除しないとアカウントを切り替えることができない場合があります。
そういったときには以下の方法でキーチェーンを削除します。
リモートリポジトリはgithubを使っている例を説明します。
削除するにはキーチェーンアクセスを起動し、
githubを検索して表示される「github.com」の項目を削除します。
詳細はGithubの公式サイトにも記載があります。
https://docs.github.com/en/github/using-git/updating-credentials-from-the-macos-keychain
これでリモートリポジトリと接続するとき(例えばpushなどのコマンド実行)に新たにユーザー名とパスワードの入力を求めてくるので目的のアカウントでログインします。
ただ、複数のアカウントを扱うときに毎回この作業をするのは大変です。
そこで複数アカウント情報をcredential-osxkeychainに覚えてもらう方法も説明しておきます。
macOSでリモートリポジトリの複数アカウント情報を覚えるには、「remote add」や「clone」を実行するときにユーザー名を付けてHTTPSで接続します。
$ git remote add https://ユーザー名@ドメイン/リポジトリ
以下はgithub.comを使うときの例です。
$ git remote add https://foobar@github.com/foobar/repository.git
とか
$ git clone https://foobar@github.com/foobar/repository.git
となります。
するとアカウントごとにキーチェーンが作成されます。
Gitの設定確認
これまででいくつかの設定を行いましたが、以下のコマンドで設定内容を確認します。
$ git config --global --list
グローバルオプションを付けずに実行するとローカルのリポジトリで反映される内容が表示されます。
$ git config --list
設定が最優先に反映されるのは、ローカルのリポジトリの設定内容なので、これが実際に動作する設定内容となります。
最後に
「git config」は最低でもユーザー名とメールアドレスを設定すればGitは使えますが、このようにいくつか設定をするだけでより便利に使うことができるようになります。
Git公式サイトにも記載していますが、設定項目は大量にあります。
ここで紹介しているのはちょっと便利になる項目なので、興味があれば公式サイトをチェックしてみてください。