1. 程式人生 > >Centos下安裝gitolite+git

Centos下安裝gitolite+git

一直以來我都是用SVN的,但最近做迭代開發、多分支時,發現SVN使用起來極不方便。因此打算換成git做原始碼管理。git的理論以及特性本文就不做講解了,本主主要講解怎麼安裝,配置git、以及git許可權管理服務gitolite.

組網結構

式

git伺服器是用於儲存git倉庫的伺服器,所有git使用者都此伺服器上倉庫中clone倉庫到本地,也可以將程式碼提交到git伺服器上的倉庫中。簡單的說,此伺服器類似於svn伺服器,做共享資料用。git本身是沒有許可權管理的。若要像SVN那樣管理許可權,需要搭建gitolite,因此git許可權管理伺服器用於git許可權配置。

實驗組網結構

事實上,安裝後gitolite後,只是在git伺服器上有一個管理許可權的倉庫(gitolite-admin.git),此倉庫中下的gitolite-admin/conf中的配置檔案,就是用於配置git伺服器上所有倉庫的許可權。因此,只要有許可權能夠修改gitolite-admin/conf 下的配置檔案,並提交到倉庫中,即可對git做許可權管理。 因此,在本文的實驗環境中,在git伺服器上建立了兩個使用者 gitadmin、mgit,分別用於git許可權配置,以及git服務。

原始碼安裝git

以mgit用於登入到git伺服器

> wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz  #下載git原始碼包,可以到 https://mirrors.edge.kernel.org/pub/software/scm/git/ 此地址下載其它版本包。
> tar -xf git-2.9.5.tar.gz  
> cd git-2.9.5/
> ./configure  
> make  # 編譯git原始碼

經過以下幾個命令後,即安裝完成,通過 git --version 可檢視安裝的git版本。若提示沒有相關 命令,執行一下 make install

問題1:若執行configure時,報以下錯誤: /usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale' Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3. BEGIN failed--compilation aborted at Makefile.PL line 3. make[1]: *** [perl.mak] 錯誤 2 make: *** [perl/perl.mak] 錯誤 2

解決方法: 安裝Perl5 > yum install perl-ExtUtils-MakeMaker

問題2: make過程中,報以下錯誤 GIT_VERSION = 2.9.5     * new build flags     CC credential-store.o In file included from credential-store.c:1:0: cache.h:40:18: fatal error: zlib.h: No such file or directory  #include <zlib.h>                   ^ compilation terminated. make: *** [credential-store.o] Error 1

解決方法: make時報缺少zlib.h,需要執行在下命令: yum install zlib-devel

安裝gitolite

以mgit登入到伺服器

> git clone https://github.com/sitaramc/gitolite.git  # 如果執行此命令時,報“Unable to find remote helper for 'https'”錯誤,將https改為git再次重試。
> cd gitolite
> chmod +x install
> mkdir /home/mgit/bin  #gitolite相關的二進位制檔案的安裝目錄
> /home/mgit/gitolite/install -to /home/hqgit/bin/   #將gitolite二進位制檔案安裝到bin目錄下

如此gitolite已安裝完成。若在安裝過程中報以下錯誤: Can't locate Data/Dumper.pm in @INC (@INC contains: /home/hgit/gitolite/tt/gitolite/src/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/hgit/gitolite/tt/gitolite/src/lib/Gitolite/Common.pm line 65. BEGIN failed--compilation aborted at /home/hgit/gitolite/tt/gitolite/src/lib/Gitolite/Common.pm line 65. Compilation failed in require at ./install line 15. BEGIN failed--compilation aborted at ./install line 15.

解決方法: yum install perl-Data-Dumper.x86_64

配置git許可權管理員

本環境中用gitadmin使用者作為git許可權管理員。首先建立此使用者,並用gitadmin登入到伺服器上。

為管理員生成金鑰

 > ssh-keygen   #生成公鑰與私鑰,並將生成的公鑰命名為 gitadmin.pub

gitolite服務本是通過ssh對使用者進行鑑權。因此需要為git管理員gitadmin生成金鑰。 這此需要重命令的原因是gitolite以檔名作為使用者名稱,新增到gitolite服務中。此處重新命名為gitadmin.pub,後續新增到gitolite中的使用者名稱即為gitadmin

新增git管理員

切換到mgit使用者:

/home/mgit/bin
./gitolite setup -pk /home/gitadmin/gitadmin.pub  #/home/gitadmin/gitadmin.pub為git管理員的公鑰存放路徑,命令需要mgit使用者有此檔案的可讀許可權

以下命令:

(1)將建立/home/mgit/repositories 目錄 ,並在此目錄下生成兩個倉庫 gitolite-admin.git 、 testing.git。 gitolite-admin為git許可權管理倉庫。gitadmin使用者可以clone此倉庫,對git許可權進行配置。 testing.git為測試倉庫。 後續通過gitolite-admin配置檔案,新增的其它倉庫也將建立在此/home/mgit/repositories 目錄下

(2)生成/home/git/projects.list檔案

git倉庫許可權配置

以gitadmin使用者登入伺服器,執行以下命令:

git clone [email protected]:gitolite-admin   #克隆許可權管理倉庫

若在操作中,出現以下錯誤: 正克隆到 'gitolite-admin'... FATAL: R any gitolite-admin gitadmin DENIED by fallthru (or you mis-spelled the reponame) fatal: Could not read from remote repository.

此是由於多次進行了gitolite setup -pk操作,並且公鑰還不一樣。gitolite setup -pk操作會使用者根目錄下生成 .gitolite 目錄,並將新增的公鑰存放到此目錄,同時生成相關的許可權檔案。 解決辦法就是刪除此目錄後,再次執行 gitolite setup -pk即可以了

克隆後,在目錄/home/gitadmin/gitolite-admin下有一個conf與keydir目錄. /home/gitadmin/gitolite-admin/conf/gitolite.conf  為許可權配置檔案,為各倉庫配置許可權。 /home/gitadmin/gitolite-admin/keydir 目錄存放所有使用者的公鑰,公鑰檔名即為使用者檔案。 配置完成後,git commit提交後,倉庫就建立好了

gitolite的具體配置規範,參見gitolite官方文件