多個git帳號之間的切換

多個git帳號之間的切換

DEC 7TH, 2014 | COMMENTSgit

作過不少遍了,卻老是記不住,這回從頭來描述一下。github

 

注意clone的時候  有2種  https和SSH  是有區別的bash

 

 

  1. 使用https方式的git地址很是直接(https://xxx.oschina.net/xxx.git),基本上什麼都不須要配置,無論是git bash仍是tortoisegit都能完美使用,可是每次須要鏈接遠程服務器時,都要提示我輸入用戶名與密碼,很是不爽;
  2. 使用ssh方式的git地址很是爽快(git@git.oschina.net:xxxx/xxx.git),不須要輸入密碼,可是須要配置。

 

介紹

所謂多個git帳號,可能有兩種狀況:服務器

  • 我有多個github的帳號,不一樣的帳號對應不一樣的repo,須要push的時候自動區分帳號app

  • 我有多個git的帳號,有的是github的,有的是bitbucket的,有的是單位的gitlab的,不一樣帳號對應不一樣的repo,須要push的時候自動區分帳號ssh

這兩種狀況的處理方法是同樣的,分下面幾步走:gitlab

處理

  • 先假設我有兩個帳號,一個是github上的,一個是公司gitlab上面的。先爲不一樣的帳號生成不一樣的ssh-keyfetch

    ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -c xxx@gmail.comurl

    而後根據提示連續回車便可在~/.ssh目錄下獲得id_rsa_work和id_rsa_work.pub兩個文件,id_rsa_work.pub文件裏存放的就是咱們要使用的keyspa

    ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -c xxx@gmail.com

    而後根據提示連續回車便可在~/.ssh目錄下獲得id_rsa_github和id_rsa_github.pub兩個文件,id_rsa_gthub.pub文件裏存放的就是咱們要使用的key

  • 把id_rsa_xxx.pub中的key添加到github或gitlab上,這一步在github或gitlab上都有幫助,再也不贅述

  • 編輯 ~/.ssh/config,設定不一樣的git 服務器對應不一樣的key

1
2
3
4
5
6
7
8
9
10
11
12
 
  1. # Default github user(first@mail.com),注意User項直接填git,不用填在github的用戶名

  2. Host github.com

  3. HostName github.com

  4. User git

  5. IdentityFile ~/.ssh/id_rsa_github

  6.  
  7. # second user(second@mail.com)

  8. # 建一個gitlab別名,新建的賬號使用這個別名作克隆和更新

  9. Host 172.16.11.11

  10. HostName 172.16.11.11

  11. User work

  12. IdentityFile ~/.ssh/id_rsa_work

編輯完成後能夠使用命令 ssh -vT git@github.com 看看是否是採用了正確的id_rsa_github.pub文件

這樣每次push的時候系統就會根據不一樣的倉庫地址使用不一樣的帳號提交了

  • 從上面一步能夠看到,ssh區分帳號,其實靠的是HostName這個字段,所以若是在github上有多個帳號,很容易的能夠把不一樣的帳號映射到不一樣的HostName上就能夠了。好比我有A和B兩個帳號, 先按照步驟一輩子成不一樣的key文件,再修改~/.ssh/config 內容應該是這樣的。
1
2
3
4
5
6
7
8
9
10
11
12
 
  1. # Default github user(A@mail.com),注意User項直接填git,不用填在github的用戶名

  2. Host A.github.com

  3. HostName github.com

  4. User git

  5. IdentityFile ~/.ssh/id_rsa_github_A

  6.  
  7. # second user(B@mail.com)

  8. # 建一個gitlab別名,新建的賬號使用這個別名作克隆和更新

  9. Host A.github.com

  10. HostName github.com

  11. User git

  12. IdentityFile ~/.ssh/id_rsa_github_B

同時你的github的repo ssh url就要作相應的修改了,好比根據上面的配置,原鏈接地址是:

git@github.com:testA/gopkg.git

那麼根據上面的配置,就要把github.com換成A.github.com, 那麼ssh解析的時候就會自動把testA.github.com 轉換爲 github.com,修改後就是

git@A.github.com:testA/gopkg.git

直接更改 repo/.git/config 裏面的url便可

這樣每次push的時候系統就會根據不一樣的倉庫地址使用不一樣的帳號提交了

一些題外話

我有一個repo,想要同時push到不一樣的倉庫該如何設置?

很簡單, 直接更改 repo/.git/config 裏面的url便可,把裏面對應tag下的url增長一個就能夠了。例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
  1. [remote "GitHub"]

  2. url = git@github.com:elliottcable/Paws.o.git

  3. fetch = +refs/heads/*:refs/remotes/GitHub/*

  4. [branch "Master"]

  5. remote = GitHub

  6. merge = refs/heads/Master

  7. [remote "Codaset"]

  8. url = git@codaset.com:elliottcable/paws-o.git

  9. fetch = +refs/heads/*:refs/remotes/Codaset/*

  10. [remote "Paws"]

  11. url = git@github.com:Paws/Paws.o.git

  12. fetch = +refs/heads/*:refs/remotes/Paws/*

  13. [remote "Origin"]

  14. url = git@github.com:Paws/Paws.o.git

  15. url = git@codaset.com:elliottcable/paws-o.git

上面這個當即就是有4個遠端倉庫,不一樣的tag表示不一樣的遠端倉庫,最後的Origin標籤寫法表示默認push到github和codaset這兩個遠端倉庫去。固然,你能夠本身隨意定製tag和url

我有一個github的repo,clone沒有問題,push的時候老是報錯:error: The requested URL returned error: 403 while accessing xxx

這個問題也困擾了我一段時間,後來發現修改 repo/.git/config 裏面的url,把https地址替換爲ssh就行了。

例如

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git

替換爲

url=ssh://git@github.com/derekerdmann/lunch_call.git
相關文章
相關標籤/搜索