私のコンピュータから、私の実際の "仕事用"リポジトリと、git Hub上の個人用リポジトリの両方を操作しようとしています。
仕事用アカウントが最初に設定され、すべてが問題なく動作します。
私の個人アカウントは、私の個人リポジトリにプッシュするようには見えません。これは、別のアカウント/ Eメールで設定されています。
自分の仕事用の鍵を自分の個人用アカウントにコピーしようとしましたが、当然ながら鍵は1つのアカウントにしか添付できないため、エラーになります。
それぞれのgithubの認証情報から、両方のアカウントにプッシュ/プルするにはどうすればよいですか。
あなたがする必要があるのはあなたのSSH設定を複数のSSH鍵ペアで設定することだけです。
このリンクは簡単です(ありがとうエリック): http://code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net- 22574
SSHキーを生成する(Win/msysgit) https://help.github.com/articles/generating-an-ssh-key/
また、異なるペルソナを使用して複数のリポジトリを操作している場合は、個々のリポジトリのユーザー設定がそれに応じて上書きされていることを確認する必要があります。
ユーザー名、メールアドレス、GitHubトークンの設定 - 個々のリポジトリの設定を上書きする https://help.github.com/articles/setting-your-commit-email-address-in-git/
お役に立てれば。
注:gitから、リポジトリごとに異なる電子メールを使用する必要があるかもしれません。2.13:~/.gitconfig
にあるグローバル設定ファイルを以下のような条件を使って編集することでディレクトリごとにEメールを設定できます。
[user]
name = Pavan Kataria
email = [email protected]
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
そして、作業固有の設定〜/ work/.gitconfigは次のようになります。
[user]
email = [email protected]
コメントでこれを知らせてくれてありがとう@alexg。
HTTPSを使用する:
リモートURLをhttpsに変更します。
git remote set-url Origin https://[email protected]/USERNAME/PROJECTNAME.git
そしてあなたは行ってもいいです:
git Push
コミットがUSERNAMEによって実行されたように見えるようにするために、このプロジェクトでも ser.name および ser.email を設定できます。
git config user.name USERNAME
git config user.email [email protected]
形状に入る
別のgithub/bitbucket/whateverアカウントでgitリポジトリを管理するには、単に新しいSSHキーを生成する必要があります。
しかし、2番目のIDでリポジトリをプッシュ/プルする前に、形状を整える必要があります。典型的なid_rsa
とid_rsa.pub
キーペアでシステムがセットアップされていると仮定しましょう。現在、tree ~/.ssh
は次のようになっています
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
まず、そのキーペアに名前を付けます-descriptivenameを追加すると、どのキーがどのユーザー/リモートに使用されているかを覚えやすくなります
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
次に、 新しいキーペアを生成 –ここで、新しいキーにgithub-otheruser
という名前を付けます
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
ここで、tree ~/.ssh
を見ると、
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
次に、キー構成を定義する~/.ssh/config
ファイルをセットアップする必要があります。 適切な所有者読み取り/書き込み専用権限 で作成します
$ (umask 077; touch ~/.ssh/config)
お気に入りのエディターでそれを開き、次の内容を追加します
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
おそらく、プライマリgithub IDに関連付けられた既存のリポジトリがいくつかあるでしょう。そのため、「デフォルト」のgithub.com Host
は、mainuser
キーを使用するように設定されています。あるアカウントを別のアカウントに優先させたくない場合は、システム上のexistingリポジトリを更新して、更新されたssh構成を使用する方法を示します。
新しいSSHキーをgithubに追加します
github.com/settings/keys に移動して、新しいpublicキーを追加します
以下を使用して公開キーの内容を取得できます:githubにコピー/貼り付け
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
これで、新しいユーザーIDがすべて設定されました。以下に、その使用方法を示します。
作業の完了:リポジトリのクローン作成
では、これをどのように組み合わせてgitとgithubと連携させるのでしょうか?さて、鶏肉と卵がないとできないので、既存のレポのクローンを作成します。この状況は、職場の新しいgithubアカウントを持ち、会社のプロジェクトに追加された場合に当てはまる場合があります。
github.com/someorg/somerepo
がすでに存在し、それに追加されたとしましょう-クローニングは簡単です
$ git clone github.com-otheruser:someorg/somerepo.git
そのbolded部分mustは、~/.ssh/config
ファイルで設定したHost
名と一致する必要があります。 gitを対応するIdentityFile
に正しく接続し、githubで適切に認証します
片付け:新しいレポの作成
それでは、鶏肉と卵がないと食べられないので、セカンダリアカウントで新しいレポを公開することを検討します。この状況は、セカンダリgithubアカウントを使用してnewコンテンツを作成するユーザーに適用されます。
すでにローカルで少し作業を行っており、GitHubにプッシュする準備ができていると仮定しましょう。ご希望の場合は、私と一緒にフォローすることができます
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
identity を使用するようにこのレポを設定します
$ git config user.name "Mister Manager"
$ git config user.email "[email protected]"
最初のコミットを行います
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
git log を使用して、コミットが新しいIDが使用されたことを確認します。
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <[email protected]>
よし、GitHubにプッシュする時間です! githubは新しいレポについてまだ知らないので、まず github.com/new に移動して新しいレポを作成し、名前を付けますsomerepo
正しいID /資格情報を使用してgithubと「通信」するようにレポを構成するために、リモートを追加しました。新しいアカウントのgithubユーザー名がsomeuser
であると仮定します...
$ git remote add Origin github.com-otheruser:someuser/somerepo.git
そのbolded部分は絶対に重要であり、mustは定義したHost
と一致します~/.ssh/config
ファイル
最後に、レポをプッシュ
$ git Push Origin master
新しいSSH構成を使用するように既存のリポジトリを更新します
既にいくつかのレポのクローンを作成しているが、今は新しいSSH設定を使用したいとします。上記の例では、以前のid_rsa
/id_rsa.pub
キーペアをSSH構成ファイルのHost github.com
に割り当てることにより、既存のリポジトリをそのまま保持しました。これには何の問題もありませんが、少なくとも5つのgithub構成があり、そのうちの1つを「デフォルト」構成と考えるのは好きではありません。それぞれについて明確にしたいと思います。
これがある前に
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
これを更新します(boldの変更)
Host github.com-mainuserHostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
しかし、これは、github.com
リモートを使用する既存のリポジトリが、このIDファイルで機能しなくなることを意味します。しかし、心配しないでください、それは簡単な修正です。
既存のリポジトリを更新して新しいSSH構成を使用するには、リポジトリのgit構成ファイルを開いてURLを更新するだけです!
$ cd existingrepo
$ nano .git/config
リモートOriginフィールドを更新します(boldの変更)
[remote "Origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/Origin/*
それでおしまい。これで、Push
/pull
を思いのままにできます
SSHキーファイルパーミッション
公開キーが正しく機能しないという問題が発生した場合、SSHは、~/.ssh
ディレクトリと対応するキーファイルで許可されている file permissions で非常に厳しいです。
経験則として、すべてのディレクトリは700
であり、すべてのファイルは600
である必要があります-これは所有者が読み取り/書き込み専用であることを意味します-他のグループ/ユーザーは読み取り/書き込みができません
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
SSHキーの管理方法
接続するホストごとに個別のSSHキーを管理するため、1つのキーが侵害されても、そのキーを使用した他のすべての場所でキーを更新する必要はありません。これは、1億5,000万人のユーザーの情報が盗まれたという通知をアドビから受け取ったときのようなものです。今では、そのクレジットカードをキャンセルし、それに依存するすべてのサービスを更新する必要があります。
~/.ssh
ディレクトリは次のようになります。接続する各ドメインのフォルダーに、ユーザーごとに1つの.pem
キーがあります。 .pem
キーを使用するため、キーごとにoneファイルのみが必要です。
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
そして、ここに私の対応する/.ssh/config
ファイルがあります。明らかにgithubのものは、githubに関するこの質問に答えることに関連していますが、この答えは、任意の数のサービス/マシンでssh IDを管理する知識を身に付けることを目的としています。
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
PEMキーからSSH公開キーを取得する
上記のとおり、キーごとにoneファイルしかないことに気づきました。公開鍵を提供する必要がある場合、必要に応じて単純にgenerateします。
Githubがssh公開キーを要求した場合、このコマンドを実行して公開キーをstdoutに出力します–必要に応じてコピー/貼り付け
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
これは、キーをリモートマシンに追加するために使用するプロセスと同じです。 ssh-rsa AAAA...
値は、リモートの~/.ssh/authorized_keys
ファイルにコピーされます
id_rsa
/id_rsa.pub
キーペアをPEM形式に変換する
それで、あなたはあなたのキーファイルを飼いならし、いくつかのファイルシステムの残骸を削減したいですか?キーペアをsinglePEMに変換するのは簡単です
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
または、上記の例に従って、id_rsa -> github-mainuser
およびid_rsa.pub -> github-mainuser.pub
の名前を変更しました–そう
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
これが正しく変換されたことを確認するために、generated公開キーが古い公開キーと一致することを確認する必要があります。
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
github-mainuser.pem
ファイルができたので、古いgithub-mainuser
およびgithub-mainuser.pub
ファイルを安全に削除できます。PEMファイルのみが必要です。必要なときに公開鍵を生成するだけです^ _ ^
PEMキーを最初から作成する
秘密/公開キーのペアを作成し、thenを単一のPEMキーに変換する必要はありません。 PEMキーを直接作成できます。
newuser.pem
を作成しましょう
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
SSH公開鍵の取得は同じです
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
〜/ .ssh/configでgithub.comに異なるホストエイリアスを作成し、各ホストエイリアスに独自のsshキーを与えることで、混乱することなく複数のgithubアカウントを簡単に使用できます。これは、github.comが常にgitであるユーザーごとではなく、接続に使用していたsshキーによって区別されるためです。自分のホストエイリアスを使用して、リモートの発信元を設定するだけです。」
上記の要約は、下記のブログ投稿へのコメントのおかげです。
私はこの説明が最もわかりやすいと思いました。少なくとも2012年4月現在、私にとってはうまくいきます。
http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/
http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ での詳細はmishabaの仕事に非常にリンクされています私にとっても.
そのページから:
$ touch ~/.ssh/config
次に、そのファイルを次のように編集します(アカウントごとに1エントリ)。
#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-COMPANY
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_COMPANY
シェルスクリプトを使用して、 "アクティブ"にしたいアカウントに切り替えます。基本的には、最初からやり直して、1つのアカウントを正しく設定して機能させ、次にこれらのファイルを適切な接頭辞を付けた名前に移動します。それ以降は、コマンド "github"または "gitxyz"を使用して切り替えることができます。
# my github script
cd ~/.ssh
if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
;
else
echo "Error: missing new files"
exit 1
fi
# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"
rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"
ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config
git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"
git config --global github.token "whatever_it_is"
ssh-add -D
私はこれでうまくいった。適切な設定がないと(gitを使用しているため)、Xcodeで実行スクリプトを作成しました(Macユーザー向け)。
依存関係の後に配置されたスクリプトを実行します(シェルとして/ bin/kshを使用)。
if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
exit 1
fi
編集:以下の@naomikによるコメントに対処するために、新しいファイルの存在と古いファイルを/ tmpにコピーするテストを追加しました。
ありがとうuser1107028:
HTTPSを使用する:
リモートURLをhttpsに変更します。
git remote set-url Origin https://[email protected]/USERNAME/PROJECTNAME.git そして、行ってもいいです:
gitプッシュ
複数のgithubアカウントを使用するとき、これが最良の方法だと思いました。私は1つのアカウントだけを使うことはできません、それはちょうど可能ではありません、そして私は私がしたことに関係なくSSHを振る舞わせることができませんでした。 Idは答えを投票しましたが、私は十分なポイントを持っていません - 私は清潔で簡単な解決策を必要とする人々のためにこの単純な回避策を認めたいと思いました。それは初めてうまくいったし、私がもっと苦労する時間を節約した。
設定ファイルを開き、以下のコードを追加してください。 (アカウントに合わせて変更してください)
アカウント1
# account_1
Host gitlab.com-account_1
HostName gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_account_1
アカウント2
# Account2
Host gitlab.com-Account2
HostName gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_Account2
アカウント3
# Account_3
Host github.com-Account3
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_Account_3
次のようにリモートURLを追加します
アカウント1
git remote add Origin [email protected]_1:group_name/repo_name.git
アカウント2
git remote add Origin [email protected]:group_name/repo_name.git
アカウント3
git remote add Origin github.com-Account3:github_username/repo_name.git
IdentityFileの名前がsshキーの生成中に作成したものと同じであることを確認してください。
この答えは初心者(none-git gurus)に対するものです。私は最近この問題を抱えていましたが、たぶんそれが私にすぎませんでしたが、ほとんどの答えはgitの理解が必要です。このスレッドを含むいくつかのスタックオーバーフローの答えを読んだ後、GitHubアカウントを簡単に切り替えるために必要な手順があります(例:2つのGitHubアカウント、github.com/personal、 gitHub.com/work):
ls -al ~/.ssh
.pub
のファイルはsshキーなので、personal
アカウントとwork
アカウントには2つ必要です。 1つしかない場合、またはない場合は、他の方法で生成する時間を省略してください。ssh-keygen -t rsa -C "the copied email"
を実行すると、次のように表示されます。/.../.ssh/id_rsa_work
。パスワードを入力するか、単に無視するように入力してください。キーのランダムアート画像はで、その画像は次のようになります。行った。ls -al ~/.ssh
を実行すると、2つのsshキーが表示されます。pbcopy < ~/.ssh/id_rsa_work.pub
に置き換え、id_rsa_work.pub
をあなたが呼び出したものに置き換えます。id_rsa_work
の場合は、仕事用アカウントにログインしていることを確認してください]。グローバルgit設定を編集します。最後のステップは、グローバル設定ファイルがすべてのgithubアカウントを認識するようにすることです(いわば)。
このグローバルファイルを編集するにはgit config --global --edit
を実行します。これがvimを開いて使用方法がわからない場合は、i
を押して挿入モードに入り、次のようにファイルを編集してescを押して:wq
を押して挿入を終了します。モード:
[inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true
これで、リポジトリからプッシュまたはプルしようとしたときに、どのGitHubアカウントをこのリポジトリにリンクさせるのか、一度だけ確認するように求められます。ローカル設定はこのリンクを記憶し、グローバル設定は記憶しません。毎回グローバル設定を編集する必要なしに、異なるアカウントにリンクされている異なるリポジトリで。
混乱を避けるための、より簡単で簡単な修正.
Windowsユーザーが異なるプロジェクトに複数または異なるGitアカウントを使用するため。
次の手順に従ってください:[コントロールパネル] - [資格マネージャの検索]をクリックします。次に、[資格情報マネージャ] - > [Windows資格情報]に移動します。
それではGeneric Credentials Headingの下のgit:https // github.comノードを削除してください。
これにより、現在の認証情報が削除されます。今、あなたはそれがユーザ名とパスワードを尋ねるgit pullを通してどんなプロジェクトでも追加することができます。
他のアカウントで問題が発生した場合も、同じ手順を実行してください。
ありがとう
複数のアカウント用に複数のSSHキーを作成する以外に、同じアカウントの電子メールを使用して各プロジェクトにコラボレータを追加し、パスワードを永続的に保存することも検討できます。
#this store the password permanently
$ git config --global credential.helper wincred
私は複数のアカウントに異なるEメールを設定してから、同じユーザーとEメールを各アカウントに共同編集者の1人として入れました。これにより、SSHキーを追加したり、別のユーザー名に切り替えたりしないですべてのアカウントにアクセスし、認証のために電子メールを送信できます。
私はこの宝石が非常に有用であることがわかりました:sshwitch
https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch
SSHキーを消すのに役立ちます。最初にすべてをバックアップすることを忘れないでください。
また、コミットに正しいEメールアドレスが関連付けられていることを確認するために、〜/ .gitconfigファイルに正しいEメールアドレスがあることを確認しました。
最も簡単で直接的なアプローチ(私見) - 設定ファイルがないことで面倒なことはあまりない
別のSSHキーを作成するだけです。
新しい作業用GitHubアカウントを持っているとしましょう。新しいキーを作成してください。
sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`
今、あなたは古いものと新しいものを持っているはずです、それらを見るために、実行してください:
ls -al ~/.ssh
あなたは一度だけ上記を実行する必要があります。
これからは、2つを切り替えるたびに、ただ実行してください。
ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub
古いものに切り替えるには、もう一度実行します。
ssh-add -D
ssh-add ~/.ssh/<previous id_rsa>
各リポジトリの認証情報を使用して、Windows用にこれを考え出しただけです。
cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url Origin https://[email protected]/USERNAME/PROJECTNAME.git
資格情報のフォーマット。 https://github.com 。信任状ヘルパーに信任状のURLを伝えます。 'useHttpPath'は、信任状マネージャーに信任状用のパスを使用するように指示します。 useHttpPathが省略された場合、認証情報マネージャは https://github.com の認証情報を1つ保存します。それが含まれている場合は、クレデンシャルマネージャが複数のクレデンシャルを保存します。これが私が本当に望んでいたことです。
他の答えとは異なり、少数のステップを使用して2つの異なるgithub同じマシンからのアカウント、私にとっては2ステップで動作しました。
あなたがする必要があります:
1)~/.ssh
の下の各アカウントに対してSSHの公開鍵と秘密鍵のペアを生成し、
2)生成されたpublicキーをSettings
>> SSH and GPG keys
>> New SSH Key
の下のそれぞれのアカウントに追加します。
SSH公開鍵と秘密鍵のペアを生成するには、次のコマンドを使用します。
cd ~/.ssh
ssh-keygen -t rsa -C "[email protected]" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "[email protected]" -f "id_rsa_PERSONAL"
上記のコマンドの結果として、あなたのworkアカウント用にid_rsa_WORK
とid_rsa_WORK.pub
ファイルが作成され、あなたのためにid_rsa_PERSONAL
とid_rsa_PERSONAL.pub
が作成されます。personalaccount(例:github.com)。
作成したら、各パブリック(*.pub
)ファイルからコンテンツをコピーし、各アカウントに対して手順2を実行します。
PS:2つのアカウントのホスト名が異なる場合は、他の回答で説明したように、~/.ssh/config
ファイルの下に各gitアカウントのHostエントリを作成する必要はありません。
個人用と仕事用に2つの異なるアカウントを維持する必要はありません。実際、Githubはあなたが単一のアカウントを管理していることを勧め、両方をマージするのを助けます。
複数のアカウントを管理する必要がないと判断した場合は、下のリンクをたどってマージしてください。
https://help.github.com/articles/merging-multiple-user-accounts/
もう1つの簡単な方法は、GithubデスクトップでアカウントAを使用し、Github KrakenでアカウントBを使用しているときのように、複数のデスクトップアプリケーションを使用することです。
もしあなたが WSL をインストールしているのなら、WSL用とWindows用の2つの別々のgitアカウントを持つことができます。