1. 程式人生 > >Centos 7.X 部署基於Git&Gitolite的分布式版本控制系統

Centos 7.X 部署基於Git&Gitolite的分布式版本控制系統

git gitolite 版本控制系統 甘兵

1、簡介

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的分布式版本控制系統