gitolite3的安装

来源:互联网 发布:电子相册视频制作软件 编辑:程序博客网 时间:2024/05/05 04:24

环境:

redhat 5,192.168.1.217,服务端与客户端未分开安装(服务器端用户git、管理用户gitAdmin)

git 安装目录/home/git,gitolite必须也在该目录


1:创建git用户,把gitolite程序安装在用户目录下,git用户为ssh登录用户
mkdir /home/git 
useradd -d /home/git  git  
passwd git
chown -R git.git /home/git 
//注释:密码是git
  
2:安装gitolite
用git用户登陆 
su - git 
git clone git://github.com/sitaramc/gitolite 
mkdir -p /home/git/bin
gitolite/install -to /home/git/bin
export PATH=/home/git/bin:$PATH
echo $PATH

3:生成公钥与私钥,使用gitAdmin为管理员帐号
su - root  切换到root用户
ssh-keygen -t rsa  -f  ~/.ssh/gitAdmin-C "root@xxxxx.com"
下面一直输入“回车”就可以,生成的公钥和私钥在~/.ssh/下面

4:生成gitolite管理公钥
把root.pub复制到git用户根目录/下
cp ~/.ssh/root.pub /home/git/gitAdmin.pub
注册公钥:
su - git
./bin/gitolite setup -pk ~/gitAdmin.pub
将会显示下面的初始化信息
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/

5:测试

客户端测试秘钥是否可以成功访问,root下执行

使用秘钥登录:ssh git@192.168.1.217  -i ~/.ssh/gitAdmin

普通登录:ssh git@192.168.1.217

返回如下内容:

hello <strong>gitAdmin</strong>, this is git@PBCS-IN-LIB running gitolite3 v3.6.2-4-g2471e18 on git 2.1.3R W<span style="white-space:pre"></span>gitolite-admin R W<span style="white-space:pre"></span>testing Connection to 127.0.0.1 closed.

6:配置SSH无密码登录

su - root

cd ~/.ssh
touch config

SSH 的客户端配置文件 ~/.ssh/config 可以通过创建主机别名,在连接主机时,使用特定的公钥。【如果没有config文件,自己手动建立】
例如 ~/.ssh/config 文件中的下列配置:
  host gitserver
  user git
  hostname 192.168.1.217
  port 22
  identityfile ~/.ssh/gitAdmin

直接使用server名称访问服务器
ssh gitserver
git clone gitserver:gitolite-admin.git

7:管理员clone管理库(此处为root用户)
cd ~
git clone gitserver:gitolite-admin.git
#pwd
/root/gitolite-admin

8:新增用户
cd ~/.sshlsssh-keygen -t rsa -f ~/.ssh/liu  -C "lxm@mm203040.com"cp liu.pub /root/gitolite-admin/keydircd /root/gitolite-admin/keydir

添加用户公钥至git仓库

git add liu.pubgit commit -m "add user liu.pub"git push origin master 

注意:通过修改clone后gitolite-admin的文件目录,再次把修改完成的文件推送到git服务器版本库中。


创建仓库

mkdir somegit.gitcd somegit.gitgit init --bare


8.配置权限

退到你的workstation上
exit
clone生成的gitolite-admin.git
git clone gitserver:gitolite-admin


注意这里用的是刚才准备好的server别名来连接的,其中最重要的区别是使用your-name.pub这个key,并且没有采用绝对路径来指定想要clone的repository,而是直接使用名称,并且这个名称也没有包括.git这个后缀。这一点很重要,因为这是用Gitolite的机制来clone,如果你跳过它直接使用git来,那么它的一些功能就无法实现了。以后clone, push其它需要受Gitolite权限控制的repository都必须这样做。 clone完后会有个新的目录gitolite-admin,里面有两个文件夹conf和keydir,第一个目录中包含的是配置文件,里面就是记录权限配置的地方,第二个目录中则包含所有用户的pub key。 现在我们打开配置文件,按照限配置需要进行设置
vim gitolite-admin/conf/gitolite.conf

权限配置在gitolite.conf中进行,注释用#表示。CC 代表创建。仅在 通配符版本库 授权时可以使用。用于指定谁可以创建和通配符匹配的版本库。R, RW, 和 RW+R 为只读。RW 为读写权限。RW+ 含义为除了具有读写外,还可以对 rewind 的提交强制 PUSH。RWC, RW+C只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等)。RWD, RW+D只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。RWCD, RW+CD只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等),D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。- 是一条禁用指令。只对写操作起作用,即禁用用户的写操作。


配置如下,你也可以根据你的需要做更改

@repos_a proj1 proj2@repos_b proj3 proj4 proj5 @team_a user1 user2@team_b user3 user4 repo gitolite-adminRW+ = your-name repo @repos_aRW+ = @team_aR = @all repo @repos_bRW+ = @team_b



这个配置很简单,首先定义了两个repository group,再又定义了两个user group,group的好处就是以后添加repository和user的时候,不需要再单独配置,只需加入到对应的group中即可。

添加全新的repository,在上面提到的gitolite.conf文件中配置好对应的名称和权限,再push到server即可,server会自动帮你创建一个empty的bare repository。
如果你已经有一个repository,想把它加进来的话,那就把它拷贝到git server上的~/repositories文件夹里,记得文件夹名要以.git结尾,并且这个repository一定要是bare的,(你可以通过拷贝repository里的.git文件夹,然后运行git config --bool core.bare true,也可以运行git clone --bare your-repository来得到bare repository)。这种方式还有一个额外的操作就是在server上运行一次gitolite setup。


移除repository,在配置文件中移除对应的repo,然后push,接着再删除server上对应的文件夹即可。
添加user,把pub key拷贝到keydir文件夹里
删除user,一样,移除keydir里对应的pub key


注意,上面说的操作,都必须在clone的gitolite-admin里做更改,然后push,千万别在server上自己来,那样是没用的,因为这些权限配置、repository管理都有一些额外的操作,gitolite-admin会帮你搞定一切。 把你的更改push回server上,试试clone,pull,push,看看权限是否正确。

比如git clone  git(ssh用户名称)@gitserver:proj3


如果ssh不是默认端口怎么办:

1.git remote set-url origin ssh://git@domain.com:3022/~/Projects/p1.git

2.修改配置文件  /root/.ssh

cat>~/.ssh/config# 映射一个别名host newdomainhostname 192.168.1.217port 3022identityfile ~/.ssh/testgit

参考 http://blog.chinaunix.net/uid-20671208-id-3494800.html

0 0
原创粉丝点击