GitHubのユーザを原始的に切り替える

諸々の事情があってGitHubのユーザを切り替えたくなる場合もあるだろう。本来であれば同一アカウントでコミットしていくべきではあるけど。そこで原始的な方法でそれらを解決する。スクリプトで自動的に切り替えるという方法もあるが今回は触れない。

開発環境。

% system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro16,3
      Processor Name: Quad-Core Intel Core i5
      Processor Speed: 1.4 GHz
      Number of Processors: 1
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 6 MB
      Hyper-Threading Technology: Enabled
      Memory: 16 GB
      System Firmware Version: 1554.100.64.0.0 (iBridge: 18.16.14556.0.0,0)

% sw_vers
ProductName:	macOS
ProductVersion:	11.3
BuildVersion:	20E232

% zsh --version
zsh 5.8 (x86_64-apple-darwin20.0)

% git --version
git version 2.31.1

% ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3

まずはGitHubからSSHでクローンする。SSHを使うことでユーザを切り替えることができるのでHTTPSは使わない。また、クローンする前に.ssh/configに切り替えるユーザを定義しておく。もちろんGitHubアカウントにそれぞれの秘密鍵を登録しておくこと。

% vi .ssh/config

Host github_w
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_work
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
AddKeysToAgent yes

Host github_p
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_private
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
AddKeysToAgent yes
% git clone git@github_p:ktnkk/cemewords.git

クローンしたらまず最初に下記の設定を行う。この作業を忘れるとグローバルに設定したアカウントでコミットがされるので注意。

// 対象のプロジェクトに移動
% cd IdeaProjects/tipswatch

// 必ず--localを指定
% git config --local user.name "ktnkk"

% git config --local user.email "oo@kiki.ooo"

% git config --local url."github_p".insteadOf "git@github.com"

// SSHでURLを登録。その際、ホスト名を対象のものに設定
% git remote set-url origin git@github_p:ktnkk/tipswatch.git

// 確認
% git remote -v
origin	git@github_p:ktnkk/tipswatch.git (fetch)
origin	git@github_p:ktnkk/tipswatch.git (push)

// もしGPG署名をオフにしたい時
% git config --local commit.gpgsign false

// GPG署名をオンにしたい時
% git config --local commit.gpgsign true

% git config --local gpg.program /usr/local/bin/gpg

% git config --local user.signingkey "GPGの公開鍵"

-lオプションで一覧を最終確認。

% git config --local -l
remote.origin.url=git@github_p:ktnkk/tipswatch.git
user.name=ktnkk
user.email=oo@kiki.ooo
url.github_p.insteadof=git@github.com
commit.gpgsign=false

いちいちコマンドを打っていくのが面倒であれば-eオプションでエディタ編集が可能。まあ、vi .git/configでファイルを直接編集しても良いが。

$ git config --local -e

[remote "origin"]
        url = git@github_p:ktnkk/tipswatch.git
[user]
        name = ktnkk
        email = oo@kiki.ooo
[url "github_p"]
        insteadOf = git@github.com
[commit]
        gpgsign = false

To comment

@TOC
閉じる