预备工具和原材料
安装 git
sudo apt-get install git-core
配置身份信息
git config --global user.name "yourname"
git config --global user.email "your@email.com"
安装 ssh 相关服务
sudo apt-get install openssh-server openssh-client生成服务器和客户端的公钥和私钥
server : $ ssh-keygen -f ~/.ssh/administrator // administrator administrator.pub
clinet : $ ssh-keygen -f ~/.ssh/clinet
服务器端
创建git用户
在服务器端创建专用帐号,所有用户通过此帐号访问git库,一般方便易记,选择git作为专用帐号名称。
$ sudo adduser --system --shell /bin/bash --group git
Adding system user `git' (UID 120) ...
Adding new group `git' (GID 129) ...
Adding new user `git' (UID 120) with group `git' ...
Creating home directory `/home/git' ...
添加git用户到ssh用户组中
$ sudo adduser git ssh
Adding user `git' to group `ssh' ...
Adding user git to group ssh
Done.
为git用户设置口令
当整个git服务配置完成,最好取消git口令,只允许公匙认证。
$ sudo passwd git
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
服务器切换到git用户,并准备安装gitolite
$ su git
$ cd ~ // go home /home/git
从github上下载源码,放到git home目录下并安装
~$ git clone git://github.com/sitaramc/gitolite
~$ mkdir $HOME/bin -p
~$ gitolite/install -to $HOME/bin
添加bin到环境变量
~$ echo 'export PATH=$PATH:/home/git/bin' > ~/.bashrc
设置管理员身份
~$ gitolite setup -pk ~/.keys/administrator.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
(this is normal on a brand new install)
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)
客户端
添加config文件
在.ssh创建并添加配置信息,确保config文件为600权限
~/.ssh$ vi config
host git
user git
hostname localhost
port 22
identityfile ~/.ssh/administrator
下载 git 管理仓库
$ git clone git:gitolite-admin
Cloning into 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
Checking connectivity... done.
#$ git clone git@localhost:gitolite-admin
增加 git 仓库和用户
gitolite-admin/conf/gitolite.conf:这个文件记录了所有的git仓库的状况gitolite-admin/keydir/: 这个目录下记录了所有用户的pub公钥
因此,要增加用户,把用户的公钥添加到gitolite-admin/keydir/下,要增加仓库或者修改用户对每个仓库的权限,修改gitolite-admin/conf/gitolite.conf 文件,然后把这些修改,先commit到本地仓库,再push到服务器端,便完成修改。
增加用户
拷贝用户公钥到keydir目录
新增用户通过ssh-keygen生成公钥,例如 abner.pub, 传给管理员客户端的gitolite-admin/keydir/目录下,然后通过
$ git add keydir/abner.pub
$ git commit -m "add user abner."
$ git push origin master //就完成了新用户的添加
查看服务器authorized_keys文件
此时用户的公钥信息会添加到服务器端git用户主目录下的.ssh/authorized_keys文件,查看如下:
~$ vi .ssh/authorized_keys
# gitolite start
command="/home/git/bin/gitolite-shell abner"....
....
command="/home/git/bin/gitolite-shell administrator"....
....
# gitolite end
增加仓库
修改编辑gitolite.conf
修改gitolite-admin/conf/gitolite.conf,增加仓库及用户权限:
$ vi conf/gitolite.conf
@android = abner jack
repo gitolite-admin
RW+ = administrator
repo testing
RW+ = @all
repo helloworld
RW+ = @android
经过 add,commit,push 后就仓库的建立和权限的管理
$ git add .
$ git commit -m "add repo helloworld."
....
remote: Initialized empty Git repository in /home/git/repositories/helloworld.git/ //新建仓库
To git:gitolite-admin
b908f6c..bb4f641 master -> master
测试
配置用户 ssh git
$ vi /home/jack/.ssh/config
host git
user git
hostname localhost
port 22
identityfile ~/.ssh/jack
克隆git仓库
$ git clone git:helloworld
$ git config --global user.email "jack@example.com"
$ git config --global user.name "jack"
$ echo "hello world!" > README
$ git commit -m "add README."
$ git push origin master
$ git log
commit 165dcc404c81dd76ef086e2ef3453ef43af35992
Author: jack <jack@example.com>
Date: Wed Aug 10 20:44:05 2016 +0800
add README.
在服务器端查看
~/repositories/helloworld.git$ git log
commit 165dcc404c81dd76ef086e2ef3453ef43af35992
Author: jack <jack@example.com>
Date: Wed Aug 10 20:44:05 2016 +0800
add README.
参考
https://github.com/sitaramc/gitolite
http://blog.csdn.net/xsl1990/article/details/25486211