其实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用户的密码
后面的配置文件的说明就参见这里:
修改gitosis.conf文件,如下所示
[gitosis]
[group gitosis-admin] writable = gitosis-admin members = a@server1
[group developers] writable = helloworld members = a@server1 b@server2
[group test] readonly = helloworld members = 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协议私服