Ubuntu上搭建git服务器

一、安装git服务器所需软件

1、安装git-core

git-core是git版本控制核心软件。

apt-get install git-core

若安装提示失败,可能是因为系统软件库的检索文件太旧了,需要先更新一下。

apt-get update

2、安装openssh-server和openssh-client

openssh-server和openssh-client用于git通过ssh协议来在服务器与客户端之间传输文件。

apt-get install openssh-server openssh-client

3、安装python

由于安装gitosis需要用到Python的一些工具,所以需要先安装setup。

apt-get install python-setuptools

4、初始化服务器的git用户信息

安装gitosis之前需要初始化服务器的git用户信息。

git config --global user.name "blxcyz"
git config --global nser.email "[email protected]"

5、获取gitosis版本文件

可以通过git命令直接从GitHub上下载安装包,也可以通过浏览器登录页面下载。https://github.com/res0nat0r/gitosis.git

git clone https://github.com/res0nat0r/gitosis.git

6、安装gitosis

进入文件目录

cd gitosis/

7、安装gitosis

这里需要使用python命令安装目睹下的setup.py的python脚本进行安装。

sudo python setup.py install

到这里整个git相关的安装步骤就已经完成了,下面是对git进行一些基本配置。

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

1、创建管理员账户

创建一个账户(gitmanager)作为git服务器的管理员,可以管理其他用户的项目权限。

useradd -m gitmanager
passwd gitmanager

2、创建仓库存储点

在/home目录下创建一个项目仓库存储点,命令为:

mkdir /home/gitServer/gitrepository 

3、权限设置

设置只有git用户拥有所有权限,其他用户没有任何权限,命令为:

chown gitmanager:gitmanager /home/gitServer/gitrepository/  
chmod 700 /home/gitServer/gitrepository/

4、创建链接映射

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

ln -s /home/gitServer/gitrepository /home/gitmanager/repositories

由于gitServer被单独挂载了500G的分区,因而这里创建软链接让git仓库自动存储到500G的分区中,而不是与系统盘在一个分区,避免因系统出问题导致git服务器上的数据的丢失。

5、生成管理员公钥(客户端)

在管理机器(你主要使用的电脑)上生成一个ssh的公钥,命令如下:

ssh-keygen -t rsa

6、拷贝公钥文件到服务器(客户端)

将公钥文件拷贝到服务器上,命令如下:
scp /home/blx-cyz/.ssh/id_rsa.pub [email protected]:/home/gitmanager/id_rsa.pub

7、初始化gitosis

注意:初始化之前需要切换至gitmanager用户

su gitmanager
gitosis-init < /home/gitmanager/id_rsa.pub  (传到服务器的地址)

三、在服务器上创建项目仓库

1、SSh验证

使用初始化 Gitosis 公钥的拥有者身份 SSH 进服务器,命令如下:

ssh gitmanager@192.168.123.157

2、克隆Gitosis的控制仓库到本地

命令为:

git clone gitmanager@192.168.123.157:/home/gitmanager/repositories/gitosis-admin.git

gitosis-admin目录结构
gitosis.conf
用来设置用户、仓库和权限的控制文件
keydir
保存所有具有访问权限用户公钥的地方,每人一个公钥。

3、多人协助开发同一个版本

将他们每个人的公钥文件添加到keydir文件夹,然后在gitosis.conf中设置其相应的分组和项目权限,最后将修改内容push到服务端。pub文件的命名将决定在gitosis.conf配置文件中的称呼。

4、添加协同成员示例

(1)添加公钥

cp /tmp/id_rsa.john.pub keydir/john.pub
cp /tmp/id_rsa.josie.pub keydir/josie.pub
cp /tmp/id_rsa.jessica.pub keydir/jessica.pub

(2)加入团队并设置权限
把他们都加进 ‘mobile’ 团队,让他们对iphone_project具有读写权限:

[group gitosis-prj]
writable = testproject
members = scott john josie

也可以将成员分组设置权限

[group developer]
members = scott john josie
[group gitosis-prj]
writable = testproject
members = @developer

(3)权限控制
Gitosis 也具有简单的访问控制功能。如果想让 John 只有读权限,可以这样做:

[group mobile]
writable = iphone_project
members = scott josie jessica

[group mobile_ro]
readonly = iphone_project
members = john

现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。

5、创建仓库

可以直接通过gitmanager账户在服务器上创建仓库,然后通过git命令设置项目权限,之后有权限的成员即可通过git命令操作新添的项目。但这种方式需要登录服务器操作,如果不希望频繁登录服务器,只希望完全通过git操作则可以在本地创建仓库,然后设置好项目权限之后再上传到git服务器。
(1)使用gitmanager账户在服务器上创建一个目录(testproject.git)并初始化成git项目仓库。命令如下:

su gitmanager 
mkdir /home/gitServer/gitrepository/testproject.git
cd  /home/gitServer/gitrepository/testproject.git
git init --bare
exit 

(2)在本地创建仓库,修改仓库权限之后上传到服务器上。命令如下:
1)创建并初始化仓库

mkdir testproject
cd testproject
git init

2)在仓库中添加文件push到服务器

touch README
git add .
git commit -m "First file"
git remote add origin gitmanager@192.168.123.157:testproject.git
git push origin master

注意:不能直接提交空的仓库到服务器上,否则会报如下错误:
error: src refspec master does not match any
6、测试新建仓库
通过git下载新建的仓库,检测仓库是否能够正常获取到。

git clone gitmanager@192.168.123.157:testproject

四、常见问题

1、运行ssh [email protected]出错

ERROR:gitosis.serve.main:Repository read access denied
原因:
gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决方法:
使keydir的名称与gitosis中members所指的名称一致。 改为members = foo 或 公密名称改为[email protected]

2、clone时报does not appear to be a git repository

原因:
clone时不能用绝对路径,只能写相对于gitmanager用户home的相对路径。

git clone gitmanager@192.168.123.157:gitosis-admin.git

解决方案:
将路径改为:相对gitmanager用户的路径:

git clone gitmanager@192.168.123.157:/home/gitmanager/repositories/gitosis-admin.git

你可能感兴趣的:(开发工具,Linux系统环境,git,服务器,ubuntu)