一直以来我都是用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服务。
以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
^
compilation terminated.
make: *** [credential-store.o] Error 1
解决方法:
make时报缺少zlib.h,需要执行在下命令:
yum install zlib-devel
以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
本环境中用gitadmin用户作为git权限管理员。首先创建此用户,并用gitadmin登录到服务器上。
> ssh-keygen #生成公钥与私钥,并将生成的公钥命名为 gitadmin.pub
gitolite服务本是通过ssh对用户进行鉴权。因此需要为git管理员gitadmin生成密钥。 这此需要重命令的原因是gitolite以文件名作为用户名,添加到gitolite服务中。此处重命名为gitadmin.pub,后续添加到gitolite中的用户名即为gitadmin
切换到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文件
以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官方文档