git-core是git版本控制核心软件。
apt-get install git-core
若安装提示失败,可能是因为系统软件库的检索文件太旧了,需要先更新一下。
apt-get update
openssh-server和openssh-client用于git通过ssh协议来在服务器与客户端之间传输文件。
apt-get install openssh-server openssh-client
由于安装gitosis需要用到Python的一些工具,所以需要先安装setup。
apt-get install python-setuptools
安装gitosis之前需要初始化服务器的git用户信息。
git config --global user.name "blxcyz"
git config --global nser.email "[email protected]"
可以通过git命令直接从GitHub上下载安装包,也可以通过浏览器登录页面下载。https://github.com/res0nat0r/gitosis.git
git clone https://github.com/res0nat0r/gitosis.git
进入文件目录
cd gitosis/
这里需要使用python命令安装目睹下的setup.py的python脚本进行安装。
sudo python setup.py install
到这里整个git相关的安装步骤就已经完成了,下面是对git进行一些基本配置。
创建一个账户(gitmanager)作为git服务器的管理员,可以管理其他用户的项目权限。
useradd -m gitmanager
passwd gitmanager
在/home目录下创建一个项目仓库存储点,命令为:
mkdir /home/gitServer/gitrepository
设置只有git用户拥有所有权限,其他用户没有任何权限,命令为:
chown gitmanager:gitmanager /home/gitServer/gitrepository/
chmod 700 /home/gitServer/gitrepository/
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如gitmanager用户的仓库地址默认在/home/gitmanager/repositories/目录下,这里需要创建一个链接映射。让他指向前面创建的专门用于存放项目的仓库目录/home/gitServer/gitrepository。
ln -s /home/gitServer/gitrepository /home/gitmanager/repositories
由于gitServer被单独挂载了500G的分区,因而这里创建软链接让git仓库自动存储到500G的分区中,而不是与系统盘在一个分区,避免因系统出问题导致git服务器上的数据的丢失。
在管理机器(你主要使用的电脑)上生成一个ssh的公钥,命令如下:
ssh-keygen -t rsa
将公钥文件拷贝到服务器上,命令如下:
scp /home/blx-cyz/.ssh/id_rsa.pub [email protected]:/home/gitmanager/id_rsa.pub
注意:初始化之前需要切换至gitmanager用户
su gitmanager
gitosis-init < /home/gitmanager/id_rsa.pub (传到服务器的地址)
使用初始化 Gitosis 公钥的拥有者身份 SSH 进服务器,命令如下:
ssh gitmanager@192.168.123.157
命令为:
git clone gitmanager@192.168.123.157:/home/gitmanager/repositories/gitosis-admin.git
gitosis-admin目录结构
gitosis.conf
用来设置用户、仓库和权限的控制文件
keydir
保存所有具有访问权限用户公钥的地方,每人一个公钥。
将他们每个人的公钥文件添加到keydir文件夹,然后在gitosis.conf中设置其相应的分组和项目权限,最后将修改内容push到服务端。pub文件的命名将决定在gitosis.conf配置文件中的称呼。
(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 不会允许他向项目推送任何内容。
可以直接通过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
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]
原因:
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