複数のgithubアカウントを同じコンピュータ上に設定する(repo URLを変更せずに)


課題
  • つのコンピュータから2つの異なるgithubアカウントを使用する必要があります.
  • アカウントを切り替えるたびにsshキーを設定する必要はありません.
  • repoのsshアドレスを編集する必要はありませんas suggested by a lot of online tutorials .
  • 解決策:1つのフォルダー内のすべての作業reposを置き、あなたのssh - configを条件付きで別のsshキーを使用して更新します.他のすべては、デフォルトのsshキーを使用します.
    GithubはSSH によるプロトコルRSA あなたのコンピュータを認証する暗号システム.新しいSSHキーを生成すると、秘密キーと公開キーが作成されます.あなたのGithubアカウントに公開キーを追加する必要がありますが、マシン上の秘密キーを残します.あなたはもっと読むことができますpublic-key cryptography here .
    あなたがすでに生成して、あなたのGTTHUBアカウントにあなたのSSHキーを加えたならば、skip this section .

    GTHUUBアカウントにSSHキーを生成して追加する。


    既存のキーのチェック
  • まず、端末に行くことによってマシンにSSHキーが存在するかどうかをチェックします.ls -al ~/.ssh . デフォルトでは、公開鍵のファイル名はid_rsa アンド・エンド.pub .
  • どのキーがどのアカウントに属していて、新しいキーから始めたいかわからない場合は、実行してキーを削除することができますssh-add -D 端末から.これは手動で追加されたキーを削除するので、問題に遭遇しているなら、これを見てくださいstackoverflow answer . あなたのsshキーが位置しているフォルダに行ってくださいopen ~/.ssh 端末から上書きする前にコピーを保存します.
  • 新しいキーの生成

  • ターミナルから
     ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "[email protected]"
    
    あなたが同じ名前の既存のキーを上書きするよう頼まれるならばy 上書きする場合.それを上書きしたくないならn そして、上記のコマンドを新しいファイル名で再入力します.ジャストチェンジid_rsa 好きにid_rsa_PERSONAL .
  • 安全なパスフレーズを入力します.これは2つの秘密鍵を生成しますid_rsa と公開鍵id_rsa.pub .
  • 公開鍵をコピーするid_rsa.pub 走ることでpbcopy < ~/.ssh/id_rsa.pub 端末から.また、実行してSSHキーディレクトリを開くことができますopen ~/.ssh , ドラッグid_rsa.pub コードエディターにファイルをコピーし、ファイルの内容をコピーします.

  • ブラウザから、右上隅からプロフィール画像をクリックしてあなたのGitHubアカウントの設定に移動します.


  • サイドバーのユーザー設定でSSH and GPG keys .


  • クリックNew SSH key

  • あなたのコピーされた公開鍵を「キー」フィールドにペーストして、それに「タイトル」分野で適当なタイトルを与えてください.

  • クリックAdd SSH key .
  • 上記の手順を繰り返して2番目のGithubアカウントの新しいキーを追加します.ちょうど別の名前を与えるようにしてくださいid_rsa_COMPANY .

    ssh設定の設定

  • From terminal, run cd ~/.ssh .
  • Check if a config file exists by running - ls config . If you see ls: config: No such file or directory , create a new config file by running touch config .
  • Open the config file by dragging it into your code editor.
  • Paste the following into the file:

      Host github.com
        HostName github.com
        User git
        IdentitiesOnly yes
        AddKeysToAgent yes
        UseKeychain yes
    
      Match Host github.com !exec "pwd | grep '/COMPANY' > /dev/null"
        IdentityFile ~/.ssh/id_rsa
    
      Match Host github.com exec "pwd | grep '/COMPANY' > /dev/null"
        IdentityFile ~/.ssh/id_rsa_$COMPANY
    
    Source 上記のスニペットに対して.
    設定UseKeychain yesにすると、パスフレーズをキーチェーンに格納します.exec "pwd | grep '/COMPANY' > /dev/null" 現在のフォルダが入れ子になっているかどうかを調べますCOMPANY フォルダ.それが使用されるならばid_rsa_$COMPANY SSHキーとデフォルトの1つ.〔1〕
  • その後、実行chmod 600 ~/.ssh/config .
  • ユーザーの設定nameとuser電子メール


    SSHキーを設定したので、まだユーザを設定する必要があります.nameとuserメール変数.これらは、コミットオブジェクトの作者とコミッタフィールドで何が終わるかを決定します.これを設定することなく、作業ディレクトリにプッシュすることができますが、あなたのコミットがあなたの仕事のメールと名前を持っている場合は.gitconfig ファイル.
  • あなたが存在するかどうかチェックしてください.gitconfig あなたのルートでls ~/.gitconfig . を持っていない場合はtouch ~/.gitconfig .
  • 作業ディレクトリに同じことをします.

  • 開ける.gitconfig あなたのルートと内部であなたの個人的なGitユーザー名と電子メールを加えます.また、includeIf gitに異なるものを使用するように指示するパス..gitconfig あなたの仕事のためにrepos.
    # ~/.gitconfig
    [user]
    email = [email protected]
    name = your-user-name
    [user]
    email = [email protected]
    name = your-user-name
    [includeIf "gitdir:~/PATH/TO/WORK/DIR/RELATIVE/TO/ROOT"]
        path = ~/PATH/TO/WORK/DIR/RELATIVE/TO/ROOT/.gitconfig
    

  • インサイド.gitconfig あなたの仕事ディレクトリで、あなたの仕事メールを加えて、ユーザー名を働かせてください.
    # ~/PATH/TO/WORK/DIR/RELATIVE/TO/ROOT/.gitconfig
    [user]
    email = [email protected]
    name = your-work-user-name
    
  • 現在、あなたは両方のGitアカウントをSSHで使うことができます、そして、あなたのコミットは著者のために正しいメールと名前を持ちます.
    注:詳細な内訳exec "pwd | grep '/COMPANY' > /dev/null" :pwd スタンドprint working directory . The | 左のコマンドの標準出力を受け取り、右のコマンドに標準入力としてパイプを入れます.grep プレーンテキストを検索します.> 前のコマンドの結果を右側のファイルにリダイレクトします./dev/null すべてのデータが捨てられる「ブラックホール」です.詳しく見る/dev/null here .
    それで、コマンドは基本的にあなたの現在の働くディレクトリを得るために言っていますCOMPANY nameを返し、返り値を破棄する.このコマンドの終了コードは、どのsshキーを使用するかを決定します.