Closed3

いつも忘れるGit-Githubの設定(Mac)

Masayuki TsujiMasayuki Tsuji

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_githubid_ed25519_github.pub
.pub が 公開鍵である。

ssh-config の設定

config ファイルがなかったら作成する

touch ~/.ssh/config
~/.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
~/.gitconfig
[user]
	name = example-user # ここを変更する
	email = user@example.com  # ここを変更する
[credential]
	helper = osxkeychain

# ここからはお好みの設定
[fetch]
	prune = true 
[push]
	autoSetupRemote = true

参考

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
https://qiita.com/blueray777/items/78eb5983997e4c94e590

Masayuki TsujiMasayuki Tsuji

複数アカウントの考慮

別アカウント用の秘密鍵と公開鍵を生成

上記手順(Macで秘密鍵と公開鍵を生成する)を参考

ファイル名は id_ed25519_github_project1 名を設定。

ssh-config で別ホスト名として追加

~/.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
~/.gitconfig_project1
[user]
	name = example-user2 # ここを変更する
	email = user2@example.com  # ここを変更する

.gitconfig を編集して project1 用の設定ファイルを読み込む

以下の設定を追記する。

~/.gitconfig
[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.comgithub.com を参照して、project1-github.com も同様に github.com を参照するようになっている。しかし project1 では読み込む秘密鍵が別のものを設定されている。

これでGithubの別アカウントの切り替えを行っている訳である。

~/.ssh/config
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
Masayuki TsujiMasayuki Tsuji

パスワード省略するなら以下の設定も必要だった。

~/.ssh/config
UseKeychain yes
AddKeysToAgent yes
このスクラップは2023/04/22にクローズされました