版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Git如何管理权限呢?GIT自身没有提供SVN类似的管理权限,需要使用gitolite来管理。本文在CentOS7环境下试验。
安装gitolite依赖的perl相关的包:
[root@git ~]# yum install 'perl(Data::Dumper)'
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
...... | 6.8 MB 00:00:01
Package perl-Data-Dumper-2.145-3.el7.x86_64 already installed and latest version
Nothing to do
检查服务器SSH公钥:
查看是否存在/home/git/.ssh/authorized_keys
文件。如存在,则改名(比如:authorized_keys.bak)。
创建客户端密钥对:
[root@client .~]# ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jPwVAK1111ip6/mbFbuyg113wyIcl1yX7OYb7113RLg [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .+oo |
| o o |
| . .... |
| = +. +. . |
| +.=o1o. . . |
| .. ++ .o o |
| .+ oo..o. 2...|
| oo*oo.o .o ....|
| .+o=1.o...++ . |
+----[SHA256]-----+
上传客户端的SSH公钥到服务器(/home/git/目录,文件名为你起的名字xxx.pub):
[root@client ~]# scp /root/.ssh/id_rsa.pub [email protected]:/home/git/admin.pub
id_rsa.pub 100% 400 148.9KB/s 00:00
切换到git用户:
su git
安装配置gitolite:
[git@git ~]# cd /home/git/
下载gitolite:
[git@git git]# git clone https://github.com/sitaramc/gitolite
Cloning into 'gitolite'...
remote: Enumerating objects: 9646, done.
remote: Total 9646 (delta 0), reused 0 (delta 0), pack-reused 9646
Receiving objects: 100% (9646/9646), 3.01 MiB | 18.00 KiB/s, done.
Resolving deltas: 100% (5987/5987), done.
把上传到服务器的管理员的公钥setup到gitolite:
[git@git ~]$ /home/git/gitolite/src/gitolite setup -pk admin.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/authorized_keys missing; creating a new one
(this is normal on a brand new install)
查看目录:
[git@git ~]$ ls -al
total 32
drwx------. 8 git git 241 Sep 28 23:33 .
drwxr-xr-x. 3 root root 17 Sep 2 06:24 ..
-rw-r--r--. 1 git git 400 Sep 28 23:08 admin.pub
-rw-r--r--. 1 git git 18 Oct 31 2018 .bash_logout
-rw-r--r--. 1 git git 193 Oct 31 2018 .bash_profile
-rw-r--r--. 1 git git 231 Oct 31 2018 .bashrc
drwxr-xr-x. 2 git git 6 Sep 28 23:21 bin
drwxr-xr-x. 6 git git 245 Sep 28 23:20 gitolite
drwx------. 6 git git 57 Sep 28 23:33 .gitolite
-rw-------. 1 git git 7130 Sep 28 23:33 .gitolite.rc
drwxr-xr-x. 2 git git 6 Sep 28 23:15 git-shell-commands
-rw-------. 1 git git 12 Sep 28 23:33 projects.list
drwx------. 4 git git 51 Sep 28 23:33 repositories
drwx------. 2 git git 56 Sep 28 23:33 .ssh
看到repositories目录下已经有了两个git仓库:
[git@git ~]$ ls -al repositories/
total 0
drwx------. 4 git git 51 Sep 28 23:33 .
drwx------. 8 git git 241 Sep 28 23:33 ..
drwx------. 8 git git 181 Sep 28 23:33 gitolite-admin.git
drwx------. 7 git git 162 Sep 28 23:33 testing.git
管理员可以把默认的远程管理的仓库gitolite-admin直接clone到本地进行管理git服务:
[root@client git]# git clone [email protected]: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.
使用tree命令查看目录结构(如无此命令,则需要安装yum install tree):
[root@client git]# tree gitolite-admin/
gitolite-admin/
├── conf
│ └── gitolite.conf
└── keydir
└── admin.pub
2 directories, 2 files
其中:
conf:是配置文件夹。
keydir:是客户端公钥文件夹,所有需要访问GIT的公钥需要放到这里。(需要注意的是文件名格式为:username.pub,username作为配置权限时的用户名。)
配置某用户对仓库的读写权限(修改conf文件夹下的gitolite 文件):
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
-
repo
代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。 -
RW
代表可读可写。 -
@all
代表所有人。 -
master
和dev
代表分支
这里可参考SVN的权限设置。
修改后可,管理员可提交修改到服务器,即可生效。
简单介绍到这里,更多内容可自行测试~