(轉)windows一臺電腦新增多個git賬號
概述
電腦上已經配置了github的ssh連線。現在又有一個不同的git賬戶,也就是要在一臺電腦上配置兩個git賬號。
下面記錄一下我配置的方法。
取消git全域性配置
之前配置github的時候,用命令
git config --golbal user.name "XXX" git config --golbal user.email "[email protected]"
因為需要用到兩個git賬戶,所以針對之前配置的全域性配置就得取消。
命令如下:
#全域性配置賬戶已經移除 git config--global --unset user.name #檢視全域性使用者名稱 git config --global user.name #全域性配置郵箱已經移除 git config --global --unset user.email #檢視全域性郵箱 git config --global user.email
生成新的SSH KEYS
- 先用cd命令將當前目錄切換到~/.ssh目錄下
-
用ssh-keygen命令生成一組新的id_rsa_new和id_rsa_new.pub
生成方法用命令ssh-keygen -t rsa -C "[email protected]
,這裡確認之後和第一配置就有不同了。
第一次給github配置sshkey時,直接按回車,其餘什麼都不管。最後看生成的id_rsa檔案和id_rsa.pub檔案。
這次需要給這個生成的檔案起一個名,例如id_rsa_new
.步驟如圖中所示。
需要修改步驟1和步驟2 -
執行ssh-agent讓ssh識別新的私鑰
命令為下面兩步:
#Start the 'ssh-agent.exe' process eval $(ssh-agent -s) #install the SSH keys ssh-add ~/.ssh/id_rsa_new
- 配置多個賬戶的~/.ssh/config檔案檔案
# 該檔案用於配置私鑰對應的伺服器 # first user Host [email protected] HostName https://github.com User git IdentityFile ~/.ssh/id_rsa # second user Host [email protected] HostName https://code.aliyun.com User git IdentityFile ~/.ssh/id_rsa_new
把公鑰新增到SSH KEYS
方法為:
在github找到Settings->SSH and GPG keys。然後新增
測試是否成功
用命令ssh -T [email protected]
成功的話,會返回包含Hi XXXXX! You've successfully authenticated
的字串。
特別注意:github提交之後,contribution沒有提交記錄的小綠點問題
原因
這裡,因為取消了全域性的使用者名稱和密碼,在本地進行提交時,github不能將本地倉庫對應的提交者和遠端github賬號對應的使用者對應起來,所以就不記錄了。
可以通過在倉庫根目錄下git log
檢視提交記錄,會發現有一些提交使用者名稱和郵箱和GitHub的賬號不對應。
解決方法
為每個倉庫設定單獨的使用者名稱和密碼。方法如下:
# 1.進入到需要修改的倉庫中 git config user.name GitHub的使用者名稱 git config user.email GitHub的登入郵箱
檢視是否修改成功的方法:
在程式碼倉庫的.git目錄中
[core] [remote "origin"] [branch "master"] [user] name = 你的GitHub使用者名稱 email = 你的GitHub郵箱
如果你已經提交了程式碼才發現這個問題也是有補救辦法的。
1.在倉庫中根目錄新建一個shell指令碼,命名為1.sh,內容如下:
#!/bin/sh git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" = "之前不對應的郵箱" ]; then GIT_AUTHOR_NAME="對應的使用者名稱"; GIT_AUTHOR_EMAIL="對應的郵箱"; git commit-tree "[email protected]"; else git commit-tree "[email protected]"; fi' HEAD
2.然後執行1.sh
3.git log
檢視之前的記錄是否已經修改回來,正常的話應該都改回來了。
4.執行git push --force --tags origin 'refs/heads/*'
將修改推送到遠端