使用gitolite搭建git源码仓库

一、操作环境

使用gitolite搭建git仓库,首先服务器端要安装有软件:

1. Git 1.6.6+

2. Perl 5.8.8+

3. Openssh 5.0+

二、创建git账户

ubuntu@ubuntu-virtual-machine:/home$ sudo adduser git2

正在添加用户”git2″…

正在添加新组”git2″ (1004)…

正在添加新用户”git2″ (1004) 到组”git2″…

创建主目录”/home/git2″…

正在从”/etc/skel”复制文件…

输入新的 UNIX 密码:

重新输入新的 UNIX 密码:

passwd:已成功更新密码

正在改变 git2 的用户信息

请输入新值,或直接敲回车键以使用默认值

全名 []:

房间号码 []:

工作电话 []:

家庭电话 []:

其它 []:

这些信息是否正确? [Y/n]

ubuntu@ubuntu-virtual-machine:/home$ ls

git git2 my test ubuntu

三、创建git仓库及添加git仓库的用户

1. 使用git账号登录服务器

首先在服务器上用刚才创建的git2账户登录,然后进入git2用户主目录.

ubuntu@ubuntu-virtual-machine:/home$ su git2

密码:

git2@ubuntu-virtual-machine:/home$ cd ~

git2@ubuntu-virtual-machine:~$

2. 下载并安装gitolite

git2@ubuntu-virtual-machine:~$ git clone https://github.com/sitaramc/gitolite

git2@ubuntu-virtual-machine:~$ mkdir -p ${HOME}/bin

git2@ubuntu-virtual-machine:~$ ${HOME}/gitolite/install -to ${HOME}/bin

git2@ubuntu-virtual-machine:~$

3. 添加git仓库的管理员用户

管理员账户可以是服务器上的本地账户,也可以是客户端上的一个账户。首先需要在该账户上生成SSH key,默认在该用户的.ssh目录下,包含一对私钥和公钥,公钥是可以公开的,我们需要的正是这个公钥。

比如我想使ubuntu用户具有git仓库的管理员权限,需进行以下操作:

1) 生成SSH key

ubuntu@ubuntu-virtual-machine:~$ ssh-keygen -t rsa -C HF

进入.ssh目录,里面就有刚才生成的一对私钥和公钥

ubuntu@ubuntu-virtual-machine:~/.ssh$ ls

id_rsa id_rsa.pub known_hosts

ubuntu@ubuntu-virtual-machine:~/.ssh$

2) 使用公钥设置gitolite管理员账户(服务器端操作)

如果添加管理员不是服务器本地账户,则需要把该公钥复制到服务器上。为了方便描述,无论是管理员是否是服务器本地账户,默认该公钥已经复制到服务器端的/tmp目录下(为了方便区分不同的公钥,请将公钥以用户名命名,如将刚才生成的公钥命名为ubuntu.pub)。

ubuntu@ubuntu-virtual-machine:/tmp$ ls -l

总用量 4

-rw-r–r– 1 root root 384 3月 11 07:38 ubuntu.pub

ubuntu@ubuntu-virtual-machine:/tmp$

首先在服务器上进入git2账户,然后设置gitolite

ubuntu@ubuntu-virtual-machine:/tmp$ su git2

密码:

git2@ubuntu-virtual-machine:/tmp$ cd ~

git2@ubuntu-virtual-machine:~$ ${HOME}/bin/gitolite setup -pk /tmp/ubuntu.pub

初始化空的 Git 版本库于 /home/git2/repositories/gitolite-admin.git/

初始化空的 Git 版本库于 /home/git2/repositories/testing.git/

WARNING: /home/git2/.ssh missing; creating a new one

(this is normal on a brand new install)

WARNING: /home/git2/.ssh/authorized_keys missing; creating a new one

(this is normal on a brand new install)

git2@ubuntu-virtual-machine:~$

3) 克隆Gitolite管理库

在仓库管理员端克隆gitolite的管理员仓库。假如服务器的IP为192.168.21.128。

ubuntu@ubuntu-virtual-machine:~$ git clone git2@192.168.21.128:gitolite-admin

正克隆到 ‘gitolite-admin’…

remote: Counting objects: 6, done.

remote: Compressing objects: 100% (4/4), done.

remote: Total 6 (delta 0), reused 0 (delta 0)

接收对象中: 100% (6/6), done.

检查连接… 完成。

ubuntu@ubuntu-virtual-machine:~$

你可以看到在管理库里,有两个目录, conf/和keydir/,其中conf/下面有个名为gitolite.conf的配置文件。

conf/gitolite.conf 用于Git项目配置,访问权限设置。

keydir/ 用于存储用户的SSH public key(公钥)。

4) 添加git仓库

以添加一个mtk-8215仓库为例。首先进入刚才克隆的管理员仓库gitolite-admin中的conf目录中,修改gitolite.conf文件

ubuntu@ubuntu-virtual-machine:~$ cd gitolite-admin/

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ ls

conf keydir

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ cd conf/

ubuntu@ubuntu-virtual-machine:~/gitolite-admin/conf$ ls

gitolite.conf

ubuntu@ubuntu-virtual-machine:~/gitolite-admin/conf$ vim gitolite.conf

在gitolite.conf文件增加mtk-8215的配置,下框中的红色部分。其中repo gitolite-admin项配置的是仓库的管理员权限,可以拥有多个管理员。ubuntu即为刚才创建的管理员用户,这里的名字要和gitolite-admin/keydir中公钥的文件名相同。如ubuntu对应的公钥是ubuntu.pub。此外,创建的其它仓库,也可以通过指定用户名来配置用户的访问权限,如果为@all,则说明只要向管理员仓库gitolite-admin中提交了公钥的用户均可访问指定的仓库。

repo gitolite-admin

RW+ = ubuntu

repo testing

RW+ = @all

repo mtk-8215

RW+ = @all

 

配置完成后,提交修改到服务器端,服务器会自动建立mtk-8215空仓库。

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git add .

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git commit -m “add mtk-8215 repo”

[master 3f0c386] add mtk-8215 repo

1 file changed, 3 insertions(+)

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git push origin master

Counting objects: 7, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (4/4), 381 bytes | 0 bytes/s, done.

Total 4 (delta 0), reused 0 (delta 0)

remote: 初始化空的 Git 版本库于 /home/git2/repositories/mtk-8215.git/

To git2@192.168.21.128:gitolite-admin

eaf618c..3f0c386 master -> master

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$

5)克隆创建的仓库,并提交源码

ubuntu@ubuntu-virtual-machine:~$ git clone git2@192.168.21.128:mtk-8215.git

正克隆到 ‘mtk-8215’…

warning: 您似乎克隆了一个空版本库。

检查连接… 完成。

ubuntu@ubuntu-virtual-machine:~$ cd mtk-8215

ubuntu@ubuntu-virtual-machine:~/mtk-8215$ touch README

ubuntu@ubuntu-virtual-machine:~/mtk-8215$ git add .

ubuntu@ubuntu-virtual-machine:~/mtk-8215$ git commit -m “add src”

[master (根提交) 8440cb4] add src

1 file changed, 0 insertions(+), 0 deletions(-)

create mode 100644 README

ubuntu@ubuntu-virtual-machine:~/mtk-8215$ git push origin master

Counting objects: 3, done.

Writing objects: 100% (3/3), 200 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git2@192.168.21.128:mtk-8215.git

* [new branch] master -> master

ubuntu@ubuntu-virtual-machine:~/mtk-8215$

至此,mtk-8215的源码仓库已经建立完成,下面就要添加mtk-8215仓库的普通用户。

6) 添加git仓库的普通用户

比如要使客户端中的用户my具有mtk-8215仓库的使用权限。用户my需要生成自己的SSH key,然后把生成的公钥提供给管理员,由管理员来开通my用户的权限。

生成SSH key的方法是my用户输入: ssh-keygen -t rsa -C HF

然后在自己的用户目录中找到.ssh目录,以.pub结尾的就是公钥。

管理员得到my用户的公钥后,需要进行如下操作:

(假如my用户的公钥,放在/tmp目录中,名为my.pub)

把 my.pub复制到管理员用户克隆的gitolite-admin仓库的keydir目录中。

ubuntu@ubuntu-virtual-machine:~$ cd gitolite-admin/

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ cd keydir/

ubuntu@ubuntu-virtual-machine:~/gitolite-admin/keydir$ sudo cp /tmp/my.pub ./

提交gitolite-admin仓库到服务器。

ubuntu@ubuntu-virtual-machine:~/gitolite-admin/keydir$ cd ../

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git add .

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git commit -m “add mtk-8215’s permission of my”

[master 0e3c700] add mtk-8215’s permission of my

1 file changed, 1 insertion(+)

create mode 100644 keydir/my.pub

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$ git push origin master

Counting objects: 6, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (4/4), done.

Writing objects: 100% (4/4), 678 bytes | 0 bytes/s, done.

Total 4 (delta 1), reused 0 (delta 0)

To git2@192.168.21.128:gitolite-admin

96682b2..0e3c700 master -> master

ubuntu@ubuntu-virtual-machine:~/gitolite-admin$

my用户的权限就添加完成了,然后my用户可就以克隆和提交mtk-8215中的代码。

my@ubuntu-virtual-machine:~$ git clone git2@192.168.21.128:mtk-8215.git

正克隆到 ‘mtk-8215’…

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

接收对象中: 100% (3/3), done.

检查连接… 完成。

my@ubuntu-virtual-machine:~$ cd mtk-8215/

my@ubuntu-virtual-machine:~/mtk-8215$ ls

README

my@ubuntu-virtual-machine:~/mtk-8215$ touch hello.c

my@ubuntu-virtual-machine:~/mtk-8215$ git add hello.c

my@ubuntu-virtual-machine:~/mtk-8215$ git commit -m “crate hello.c”

[master 1921e0d] crate hello.c

Committer: mylinux <my@ubuntu-virtual-machine>

您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确

与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:

git config –global user.name “Your Name”

git config –global user.email you@example.com

设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

git commit –amend –reset-author

1 file changed, 0 insertions(+), 0 deletions(-)

create mode 100644 hello.c

my@ubuntu-virtual-machine:~/mtk-8215$ git push origin master

Counting objects: 3, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (2/2), 244 bytes | 0 bytes/s, done.

Total 2 (delta 0), reused 0 (delta 0)

To git2@192.168.21.128:mtk-8215.git

Leave a Reply

*