CentOS6.2下用gitosis搭建基于ssh传输协议的git-server

来源:互联网 发布:linux下剪切命令 编辑:程序博客网 时间:2024/05/11 18:36

其实git作为一个分布式的代码管理工具,其实无所谓服务端和客户端,之所以这里我们这里搭建git-server,是因为这台分布式的主机可以保存大家的代码以及版本控制,然后可以通过gitosis这个python编写的项目对git一些项目进行权限分配,提供开发人员通过ssh对代码的读写权限,这就是一台git-server干的事情,我觉得git-server就是一台权限更高,能力更强的git peer吧,理解这点对安装git-server很有好处。

然后就是git采用的的传输协议,大概有git的私有协议git协议,这种协议对权限的管理不是很好,要么所有人可读,要么所有人可写,这种协议一般分配所有人可读,一般用于提供clone代码到本地,git协议是效率最高的 ;git常用的比较容易配置的就是ssh协议了,这个对权限的控制很好,而且安全性较高,本文即采用这种方式,但是对每个人公钥的管理比较麻烦;还有就是通过http来访问,这种方式最简单的就是用gitweb来实现,这种方式就只能提供一个可以浏览代码库的web接口,实际意义其实不大,比较使用的解决方法是利用apache中的dav和dav_fs模块来实现http的访问和权限分配。

还有就是架设git-server一定要对git有一定认识,可以先参照github的简单教程玩玩,不然对搭建git-server会觉得有些不大理解,建议写看看git相关架构和教程的文章。

下面是我的架设过程,参考了网上的一些文章:Git服务器gitosis安装设置(by ubuntu wiki)

以root权限登录系统:

yum install openssh-server openssh-client   

#如果你的系统中没有就安装吧 

useradd -m git

passwd git

#建立git这个用户和其的私人目录

su git

cd ~

#切换到git用户

sshkey-gen -t rsa

#生成公钥和私钥对并将其存在~/.ssh/目录下

su -

#切换到root

yum install git-core

git config --global user.name "my name"

git config --global user.email "my email"

#安装git并做一些全局的初始化设置

mkdir /home/git/repositories

chown git:git /home/git/repositories

chmod 755 /home/git/repositories

#建立git仓库存储目录并进行一些权限的修改

yum install python-setuptools

#安装python软件包的安装的安装的工具

cd /tmp

git clone git://在github上搜一个gitosis的代码仓库

#将gitosis代码克隆到本地

cd gitosis

python setup.py install #这一步要用到上面的python-setuptools这个包

#安装gitosis

sudo -H -u git gitosis-init < /home/git/.ssh/id_rsa.pub  #要以git用户运行这个命令

chmod 755 /home/git/repostories/gitosis-admin.git/hooks/post-update

#配置gitosis

cd ~

git clone git@YOUR_SERVER:git/gitosis-admin.git #(YOUR_SERVER为服务器ip,我这里的centos的ip为192.168.3.120 )

注:默认使用ssh传输协议,如果你以git用户的身份登录的话,由于你的公钥已经在信任的公钥里,否则需要你输入git用户的密码

cd gitosis-admin  #里面有个文件gitosis.conf和一个目录keydir/,gitosis.conf是gitosis的配置文件,用于配置用户和权限,keydir/是所有组成员的
各个用户按照前面提到的办法生成各自的ssh公钥文件后,服务器管理员把所有人的 ssh公钥文件都拿来,拷贝到keydir目录下。


后面的配置文件的说明就参见这里:

修改gitosis.conf文件,如下所示

[gitosis]
[group gitosis-admin]writable = gitosis-adminmembers = a@server1
[group developers]writable = helloworldmembers = a@server1 b@server2
[group test] readonly = helloworldmembers = c@server3

这个配置文件表达了如下含义:gitosis-admin组成员有a,该组对gitosis-admin仓库有读写权限;developers组有a,b两个成员,该组对helloworld仓库有读写权限;test组有c一个成员,对helloworld仓库有只读权限。当然目前这些配置文件的修改只是在你的本地,你必须推送到gitserver上才能真正生效。加入新文件、提交并push到git服务器:

git add .

git commit -a

git push


下面为建一个测试项目:

cd /tmp

mkdir apps

cd apps

git init

随便加点东西就可

git add .

git commit -am "initial version"

git remote add origin git@Server:用户名/test.git

git push origin master

注意在配置文件中对权限的分配

一些可以参考的文章:git私服搭建--传输协议的选用和实在http协议私服