注意 本人的博客都遷移到本人自己搭建的博客地址,通過此處可查看。
一、Git在服務器上
遠程倉庫時一個裸倉庫(bare repository):一個沒有當前工作目錄的倉庫,僅存放Git的數據,即工作目錄中的.git子目錄內的內容就是裸倉庫
1、協議
Git可以使用的協議有:本地傳輸、SSH協議、Git協議和HTTP協議(除了HTTP協議外,其他協議都需要在服務器端安裝並運行Git)。
1.1 本地協議
簡單的說就是硬盤上的另一個目錄,常見的是團隊成員對一個共享的文件系統有用訪問權限
①、克隆倉庫
git clone /opt/git/project.git
②、添加本地倉庫作爲現有Git項目的遠程倉庫
git remote add local_proj opt/git/project.git
③、優點:簡單、同時保留現存文件的權限和網絡訪問權限;缺點:難以控制從不同位置來的訪問權限,最主要的是訪問數據的速度慢。
1.2 SSH協議
最常用的一種Git傳輸協議,其原因:SSH協議也是唯一同時支持讀寫操作的網絡協議;SSH同時也是一個驗證授權的網絡協議;因爲普通,所以架設容易
①、克隆倉庫
git clone ssh://user@server/project.git
git clone user@server/project.git :不指名協議,Git默認SSH
②、優點:可以對網絡倉庫進行寫的權限;架設簡單;訪問的安全性可以保障,所有數據的傳輸都是加密和授權的;高效性,在傳輸之前會壓縮數據;缺點:不能進行匿名訪問,不利於開源項目
1.3 Git協議
包含在Git軟件包中的特殊守護進程;它監聽一個提供類似於SSH服務器的特點端口(9418),而無需任何授權。
1.4 HTTP/S協議
架設的簡便性:將Git的裸倉庫文件放在HTTP的根目錄下,配置一個特定的post-update掛鉤(hook)就OK了。
①、通過HTTP對倉庫進行讀取:
cd /var/www/htdocs
git clone --bare /path/to/git_prj gitprj.git
cd gitprj.git
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update
git update-server-info:確保HTTP的正常工作
②、優點:易於架設,可以加密傳輸內容;使用特定簽名的SSL證書;一個額外的好處--HTTP是一個常見的協議,以至於企業級防火牆都允許其端口的通信;缺點:客戶端效率較低,克隆或者下載倉庫內容花費時間較多,網絡開銷大,常被稱爲傻瓜(dumb)協議。
二、在服務器上部署Git
在架設之前首先把現有倉庫導出爲一個裸倉庫:git clone --bare prjName prjName.git,並且prjName.git的目錄中已經有一份Git目錄數據的副本。即:cp -Rf prjName/.git prjName.git
2.1 將裸倉庫移到服務器上
訪問:scp -r prjName.git [email protected]:/opt/git
讀寫:git clone [email protected]:/opt/git/prjName.git
有讀寫就有推送權限:git init --shared:Git會自動修改倉庫目錄的組權限爲可寫。
注意:若是在一個不公開的項目上合作,僅僅需要一個SSH服務器和裸倉庫就OK了。
2.2 SSH連接
①、爲每個人建立一個賬戶,反覆使用adduser添加用戶設置密碼——不可取。
②、在主機上建立一個Git賬戶,讓每個需要寫權限的人發送一個SSH公鑰,然後加入git賬戶的~/.ssh/authorized_keys文件;
③、讓SSH服務器通過某個LDAP服務或者已經設定好的集中授權機制,進行授權。
三、生成SSH公鑰
SSH公鑰默認存儲在賬戶的主目錄下的~/.ssh目錄,查看是否有id_dsa或者id_rsa,有.pub後綴的文件就是公鑰,另一個文件這是密鑰。
3.1 創建SSH公鑰:ssh-keygen
將公鑰發給需要的人就OK。
公鑰的內容: