Centos 7.X 部署基於Git&Gitolite的分布式版本控制系統
1.1 git 簡介
Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的誌願者參與的,這麽多人在世界各地為Linux編寫代碼。2005年,為了解決Linux系統的源碼開發管理這一問題,Linus花了兩周時間自己用C寫了一個分布式版本控制系統,這就是Git,目前世界上最先進的分布式版本控制系統。
2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等,Git迅速成為最流行的分布式版本控制系統。
1.2 gitolite簡介
如果不是要和他人協同開發,Git 根本就不需要架設服務器。Git 在本地可以直接使用本地版本庫的路徑完成 git 版本庫間的操作。但是如果需要和他人分享版本庫、協作開發,就需要能夠通過特定的網絡協議操作 Git 庫。Git 支持的協議很豐富,架設服務器的選擇也很多,不同的方案有著各自的優缺點。在Git服務管理工具這個領域,主要有三種流行的方案,它們分別是:
Gitosis - 輕量級, 開源項目,使用SSH公鑰認證,只能做到庫級的權限控制。目前項目已經停止開發,不再維護。
Gitolite - 輕量級,開源項目,使用SSH公鑰認證,能做到分支級的權限控制。
Git + Repo + Gerrit - 超級重量級,集版本控制,庫管理和代碼審核為一身。可管理大型及超大型項目。
Gitolite 是一款 Git 授權管理工具,那麽它具體是怎樣的呢?我們姑且從它的幾個特性來簡單了解下:
在服務器端,使用一個 unix 用戶作為遠程訪問的對象
為多用戶提供訪問權限,但他們不是真正的用戶,不會獲得 shell 權限
控制對多個 git 倉庫的訪問,讀訪問被repo層控制,寫訪問在 branch/tag/file/directory 層控制,包括誰能夠 rewind,create 以及 delete branches/tags
能夠不經過root允許進行安裝,假設git和perl已經被安裝了 (這句話不懂,暫時直譯過來)?
認證通常采用sshd,但是也可以使用httpd
能夠簡化你的倉庫路徑,類似 GitHub 那樣,例如:git@your_server.com:your-project.git
(下面介紹怎麽安裝Git服務器gitolite,以及怎麽建立倉庫、添加用戶等操作,本篇文章不會介紹太多的Git本身的命令,有興趣的大家可以自己去網上搜搜)
2、安裝git
2.1 安裝基礎依賴包(在git服務器上操作)
#yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel |
2.2 安裝git(在git服務器上操作)
#yum -y install git |
2.3 安裝openssl-server(在git服務器上操作)
( ssh訪問需要使用openssh-server)
#yum -y install openssh-server |
2.4 添加git管理用戶和組(在git服務器上操作)
###添加git組 #groupadd git ###添加git用戶並把它加入git組 #adduser -s /bin/bash -g git git ###設置git的密碼(我隨便設置密碼為123456,實際中大家把這個密碼設置得復雜點,安全) #passwd git |
2.5 生成ssh key(在git服務器上操作)
git需要使用ssh訪問,需要生成一組ssh key,切換到git用戶下操作:
#su git $ ssh-keygen -t rsa $cd .ssh/ $ cp id_rsa.pub authorized_keys |
3、安裝gitolite
3.1 在git用戶下創建bin目錄(在git服務器上操作)
$ pwd /home/git/ $ mkdir bin |
3.2 從遠端克隆gitolite(在git服務器上操作)
$ git clone git://github.com/sitaramc/gitolite $ ls |
3.3 安裝gitolite至bin目錄(在git服務器上操作)
$ gitolite/install -to $HOME/bin $ cd bin/ $ ls $ mv .ssh/authorized_keys ~/git.pub $ ls $cd /home/git/ $ ~/bin/gitolite setup -pk ~/git.pub $ ls bin gitolite git.pub projects.list repositories $ls repositories ###可以用git用戶ssh到127.0.0.1進行驗證一下,可以看到下面的正常驗證顯示 $ ssh [email protected] |
gitolite安裝完成,從上面ls命令查到看,成功安裝gitolite後,會自動生成一個“repositories”目錄,此目錄下面有兩個默認的倉庫。一個是testing.git用來測試、另一個gitolite-admin.git就是用來管理git用戶和版本庫,所以需要創建一個管理員git用戶來管理。
3.3 生成管理員倉庫,不需要輸入密碼(在git服務器上操作)
$ git clone [email protected]:gitolite-admin ###上條命令執行後,會在當前目錄下面生成gitolite-admin目錄 $ ls $ cd gitolite-admin/ $ ls $ls conf/ $ls keydir/ |
說明:進入管理員倉庫後,可以看到“conf”、“keydir”這兩個目錄。
conf/gitolite.conf:是添加用戶、倉庫的配置文件
keydir:是放對應用戶的公鑰目錄
4、git客戶端驗證
4.1 centos客戶端驗證(在centos客戶端上操作)
###比如我用另一臺centos服務器做為客戶端,在上面創建用戶ganbing做為git客戶端的用戶 #yum -y install git #useradd ganbing #passwd ganbing ###切換ganbing用戶,生成公鑰,並把公鑰拷貝到git服務器的"gitolite-admin"倉庫中 # su - ganbing $ ssh-keygen -t rsa #scp .ssh/id_rsa.pub git@git服務器IP:gitolite-admin/keydir/ganbing.pub |
接下來幾步很重要,大家要看清楚在哪裏操作,到了下面的操作別搞混了,看清楚我寫的在哪操作
添加倉庫和用戶(在git服務器上操作):
###在git服務器keydir目錄中可以看到,git客戶端ganbing的公鑰已經拷貝過來了: $ ls keydir/ ###下面配置gitolite.conf,添加一個倉庫“gb”,並把管理員git用戶、git客戶端用戶ganbing配置為可讀寫這個gb倉庫: $ vim conf/gitolite.conf 上面的含義是: 第1個repo,默認的管理員倉庫gitolite-admin,用戶git具有(讀寫)RW權限,和強制更新(+)的權限。 第2個repo,默認的測試倉庫testing,@all所有用戶都具有RW+權限。 第3個repo,我手動添加了一個gb倉庫,用戶git、ganbing具有(讀寫)RW權限。 更多參數說明在此不做詳細的介紹,這些參數都很簡單,還可以定義組,大家上網自行查閱資料。 |
將配置推送到gitolite服務器(在git服務器上操作)
走到這一步了,你是不是以為已經結束了,可以在客戶端git clone了呢。其實還沒有,我們剛才在gitolite.conf配置中添加了gb倉庫,不是保存這個文件就會生效。我們需要提交才能生效:
###先在git服務器上也配置兩個全局變量,名字自己隨便定義就行,就是別和今後的git客戶端重名就行: $git config --global user.email "[email protected]" $git config --global user.name "git" ###提交修改,所有的提交修改都是下面三條命令,以後添加新的倉庫和git用戶也是用下面這三條命令,還有在客戶端上提交也是這三條命令,一定要記清楚: $ git add . $ git commit -m "add new user and new repo's gb" $ git push origin master ###提交完之後,進入repositories目錄,查看倉庫中是不是多了一個gb.git: $ cd repositories/ $ ls |
最後,我們回到centos客戶端(在centos客戶端上操作)
###第一次使用也需要表明身份,註意切換用戶: $git config --global user.email "[email protected]" $git config --global user.name "ganbing" ###測試git clone gb倉庫: $ cd /home/ganbing/ $ git clone git@git服務器IP:gb 提示:上面的警告不用管,它告訴你克隆的一個空的倉庫,因為gb倉庫本身啥也沒有 ###ls查看gb倉庫已經clone過來了: $ls ###進入gb倉庫,你添加個a.txt文件提交上去: $ touch a.txt $ git add . $ git commit -m "add file a.txt" $$ git push origin master |
如果大家的操作跟我上面一樣,說明用centos客戶端驗證是OK的。畢竟沒有誰整天用centos系統,我想大家多數都用windows系統,下面我就以windows系統來驗證一下。
4.2 windows客戶端驗證
首先,你的電腦上要安裝git程序,在這裏我就不演示如何安裝git,在D盤新建一個文件夾 testgit,進入這個文件夾,右鍵選擇Git Bash,如下圖(在windows客戶端上操作):
生成ssh公鑰,並把公鑰拷貝到git服務器,當然你把公鑰給git服務器的管理員也可以(在windows客戶端上操作):
$ ssh-keygen -t rsa 如上圖所示:我這臺電腦已經生成過,所以我輸入n,這裏也指明公鑰的路徑((/c/Users/Administrator/.ssh/id_rsa)) ###進入.ssh目錄,把id_rsa公鑰拷貝到服務器,並把公鑰重命名為windows_ganbing.pub: $ cd /c/Users/Administrator/.ssh/ $ scp id_rsa.pub [email protected]:gitolite-admin/keydir/windows_ganbing.pub 提示:如果這臺windows是公司的開發人員,他需要把公鑰發給git服務器管理員,畢竟不給告訴其他人git服務器管理的密碼。 |
然後,進入git服務器(在git服務器上操作)
###先在服務器上查看windows_ganbing.pub公鑰拷貝過來了沒有: $ cd /home/git/gitolite-admin/keydir/ $ls ###配置gitolite.conf文件,把winows_ganbing用戶加進來: 提示:上面用戶之間用空格隔開就可以,你的公鑰文件是什麽名字,這裏就輸入什麽名字 ###提交修改,上面說過了,用3條命令搞定: $ git add . $ git commit -m "add user windows_ganbing" $ git push origin master |
最後,git clone進行驗證(在windows客戶端上操作):
還是進入D盤-testgit目錄,打開Git Bash:
$ git clone git@git服務器IP地址:gb ###檢查gb倉庫是否clone過來了: |
如上圖所示,我們在windows客戶端也測試成功,大家可以按我的步驟方法試一下,有問題的朋友可以留言一起探討!!!
至於用MAC本客戶端我就不演示了,我也沒有買MAC本,哈哈。。。。
Centos 7.X 部署基於Git&Gitolite的分布式版本控制系統