1 安装Git
sudo apt-get update(更新apt-get所能安装的软件的资源)
sudo apt-get install git(安装Git)
sudo apt-get installopenssl-server(安装openssl-server)
2 用户管理
sudo adduser --system --shell /bin/bash --group git(创建管理git的用户)
sudo adduser git ssh(添加用户到ssh组)
passed git(设置用户密码)
su git(切换到git用户)
ssh-keygen(ssh访问git服务器需要生成一组key)
cp ~/.ssh/id_rsa.pub authorized_keys(拷贝id_rsa.pub到authorized_keys)
3 安装gitolite
mkdir bin(在git用户下创建bin目录用于安装gitolite)
git clone git://github.com/sitaramc/gitolite(从github克隆gitolite)
~/gitolite/install -to ~/bin(gitolite安装1)
mv ~/.ssh/authorized_keys ~/git.pub(gitolite安装2)
~/bin/gitolite setup -pk ~/git.pub(gitolite安装3)
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/authorized_keys missing; creating a new one
(this is normal on a brand new install)
4 查看仓库
ssh git@127.0.0.1(查看管理仓库及testing仓库)
PTY allocation request failed on channel 0
hello git, this is git@iZ94o31qo4gZ running gitolite3 v3.6.5-10-g264c26b on git 1.9.1
R W gitolite-admin
R W testing
Connection to 127.0.0.1 closed.
git clone git@127.0.0.1:gitolite-admin(拉取管理仓库)
Cloning into 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 741 bytes | 0 bytes/s, done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Checking connectivity... done.
5 添加git用户
如果指定用户拉取指定仓库文件,需要指定用户在本地生成公钥文件(ssh-keygen -t rsa),然后将"xxx.pub"文件修改为添加用户的名称以便于服务端识别,假如用户名为"Lin",则修改对应的公钥文件为"Lin.pub",然后上传到服务端指定目录下:
scp Lin.pub git@120.24.200.100:gitolite-admin/keydir(将pub公钥拷贝到gitolite-admin仓库)
Lin.pub 100% 414 0.4KB/s 00:00
然后到服务端git用户目录(~/gitolite-admin/keydir)下查看文件
git.pub Lin.pub
6 添加仓库
vim ~/gitolite-admin/conf/gitolite.conf(打开gitolite-admin/conf/gitolite.conf文件)
git@Lin:~/gitolite-admin$ cd ~/gitolite-admin/conf/
git@Lin:~/gitolite-admin/conf$ vim gitolite.conf
repo gitolite-admin
RW+ = git
repo testing
RW+ = @all
添加仓库demo,RW:可读写,多用户使用空格隔开
repo gitolite-admin
RW+ = git
repo demo
RW = git Lin
repo testing
RW+ = @all
7 gitolite-admin推送到gitolite服务器
由于6中仓库是基于本地添加的,并没有提交到gitolite-admin仓库,还无法识别添加用户的公钥,还需要将其推送到gitolite的服务器上,才会生效:
git add .
git commit -m "Create demo repo.“
在以上的配置中,执行到这一步会出现如下错误:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <git@iZ94o31qo4gZ.(none)>) not allowed
然后执行:git@Lin:~/gitolite-admin$ git config --global user.email "Lin@126.com"
git@Lin:~/gitolite-admin$ git config --global user.name "Lin"
git@Lin:~/gitolite-admin$ git commit -m "Create demo repo"
[master 0498f34] Create demo repo
2 files changed, 4 insertions(+)
create mode 100644 keydir/Lin.pub
git push origin master (推送到服务器)
git@Lin:~/gitolite-admin$ git push origin master
Counting objects: 10, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 819 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Initialized empty Git repository in /home/git/repositories/demo.git/
To git@127.0.0.1:gitolite-admin
6a52a01..0498f34 master -> master
8 Lin客户端clone demo仓库
Lin-MacBook-Pro:~ Lin$ git clone git@120.24.200.100:demo
Cloning into 'demo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
9 完成