ubuntu上git搭建

1、系统软件库的索引文件太旧了,先更新一下

sudo apt-get update

2、安装git所需要的软件

sudo apt-get install git-core openssh-server openssh-client

3、安装Python的setuptools和gitosis

3.1 安装setuptools

sudo apt-get install python-setuptools

3.2 安装gitosis前 先配置git用户信息

1
2
git config --global user.name "yourusername"
git config --global user.email "youremail"

3.3 获取gitosis文件

git clone https://github.com/res0nat0r/gitosis.git 【中间有两个是数字零】

3.4 获取gitosis文件后,进入到文件目录下面

1
2
cd gitosis/ 
sudo python setup.py install

以上就安装完成了

4、创建git管理员账户、配置git

4.1 创建git服务器管理员

1
2
sudo useradd -m git 
sudo passwd git

然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户没有任何权限。

1
2
3
sudo mkdir /home/gitrepository 
sudo chown git:git /home/gitrepository/
sudo chmod 700 /home/gitrepository/

由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在
/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目
的仓库目录/home/gitrepository

1
sudo ln -s /home/gitrepository /home/git/repositories

这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个ssh的公钥。
ssh-keygen -t rsa

这里会提示输入密码,我们不输入直接回车即可。
然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。
执行

sudo -H -u git gitosis-init < /home/jackdeng/.ssh/id_rsa.pub
出现如上信息说明gitosis已经初始化成功。

gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一
个post-update文件添加可执行的权限。

1
sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。
在客户端机器上新建一个目录用于存放gitosis-admin.git仓库

git clone git@123.45.44.123:gitosis-admin.git

clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,
keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用
于认证请求的客户端机器。

现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名
命名好,复制到keydir目录下。

1
cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/

继续编辑gitosis.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[gitosis]

[group gitosis-admin] ####管理员组
members = charn@ubuntu ####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(
下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)

[group testwrite] ####可写权限组
members = zhangsan####组用户
writable = mytestproject####可写的项目仓库名

[group testread]####只读权限组
members =lisi####组用户
readonly= mytestproject####只读项目仓库名