【說明】此文因樣式原因,圖片顯示不全,點擊圖片可查看完整圖片。
【場景】在bitbucket上,firstbit擁有版本倉庫(名為:prisshop);為方便開發,他邀請了jscon共同維護這個倉庫,可又不想讓jscon使用Fork方式,而是像這個倉庫的管理員那樣自由操作這個版本庫。
換言之,這個版本倉庫的擁有者是firstbit,管理者是firstbit與jscon。
>>操作<<
Fork方式是針對普遍的協作,如果你就是團隊中的人員,上面的方式無疑會拖項目的后腿。這就需要使用倉庫共享模式,讓項目擁有者把你加入團隊成員,這樣你就能直接把修改的內容push到項目中了。
為了方便以后的使用,應當使用SSH方式,這樣既可以不輸入密碼,也可以辨認提交的用戶名。
Bitbucket文檔里提供了一個非常詳盡的的教程:Set up SSH for Git。現翻譯如下:
(以下步驟同時適用於用戶firstbit與jscon)
1、生成公鑰與私密
首先就是你的電腦上創建一個ssh key。
關於SSH原理可參看阮一峰的博文《SSH原理與運用》,講的非常詳盡,推薦:
使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字符串,用戶用自己的私鑰加密后,再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。這種方法要求用戶必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen生成一個
我們打開Git Bash,然后輸入:
ssh-keygen
提示讓你輸入密鑰的地址與名字,默認是 ~/.ssh/id_rsa,這里我們使用 ~/.ssh/bitbucket_id_rsa,一路回車得到兩個文件(期間會讓你輸入passphass用來加密私鑰,這里為簡單起見就為空,所以直接回車):
黃底標記的文件是自動生成的密鑰,config文件需要自己創建
2、創建config文件
如上圖所示,在創建一個config文件(沒有后綴名),在里面輸入:
Host bitbucket.org IdentityFile ~/.ssh/bitbucket_id_rsa
注意第二行是有縮進(也可以是一個空格)是非常重要的,不要省略。里面的“~/.ssh/bitbucket_id_rsa”就是剛才生成的私鑰路徑。
3、更新.bashrc文件
SSH認證前提是開啟認證代理,這個代理的信息可通過以下命令查看:
$ eval 'ssh-agent' SSH_AUTH_SOCK=/tmp/ssh-GDRrxm2136/agent.2136; export SSH_AUTH_SOCK; SSH_AGENT_PID=5492; export SSH_AGENT_PID; echo Agent pid 5492;
每次開啟Git Bash窗口前需要開啟這個代理,顯得有些麻煩——一個有效的解決方法就是當啟動Shell時啟動開啟這個代理,這就用到吧.bashrc文件。
這個文件可以從 a post by Joseph M. Reagle Jr. from MIT 里Copy來,內容如下:
SSH_ENV=$HOME/.ssh/environment function start_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} echo succeeded chmod 600 ${SSH_ENV} . ${SSH_ENV} > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . ${SSH_ENV} > /dev/null #ps ${SSH_AGENT_PID} doesn't work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi
將上面的內容直接保存到 ~/.bashrc文件中即可。
注意:這個文件一定要保存到home路徑下,可以在shell 中輸入:
touch ~/.bashrc
創建之后,再用其他編輯器(比如Notepad++等)打開把上面的內容拷貝進去即可。
重啟Git Bash!
然后提示輸入passphase(只有第一次啟動輸入,之后的不會再輸入了)后,驗證在代理里注冊成功:
$ ssh-add -l 2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/manthony/.ssh/id_rsa (RSA)
由於默認是添加id_rsa的,而我們自己創建了一個bitbucket_id_rsa,所以得手動添加:
ssh-add bitbucket_id_rsa
4、在Bitbucket賬號中添加公鑰
1) 在Git Bash中使用cat命令獲得公鑰信息:
cat ~/.ssh/bitbucket_id_rsa.pub
將獲得的代碼復制下來,供后面使用:
2) 打開瀏覽器,進入主頁的賬號管理(Manage Account):
3) 點擊SSH Keys選項卡,粘貼入剛才復制的公鑰即可:
4) 回到命令行,輸入下面命令確認能與Bitbucket網站SSH通信:
ssh -T git@bitbucket.org
如果出現下面的信息:
conq: logged in as jscon.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
則說明你已經能用這個key與bitbucket網站SSH通信了。
5、更新遠程服務器
之前使用https跟遠程服務器通信,現在更新成ssh方式通信即可。Git工作原理還是一致的,只是格式上有所區別,主要體現在賬號出現的位置上:
比如clone:
git clone git@bitbucket.org:firstbit/prisshop.git
比如push:
先注冊遠程SSH服務器:
git remote add bitbucket git@bitbucket.org:firstbit/prisshop.git
再push即可:
git push bitbucket
6、邀請入伙
firstbit與jscon兩個人現在都按上面的五步分別在自己的機器上完成跟自己bitbucket賬號的SSH通信的配置后,之后一起協作就非常簡單了。
1) 首先,firstbit發起邀請。firstbit到版本庫首頁點擊發送請求按鈕,邀請jscon:
輸入用戶名jscon后,按share按鈕即可
同時在倉庫管理面板中定義jscon對該版本庫的使用權限:
2) jscon登錄自己的首頁,系統提示Inbox(收件箱)收到firstbit的邀請信:
現在jscon就可以在自己的機器上管理prisshop版本倉庫了(就像自己創建的版本倉庫那樣,唯一的區別是該版本的所有權歸firstbit)。
【后記】好久沒有在cnblogs上面寫博客了,因為去年整了一個wordpress(http://www.janscon.com),基本在上面發的。
另外有微博 http://weibo.com/boychenney 歡迎關注。