淡定哥头像

技术文档

Ubuntu Git Server Gitosis 安装配置指南


Ubuntu Git Server Gitosis 安装配置指南

一、 搭建安装 Git Server

1. 在Git服务器(freecto.com)上,安装git和openssh。在当前用户下执行如下命令安装git和openssh:
sudo apt-get update  
sudo apt-get install git-core openssh-server openssh-client  

2. 安装python的setup tool
sudo apt-get install python-setuptools  

3. 初始化git用户。在任何一台机器上使用git,第一次必须初始化一下。
git config --global user.name "ian"   
git config --global user.email "ian@freecto.com"

4. 安装gitosis
cd /tmp
git clone https://github.com/res0nat0r/gitosis.git  
cd gitosis
sudo python setup.py install  

5. 创建所有代码仓库和用户权限的管理者git,并更改用户的密码
sudo useradd -m -s /bin/bash git
sudo passwd git  
比如git密码设置为: freecto.com

6. 创建git仓库的存储目录、更改文件目录属主为代码仓库的管理者git,只让git用户对此目录有权限。
本文档以/home/repo目录做为git仓库的存储目录

sudo mkdir /home/repo
sudo chown git:git /home/repo
sudo chmod 700 /home/repo
sudo ln -s /home/repo /home/git/repositories

7. 在Git客户端机器(比如我的mac电脑)上执行,直接按 Enter继续下一步
ssh-keygen -t rsa  

复制Git客户端机器的 id_rsa.pub 文件到Git服务器
scp id_rsa.pub root@freecto.com:/tmp

8. 登录Git服务器,让gitosis运行起来
cd /tmp
mv id_rsa.pub ian.pub
sudo chmod a+r ian.pub
sudo -H -u git gitosis-init < /tmp/ian.pub

会出现如下应答:
Initialized empty Git repository in /home/repo/gitosis-admin.git/ Reinitialized existing Git repository in /home/repo/gitosis-admin.git/

9. gitosis通过一个git仓库来管理配置文件,仓库放在/home/repo/gitosis-admin.git。
我们需要为一个文件加上可执行权限

cd /home/git/repositories
cd gitosis-admin.git
sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update


二、在git服务器上搭建测试项目库

1. 建立仓库名“test”的测试仓库。在git服务器上切换到git用户,执行如下命令建立测试仓库:

su - git
cd /home/repo
mkdir test.git
cd test.git
git init --bare

到目前为止,这只是一个空仓库,空仓库是不能clone的。为了能clone,我们必须先让某个有权限的人放一个初始化的版本到仓库中。所以,我们必须先修改一下gitosis-admin。此时需要 管理gitosis的配置文件。

2. gitosis本身的配置也是通过git来实现的

mkdir /home/git/tmp 
cd /home/git/tmp 
git clone git@freecto.com:/home/repo/gitosis-admin.git
如果抱错的话,可以尝试
git clone git@freecto.com:gitosis-admin.git

cd /home/git/tmp/gitosis-admin
cp /tmp/ian.pub keydir/

3. 修改gitosis.conf文件

vi gitosis.conf
---------------------------------
[gitosis]

[group gitosis-admin]
members = ian tom
writable = gitosis-admin

[group test]
members = ian bill
writable = test
---------------------------------

这个配置文件说明:
members = 后面跟的一定要和 .pub的前缀一致,否则没有访问权限

目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。 
加入新文件、提交并push到git服务器:

git add --all .
git commit -m  "add test"
git push origin master

git config --global user.email "admin@freecto.com"
git config --global user.name "ian"

gitosis-admin组成员有 ian, tom 该组对gitosis-admin仓库有读写权限;

test 组有 ian, bill 两个成员, 该组对test仓库有读写权限;


三、测试搭建的项目库

1. 服务器搭建完了,并且有一个空的项目test在服务器上。接下来测试一下,空仓库是不能clone的,
所以需要某一个有写权限的人初始化一个版本。 下面是在 ian的客户端电脑完成。

cd /Users/ian/tmp2
mkdir test1
cd test1
git init
echo "test1" > test1.txt
git add .

git commit -am "initial"
git remote add origin git@freecto.com:test.git
git push origin master


到此,test已经有了一个版本了,test仓库的其他成员只要先clone一下test仓库,就可以进行仓库的开发了。
下面是一个用户 bill 来克隆test:

cd /home/bill/tmp
git clone git@freecto.com:test.git
echo "bill" > bill.txt
git add .
git commit -am 'bill commit'
git push 
git pull

分享到: 

* 发表评论:
Top