纯git server
软件安装
环境:ubuntu16.0.4
- 安装Git-Core:
sudo apt-get install python-setuptools
- 安装openssh-server和openssh-client:
sudo apt-get install openssh-server openssh-client
- 安装python tool:
sudo apt-get install python-setuptools
- 安装gitosis:
1
2
3
4
5git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
sudo python setup.py install
添加管理账号
1 | sudo adduser \ |
如果已有git账户,可以替换成gitmanager
创建链接映射
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如gitmanager用户的仓库地址默认在 /home/gitmanager/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。
1 | sudo ln -s /home/gitrepository /home/gitmanager/repositories |
初始化管理用户
拷贝管理用户公钥到
/tmp/
下,如:1
scp ~/.ssh/id_rsa.pub gitmanager@192.168.0.68:/tmp/
使用拷贝来的公钥初始化gitosis:
1
2sudo -H -u gitmanager gitosis-init < /tmp/id_ras.pub
sudo chmod 755 /home/gitmanager/repositories/gitosis-admin.git/hooks/post-update
配置账号
- 验证ssh
1
2
3
4ssh gitmanager@192.168.0.68
TY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to gitserver closed.
说明 Gitosis 认出了该用户的身份,但由于没有运行任何 Git 命令,所以它切断了连接。
- 克隆gitosis管理仓库:
1
git clone gitmanager@192.168.0.68:gitosis-admin.git
这会得到一个名为 gitosis-admin 的工作目录,主要由两部分组成:
1 | ./gitosis.conf |
gitosis.conf 文件是用来设置用户、仓库和权限的控制文件。keydir 目录则是保存所有具有访问权限用户公钥的地方— 每人一个。在 keydir 里的文件名(比如上面的 qingkouwei.pub) 会自动从使用 gitosis-init 脚本导入的公钥尾部的描述中获取该名字。
看一下 gitosis.conf 文件的内容,它应该只包含与刚刚克隆的 gitosis-admin 相关的信息:
1 | [gitosis] |
要创建项目demo,在里面加入:
1 | [group demo] |
要为demo项目添加用户user1:
1 | [group demo] |
并将用户user1的公钥计入到keydir,并且公钥名.pub和members里面的名字对应. 要添加对demo项目只读的用户:
1 | [group demo] |
修改完配置文件和keydir,使用git push到gitosis-admin服务器.即可直接git add remote add suervename gitmanager@192.168.0.68:demo.git
,然后直接将本地目录推送到demo仓库,不需要再服务器手动创建demo仓库,gitosis会帮忙自动创建.
常见问题
ERROR:gitosis.serve.main:Repository read access denied
原因: gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决方法: 使keydir的名称与gitosis中members所指的名称一致。 改为members = foo 或 公密名称改为foo@bar.pub
- clone时报does not appear to be a git repository
原因: clone时不能用绝对路径,直接写gitosis-admin.git即可.
参考:https://git-scm.com/book/zh/v1/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-Gitosis