標籤:github git
最近這段時間使用github,有時在公司辦公,想要用git提交代碼到自己的github倉庫,提交是顯示的作者是自己在公司的賬戶,而不是自己的github賬戶,這就相當於提交到github的代碼不是自己本人提交的,是其他人提交的。
現在的情況是這樣的:在公司我們也是使用git來管理代碼,我們公司內部有自己的git倉庫(B),提交代碼時用的賬戶就是公司的oa帳號(A)。而我自己有時候在家裡做開發的時候,就是用自己註冊github賬戶(C)提交代碼到自己賬戶下的github倉庫(D)。現在有時候在公司辦公的時候,寫一些demo或者好的代碼時,想提交到自己的github賬戶(D),由於用的是公司的電腦,提交到D時顯示的使用者名稱是A。
總結一下就是,如何在同一台電腦使用不同的帳號提交到同一個github倉庫,這裡我希望是用C賬戶提交到D倉庫。而不是A賬戶提交到D倉庫。
我查了兩個連結資料:
1.如何在同一台電腦上使用兩個github賬戶:http://www.tuicool.com/articles/zqa6Rz
2.解決cygwin下的“Could not open a connection to your authentication agent.”:http://www.cnblogs.com/cheche/archive/2011/01/07/1918825.html
根據上面所說的我給自己的github賬戶配置了另外一個sshkey,用的是自己的私人郵箱產生的(之前已經在github上配置過了一個sshkey,用的是公司的郵箱)。
1:為工作帳號產生SSH Key
$ ssh-keygen -t rsa -C "your-email-address"#儲存key的時候,不要覆蓋現有的id_rsa,使用一個新的名字,比如id_rsa_work
2:把id_rsa_work.pub加到你的work帳號上
3:把該key加到ssh agent上。由於不是使用預設的.ssh/id_rsa,所以你需要顯示告訴ssh agent你的新key的位置
$ ssh-add ~/.ssh/id_rsa_work# 可以通過ssh-add -l來確認結果
4:配置.ssh/config
$ vi .ssh/config# 加上以下內容#default githubHost github.com HostName github.com IdentityFile ~/.ssh/id_rsaHost github_work HostName github.com IdentityFile ~/.ssh/id_rsa_work
5:這樣的話,你就可以通過使用github.com別名github_work來明確說你要是使用id_rsa_work的SSH key來串連github,即使用工作帳號進行操作。
#本地建庫$ git init$ git commit -am "first commit‘ #push到github上去$ git remote add origin [email protected]_work:xxxx/test.git$ git push origin master
如果出現問題“Could not open a connection to your authentication agent”,需要需要ssh-agent啟動bash,或者說把bash掛到ssh-agent下面,即執行以下兩個命令:
$ ssh-agent bash --login -i
$ ssh-add
【ssh-agent介紹】
ssh-agent就是一個管理私密金鑰的代理,受管理的私密金鑰通過ssh-add來添加,所以ssh-agent的用戶端都可以共用使用這些私密金鑰。
好處1:不用重複輸入密碼。
用 ssh-add 添加私密金鑰時,如果私密金鑰有密碼的話,照例會被要求輸入一次密碼,在這之後ssh-agent可直接使用該私密金鑰,無需再次密碼認證。
好處2:不用到處部署私密金鑰
假設私密金鑰分別可以登入同一內網的主機 A 和主機 B,出於一些原因,不能直接登入 B。可以通過在 A 上部署私密金鑰或者設定 PortForwarding 登入 B,也可以轉寄認證代理串連在 A 上面使用ssh-agent私密金鑰登入 B。
[email protected] $ ssh -A HOST_A
[email protected]_A $ ssh HOST_B
[email protected]_B $
我的執行情況是這樣的:
執行完紅色的三步之後,.ssh檔案夾目錄下的情況:
把id_rsa_king4github.pub的sshkey添加到自己的github賬戶中:
這裡有兩個ssh,一個在公司電腦用公司郵箱產生的,一個是在公司電腦用私人郵箱產生的。
接著繼續操作:
這樣如果我訪問時使用的是github.com,就是使用公司郵箱產生的ssh(E)訪問github,如果我使用github_king,即使用的是私人郵箱產生的ssh(F),也就是我github賬戶註冊的郵箱。
情況也確實如此這樣,這樣去訪問我的github倉庫使用的是不同的ssh。這樣你或許會覺得,如果使用ssh(F)訪問gitghub,那麼提交代碼時就是我的私人賬戶提交的。可是事實並不是這樣的,提交之後顯示的作者還是公司的帳號,名稱是kingson.wu(G),而不是我的私人賬戶名稱kingson4wu(H)。
原因就是因為我設定的全域使用者和郵箱都是公司的,這個配置在檔案.gitconfig中:
開啟之後:
平時在公司工作時都是用公司的帳號提交,不太有必要改這裡的配置。
所以如果要使用自己的私人帳號提交代碼的話,要重新設定user和email(不要設定全域),進入本地的某個git repository中,執行以下命令:
git config user.name "kingson4wu"
git config user.email "[email protected]"
這樣提交代碼到自己的github倉庫之後,顯示的提交作者就是kingson4wu,即自己提交的。
現在有幾個問題:
(1)如果使用私人郵箱產生的ssh(F)來訪問github,是不是可以不用執行命令git config user.email "[email protected]"?
(2)如果使用公司郵箱產生的ssh(E)來訪問github,是不是如果執行
git config user.name "kingson4wu"
git config user.email "[email protected]"
這兩條命令,則提交代碼時顯示的名稱是kingson4wu,而且是自己提交的?
帶著這幾個問題我做了幾個實驗(各種情形),結論如下:
問題(1),提交代碼之後顯示的名稱確實是kingson4wu,但是遺憾的是,名稱雖然是kingson4wu,但是卻顯示是別人提交的。原因還是因為全域的郵箱是公司的郵箱,我github賬戶註冊的是我的私人郵箱。所以(1)是不行的。
問題(2),提交代碼之後顯示的名稱確實是kingson4wu,顯示的竟然是自己提交的,不是別人提交的。
或許這時你會想到其他幾種情況結果會是怎樣的,好吧,我都做了實驗。最終的結論如下:
無論你是使用ssh(E),還是ssh(F),其實如果想要是自己私人的賬戶提交,都要重新設定name和email,不同的只是使用不同的ssh訪問github而已。
如果只設定了name還是不行,提交之後名稱雖然是對的,但是仍然顯示是別人提交的。
想要看看是不是自己提交的,看看提交者是不是自己github的頭像,或者是自己的今天的commit數有沒有增加即可。
最終的總結就是:
不用設定多個私人的ssh(F),只需要從github拉代碼下來,進入git倉庫,執行
git config user.name "kingson4wu"
git config user.email "[email protected]163.com"
這兩條命令即可。
如何在同一台電腦使用不同的帳號提交到同一個github倉庫