GIT: 異なる設定(gitユーザー名/メールアドレスまたはSSHキー)を異なるプロジェクトで使用する方法
背景
Gitを使用する際、ユーザー名(user.name)やメールアドレス(user.email)などの基本的な設定項目を設定することがよくあります。設定されていない場合、Gitを使用してコードをコミットするとエラーが発生します。
Make sure you configure your 'user.email' and 'user.name' in gitこれは、git configコマンドを使用して値を設定することで修正できます。
git config --global user.name "Tinymemo"
git config --global user.email "tinymemo@tinkink.net"このコマンドは、実際に2つの設定項目をグローバル設定ファイルに書き込みます:user.nameとuser.email。設定ファイルを開いてみることができます(通常は~/.gitconfigまたはC:\Users\<username>\.gitconfigにあります)。
[user]
name = Tinymemo
email = tinymemo--globalオプションを使用せずにコマンドを実行しない場合、設定ファイルは現在のディレクトリに書き込まれます。通常は.git/configにあります。
異なるプロジェクトで異なる設定を使用する
異なるアイデンティティでプロジェクトに参加したい場合、各プロジェクトで異なる設定を使用する必要があります。ただし、各プロジェクトに別々の設定を書き込むことは望ましくありません。プロジェクトに設定がない場合はグローバル設定を使用する必要があるためです。より良い方法が必要です。
幸いなことに、GitはincludeIfディレクティブを提供しており、異なるパスに対して異なる設定を指定することができます。
次の2つのパスがあると仮定します。
~/workに対応するユーザー名とメールアドレスはTinymemo/tinymemo@somework.com~/hobbyに対応するユーザー名とメールアドレスはTinymemo/tinymemo@somehobby.com
まず、2つの別々の設定ファイルを作成します。
~/.gitconfig-work:
[user]
name = Tinymemo
email = tinymemo@somework.com~/.gitconfig-hobby:
[user]
name = Tinymemo
email = tinymemo@somehobby.com次に、グローバル設定ファイル~/.gitconfigに次の行を追加します。パスの最後にスラッシュがあることに注意してください。
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/hobby/"]
path = ~/.gitconfig-hobbyその後、プロジェクトの対応するディレクトリで検証できます。
# ~/work/project1
git config user.name // Tinymemo
git config user.email // tinymemo@somework.com
# ~/hobby/project2
git config user.name // Tinymemo
git config user.email // tinymemo@somehobby.com注意:
git configコマンドはプロジェクトディレクトリで実行する必要があります。そうしないと、グローバル設定が使用されます。
これにより、異なるプロジェクトで異なる設定を簡単に使用できるようになりました。
公開/秘密キーに異なる設定を使用する
上記の設定により、異なるプロジェクトで異なるユーザー名とメールアドレスを簡単に使用できるようになりましたが、一部の場合では異なるSSH公開/秘密キーを使用する必要があります。
まず、新しい公開キーを作成する必要があります。すでに公開キーがある場合は、この手順をスキップできます。
cd ~/.ssh
ssh-keygen -t rsaファイル名に注意してください。デフォルトのid_rsa名にすることはできません。そうすると、既存の公開キーと競合します。
Enter file in which to save the key (/Users/tinymemo/.ssh/id_rsa): id_rsa_hobbyすべてEnterを押してください。
次に、新しい公開キーをsshコマンドのために指定する新しい設定項目を追加できます。
[core]
sshCommand = "ssh -i ~/.ssh/id_rsa_hobby -F /dev/null"これで、異なるプロジェクトで異なる公開/秘密キーを使用できるようになりました。
まとめ
グローバル設定で[includeIf]ディレクティブを使用することで、異なるディレクトリの異なるプロジェクトで異なるユーザー名、メールアドレス、公開/秘密キーを簡単に使用できるようになりました。
