说明:
- 服务器和管理器使用同一台机器,主机名为hadoop,现实场景最好使用不同的机器。
- 创建不同的用户模拟使用场景:
1)git用户作为服务器管理用户,用来安装gitolite;
2)gitadmin用户作为版本库管理用户,使用gitolite管理版本库;
3)tom和jerry用户作为普通用户,使用版本库管理员创建的版本库。 - 整个搭建过程中会使用不同的机器,要注意区分,不同机器指代:
1)服务器指的是git用户工作环境;
2)管理器指的是gitadmin用户工作环境;
3)客户机指的是普通用户工作环境。
1. 安装部署
1.1 管理器上安装Git
在管理器上安装Git并配置Git账户信息:
[root@hadoop ~]# yum install git –y
[gitadmin@hadoop ~]$ git config --global user.name "gitadmin"
[gitadmin@hadoop ~]$ git config --global user.email "gitamdin@aliyun.com"
1.2 管理器上配置SSH
- 创建SSH公钥/私钥对
[gitadmin@hadoop ~]$ mkdir .ssh #如果没有.ssh文件夹则创建
[gitadmin@hadoop ~]$ ssh-keygen -f ~/.ssh/gitadmin
- 配置config文件
为了避免和其他公钥私钥混淆,先配置下SSH客户端的文件 ~/.ssh/config,可以通过创建主机别名,使在连接主机时使用特定的公钥。
创建 ~/.ssh/config文件,插入以下内容:
host hadoop
user git
hostname 192.168.92.2
port 22
identityfile ~/.ssh/gitadmin
其中:
- host 后是服务器的主机名
- user 后是服务器系统的用户名
- hostname 后是服务器ip地址
- port 后是服务器sshd服务的端口号,服务器的sshd端口是必须是22端口,否则在配置免秘钥进行git提交代码时,会提交失败的
- identityfile 后是管理器用户的公钥
创建config文件后,需要修改文件权限,config文件权限必须是600,否则在后续添加公钥时会提示权限不允许错误:
[gitadmin@hadoop ~]$ chmod 600 ~/.ssh/config
1.3 将管理器上SSH公钥拷贝到服务器上
在管理器上使用scp命令将gitadmin.pub拷贝到服务器上:
[gitadmin@hadoop ~]$ scp ~/.ssh/gitadmin.pub hadoop:/home/git/tmp/
1.4 在服务器上安装gitolite
- 安装git,和在管理器上的安装一样,可以不用配置账户信息
- 在git的用户目录下下载gitolite软件包:
[git@hadoop ~]$ git clone https://github.com/sitaramc/gitolite
- 安装gitolite
[git@hadoop ~]$ mkdir bin #该文件夹必须存在
[git@hadoop ~]$ gitolite/install -to $HOME/bin
安装后,bin目录下会有以下内容,其中gitolite为可执行文件:
[git@hadoop bin]$ ls
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
- 利用管理器的ssh公钥生成管理版本库
[git@hadoop bin]$ gitolite setup -pk ~/tmp/gitadmin.pub
执行成功后,会在用户主目录下生成projects.list文件和repositories文件夹,其中:
- repositories:版本库文件夹,所有版本库均存放在该文件夹下,目前包括两个版本库gitolite-admin.git和testing.git
- projects.list:版本库列表,不包括git管理库gitolite-admin.git,目前只有testing.git
1.5 在管理器上克隆并管理git管理库gitolite-admin.git
- 克隆管理库
可以在用户主目录下创建一个专门存放git项目的文件夹,然后将项目克隆到该文件夹下:
[gitadmin@hadoop gitolite1]$ git clone hadoop:gitolite-admin
#经测试使用git clone hadoop:gitolite-admin.git也是可以的
#经测试使用git clone hadoop:/home/git/repositories/gitolite-admin不可以
#经测试使用git clone hadoop:/home/git/repositories/gitolite-admin.git不可以
克隆完成后,在gitolite-admin文件夹下包括两个文件夹:-conf文件夹包含gitolite.conf文件,该文件是版本库权限配置文件;keydir文件夹保存全部用户的ssh公钥。
- 管理版本库
- 在客户机上使用scp命令将用户的ssh公钥拷贝到管理器上
- 在管理器上将用户公钥拷贝到gitolite-admin/keydir文件夹下
[gitadmin@hadoop ~]$ cp tmp/tom.pub gitworkspace/gitolite1/gitolite-admin/keydir/tom.pub
[gitadmin@hadoop ~]$ cp tmp/jerry.pub gitworkspace/gitolite1/gitolite-admin/keydir/jerry.pub
- 修改gitolite.conf文件,新建版本库demo并配置用户权限
[gitadmin@hadoop gitolite-admin]$ vim conf/gitolite.conf
在文件最后添加以下内容:
repo demo
RW+ = tom
R = jerry
- 提交版本库内容并推送到服务器
[gitadmin@hadoop gitolite-admin]$ git add conf/
[gitadmin@hadoop gitolite-admin]$ git add keydir/
[gitadmin@hadoop gitolite-admin]$ git commit -m "add new repository demo"
[gitadmin@hadoop gitolite-admin]$ git config --global push.default simple
[gitadmin@hadoop gitolite-admin]$ git push
提供成功出现以下信息:
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 1.15 KiB | 0 bytes/s, done.
Total 7 (delta 0), reused 0 (delta 0)
remote: 初始化空的 Git 版本库于 /home/git/repositories/demo.git/
To hadoop:gitolite-admin
eec715f..db7eff0 master -> master
经过以上步骤,git服务器和管理器部署已经完毕,客户机用户可以使用git的版本库了。
2. 客户机使用git版本库
2.1 配置SSH
- 创建ssh公钥
刚才在管理器添加用户公钥时已经将用户的公钥拷贝到了管理器中。 - 配置config文件
创建~/.ssh/config文件并输入以下内容:
host hadoop
user git
hostname 192.168.92.2
port 22
identityfile ~/.ssh/tom
修改config文件权限为600:
[tom@hadoop gitworkspace]$ chmod 600 ~/.ssh/config
2.2 克隆git项目之demo
[tom@hadoop gitworkspace]$ git clone hadoop:demo
克隆成功后出现以下结果:
正克隆到 'demo'...
warning: 您似乎克隆了一个空版本库。
2.3 修改demo项目并推送到服务器
首先需要配置git账户信息:
[tom@hadoop demo]$ git config --global user.name "tom"
[tom@hadoop demo]$ git config --global user.email "tom@aliyun.com"
克隆项目之后就可以对项目进行修改,然后可以将修改推送到服务器:
[tom@hadoop demo]$ vim readme.txt #新建了一个文件,输入了一些内容
[tom@hadoop demo]$ git add readme.txt
[tom@hadoop demo]$ git commit -m "add a new file."
[master(根提交) 28785f9] add a new file.
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
[tom@hadoop demo]$ git config --global push.default simple
[tom@hadoop demo]$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 220 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To hadoop:demo
* [new branch] master -> master
提交成功后,可以在服务器的demo.git文件夹下查看提交日志,可以看到刚才的提交结果:
[git@hadoop repositories]$ cd /home/git/repositories/demo.git/
[git@hadoop demo.git]$ git log
commit 28785f9f5d98e50d976703754aeba96e9f8799c6
Author: tom <tom@aliyun.com>
Date: Tue Feb 18 15:47:15 2020 +0800
add a new file.
参考文章: