使用gitolite管理Git仓库权限

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/mdykj33/article/details/102777289

Git如何管理权限呢?GIT自身没有提供SVN类似的管理权限,需要使用gitolite来管理。本文在CentOS7环境下试验。

安装gitolite依赖的perl相关的包:

[root@git ~]# yum install 'perl(Data::Dumper)'Loaded plugins: fastestmirrorLoading 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 versionNothing 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.pubid_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/gitoliteCloning into 'gitolite'...remote: Enumerating objects: 9646, done.remote: Total 9646 (delta 0), reused 0 (delta 0), pack-reused 9646Receiving 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 -altotal 32drwx------. 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 .bashrcdrwxr-xr-x. 2 git  git     6 Sep 28 23:21 bindrwxr-xr-x. 6 git  git   245 Sep 28 23:20 gitolitedrwx------. 6 git  git    57 Sep 28 23:33 .gitolite-rw-------. 1 git  git  7130 Sep 28 23:33 .gitolite.rcdrwxr-xr-x. 2 git  git     6 Sep 28 23:15 git-shell-commands-rw-------. 1 git  git    12 Sep 28 23:33 projects.listdrwx------. 4 git  git    51 Sep 28 23:33 repositoriesdrwx------. 2 git  git    56 Sep 28 23:33 .ssh

看到repositories目录下已经有了两个git仓库:

[git@git ~]$ ls -al repositories/total 0drwx------. 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.gitdrwx------. 7 git git 162 Sep 28 23:33 testing.git

管理员可以把默认的远程管理的仓库gitolite-admin直接clone到本地进行管理git服务:

[root@client git]# git clone [email protected]:gitolite-adminCloning 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的权限设置。

修改后可,管理员可提交修改到服务器,即可生效。

简单介绍到这里,更多内容可自行测试~

猜你喜欢

转载自blog.csdn.net/mdykj33/article/details/102777289