最近的项目一直使用git,于是在虚拟机上安装了一个git server。参照别人的资料,走了不少弯路,于是把安装步骤记录下来,以资参考。
这里是使用gitosis来进行公钥和库的管理。
1. 创建git用户
- 1). >> sudo useradd -r -s /bin/sh -m git
- 2). >> sudo passwd git
2. 安装git
- 1). >> sudo apt-get install git-core
- 2). >> git config --global user.name "git"
- 3). >> git config --global user.email "git@git.com"
3. 安装python setuptools
- 1). >> wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
- 2). >> tar zxvf setuptools-0.6c11.tar.gz
- 3). >> cd setuptools-0.6c11
- 4). >> python setup.py build
- 5). >> python setup.py install
4. 安装gitosis
- 1). >> cd /tmp
- 2). >> git clone https://github.com/amusal/gitosis.git
- 3). >> cd gitosis
- 4). >> python setup.py install
5. 初始化gitosis
- 1). 切换到git用户
- 2). 生成gitosis管理者的id_rsa.pub文件
在需要对gitosis做管理的机器上面(windowsxp为例),打开git bash:
>> ssh-keygen -t rsa
一路回车,如要求填yes/no则选yes,完成之后在当前用户的主目录下会生成.ssh文件夹,id_rsa.pub便位于其中。
如果不知道当前主目录的路径,可以在git bash下输入命令查看:
>> echo $HOME
- 3). 把刚生成的id_rsa.pub文件传到gitserver上的/tmp目录
并修改该文件访问权限 chmod 755 id_rsa.pub
- 4). sudo -H -u git gitosis-init < /tmp/id_rsa.pub
如安装成功会显示:
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
此时/home/git下会创建gitosis和repositories目录。其中repositories目录是资源库目录,我们的项目都托管于该目录下。
在repositories下默认会有一个gitosis-admin.git目录,该目录下存放的是gitosis的管理项目,我们要通过它来对gitosis的权限进行管理,详见下文。
6. 修改上传权限
- chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
7. gitosis管理
- 1). 使用对git做管理的电脑账号(即生成id_rsa.pub文件的电脑):
>> clone git@[remote.server]:gitosis-admin.git
- 2). cd gitosis-admin
- 3). vi gitosis.conf
显示:
[gitosis]
[group gitosis-admin]
members = johnson@Johnson-BBACED
writable = gitosis-admin
其中,[group gitosis-admin]表示名字为gitosis-admin的组
writable表示可写的项目名,members表示具有writable指定权限的用户名。在keydir目录下,上传的id_rsa.pub文件被改名成和members指定的用户名一一对应的名字。
多个用户名或项目名之间用空格隔开, 每个组可以包含多个members或writable。
- 4). 添加组
使用git账号,进入/home/git/repositories/目录
新建目录app.git,在目录中添加一个文件test.txt。
在gitosis.conf文件上添加:
[group app]
members = johnson@Johnson-BBACED test@test.com
writable = app
提交之后,johnson@Johnson-BBACED test@test.com就有了/home/git/repositories/app的读写权限:
git clone git@[remoteserver]:app.git
即可正常操作。