使⽤ Gitosis 搭建私有 Git 服务器
软件安装
安装 ssh 与 git
sudo apt-get install git-core openssh-server openssh-client
//设置 git 全局的⽤⼾名与邮箱
git config --global user.name "myname"
git config --global user.email "myemail@gmail.com"
安装 Gitosis
//先安装 python-setuptools,再⽤ python 安装 gitosis
sudo apt-get install python-setuptools
//clone 官⽅ github 仓库,⾃⾏选择 clone 到哪个⽬录
git clone https://github.com/res0nat0r/gitosis.git //注意:中间有两个是数字零
cd gitosis/
sudo python setup.py install
Gitosis 的使⽤
通常情况下,⾄少需要两个⽤⼾来使⽤ gitosis 来管理 git 仓库,⼀个是仓库服务器的所有者,⼀个是仓库成员。
. 仓库服务器的所有者能够创建新的仓库
.仓库成员可以拉取⾃⼰所在的仓库,如果有写权限,可以将修改提交到到服务端上去
gitosis 的配置⽂件也是以 git 仓库的形式存储的,所以需要⼀个仓库成员来管理这些配置⽂件,初始化gitosis 需要指定⼀个公钥⽂件,该⽂件的所有者就是配置⽂件仓库的成员,可以把他当做是管理员,负责收集其他仓库成员的公钥与编辑配置⽂件。
创建仓库成员
仓库成员只需要将本地的 ssh 公钥,提交给管理管理 gitosis 的配置⽂件的⼈即可,管理员负责仓库成员的配置。
⽣成公钥
ssh-keygen -t rsa
//到⽬标 ~/.ssh/ 下可以看到⽣成的公钥⽂件 id_rsa.pub
cd ~/.ssh
//将公钥⽂件复制⼀份,⽂件名修改为本地的⽤⼾名与主机名,类似 name@computer.pub 这种形式
cp ./id_rsa.pub name@computer.pub
//发送到到 gitosis 配置管理员的⼿上
scp ~/.ssh/name@computer.pub [管理员⽤⼾名]@[管理员的IP]:[要发送到的⽬标⽬录]
创建仓库服务器所有者
# ⼀般是⼀个新的系统⽤⼾
sudo useradd -m git
# 设置密码
sudo passwd git
# 切换到该⽤⼾
su git
# 初始化 gitosis
sudo -H -u git gitosis-init < [负责管理配置⽂件的⼈的公钥]
# 初始化完成后,进⼊到⽤⼾⽬录下,可以看到⽣成了两个新⽬录,其中的 repositories/ 是⽤来存放 git 仓库
的
# 修改 repositories/ ⽬录的⽤⼾权限,仅允许 git ⽤⼾即仓库服务器所有者进⾏操作
sudo chown git:git /home/git/repositories
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
sudo chmod 755 /home/git/repositories
配置文件的使用
以下操作均由配置⽂件仓库 gitosis-admin 的成员来完成
# 管理配置⽂件的⽤⼾,将服务器上的配置⽂件仓库 clone 下来
git clone git@[服务器的地址]:gitosis-admin.git
# 进⼊ gitosis-admin ⽬录中,可以看到⼀个配置⽂件 gitosis.conf 与⼀个⽬录 keydir/
# gitosis.conf 中可以为每⼀个仓库配置成员与权限等信息
# keydir/ ⽬录储存所有仓库成员的 ssh 公钥
vim gitosis.conf
# 打开 gitosis.conf
# 其中的 group 标签是分组;
# writable 的值是仓库的名称,需要 repositories/ ⽬录下存在同样名称的仓库⽬录,并以“.git”作为⽬录名
的后缀;
# member 的值是该标签下分组下的所有仓库的成员,多个成员⽤空格隔开,成员的名称需要与 keydir/ ⽬录
下的公钥⽂件名相同;
# 修改 gitosis.conf 或者添加了新的公钥到 keydir/ ⽬录下后,只需要像⼀般的 git 仓库⼀样将修改提交到远程
仓库即可应⽤新的配置;
git add .
git commit -m "描述改变的内容"
git push origin master
创建新的仓库
创建仓库需要两个⽤⼾进⾏操作,git ⽤⼾创建新的仓库,配置⽂件管理员为新仓库编写新的配置项并提交修改。
# git ⽤⼾创建新仓库
su - git
cd ~/repositories/
git init --bare [仓库名].git
# 配置⽂件管理员修改配置项
su - [管理员账号]
cd [gitosis-admin 仓库所在的⽬录]
vim gitosis.conf
# 为新仓库添加分组和成员
例如添加了新仓库 test,并将成员 member1@group1 与 member2@group1 设置为仓库成员,在gitosis.conf ⽂件中添加:
[group test]
wirtable = test
members = member1@group1 member2@group1
权限管理
gitosis 仅仅提供了⾮常简单的权限控制,默认情况下,仓库成员拥有仓库的读写权限,可通过添加配置项,让⼀部分成员只能够读取仓库,⽆法提交修改。例如把上⾯例⼦中的成员 member2@group1,设置为只读权限,在配置⽂件中可以这样写:
[group test]
wirtable = test
members = member1@group1
[group test_readonly]
readonly = test
members = member2@group1
仓库成员 clone 仓库
git clone git@[服务器地址]:[仓库名].git
具有读权限的成员才能够成功 clone 到本地。
具有写权限的成员可以将修改提交到服务器的仓库上。