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官方文件