いつも忘れるGit-Githubの設定(Mac)
Git - Github の設定
ローカルからgit push
git clone
のコマンドを実行するときに必要な設定を記録するものである。
ただし複数プロジェクトに携わっていたり Github アカウントが複数の場合の考慮もする。
前提 - 準備
Homebrew をインストールすると自動で git がインストールされる。
Homebrew のインストールコマンド
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
手順
Macで秘密鍵と公開鍵を生成する
秘密鍵と公開鍵のファイル名とパスフレーズの入力を促されるので設定する。
ファイル名は id_ed25519_github
名を設定。
cd ~/.ssh
ssh-keygen -t ed25519
出力ファイルは2種類で id_ed25519_github
と id_ed25519_github.pub
.pub
が 公開鍵である。
ssh-config の設定
config ファイルがなかったら作成する
touch ~/.ssh/config
Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_ed25519_github
TCPKeepAlive yes
IdentitiesOnly yes
SSH エージェントに登録する
SSHエージェントに登録しておければSSHする度にパスフレーズを入力しなくて済む。
毎回パスフレーズを入力したい場合は、この手順をスキップ。
cd ~/.ssh
ssh-add id_ed25519_github
Github に SSH公開鍵を設定する
Settings > (Access) SSH and GPG keys > SSH Key
New SSH Key を押下して、公開鍵情報を登録する。
Macで gitconfig を設定する
ホームディレクトリに .gitconfig
ファイルを編集をするが、ファイルが存在しない場合は作る。
touch .gitconfig
[user]
name = example-user # ここを変更する
email = user@example.com # ここを変更する
[credential]
helper = osxkeychain
# ここからはお好みの設定
[fetch]
prune = true
[push]
autoSetupRemote = true
参考
複数アカウントの考慮
別アカウント用の秘密鍵と公開鍵を生成
上記手順(Macで秘密鍵と公開鍵を生成する)を参考
ファイル名は id_ed25519_github_project1
名を設定。
ssh-config で別ホスト名として追加
Host project1-github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_ed25519_github_project1
TCPKeepAlive yes
IdentitiesOnly yes
SSH エージェントに登録する
上記手順(SSH エージェントに登録する)を参考
指定するファイル名は id_ed25519_github_project1
Github に SSH公開鍵を設定する
別アカウントで上記手順(Github に SSH公開鍵を設定する)を実施
gitconfig の設定を追加する
project1 用の設定ファイルを用意
touch ~/.gitconfig_project1
[user]
name = example-user2 # ここを変更する
email = user2@example.com # ここを変更する
.gitconfig を編集して project1 用の設定ファイルを読み込む
以下の設定を追記する。
[includeIf "gitdir:~/workspaces/project1"]
path = ~/.gitconfig_project1
gitdir で指定したディレクトリに移動すると自動的に ~/.gitconfig_project1
を読み込むようになる。
別の ~/workspace/project_other
のディレクトリはデフォルトの設定が適用される。
git clone するときの工夫
通常であれば以下のように複製する。
git clone git@github.com:organization/repository-name.git
しかしこの設定だとSSH側がデフォルトの設定を読み込んでしまうため、以下のように工夫が必要。
git clone git@project-github.com:organization/repository-name.git
大きな違いはホスト名である通常だと github.com だが、project-github.com に変わっているのが分かる。
ホスト名の切り分けは「ssh-config で別ホスト名として追加」ですでに設定済み
ssh-config を確認するとホスト名のマッピングが設定されている。
ホスト名が github.com
は github.com
を参照して、project1-github.com
も同様に github.com
を参照するようになっている。しかし project1 では読み込む秘密鍵が別のものを設定されている。
これでGithubの別アカウントの切り替えを行っている訳である。
Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_ed25519_github
TCPKeepAlive yes
IdentitiesOnly yes
Host project1-github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_ed25519_github_project1
TCPKeepAlive yes
IdentitiesOnly yes
パスワード省略するなら以下の設定も必要だった。
UseKeychain yes
AddKeysToAgent yes