[转载] 使用Gitolite来对Git的repository实现权限控制

mac2022-06-30  33

我们项目组打算从svn向git迁移,前几天我搭建了git环境,把代码从svn转移过来,然后所有成员都通过server上的git账号来做pull和push,一切都安置妥当,没有问题。但是后来其它项目组也打算使用这个git server,那么问题来了,之前那种授权的方式肯定是不够的,因为只要能连上server,那么他对这个server上所有的repository都有完全的读写权限,这显然是不可接受的。 所以打算使用Gitolite这个组件来做权限控制,搜索了下,找到的文章貌似都是老版本的,所以有了写这篇文章的想法。 Gitolite其实也是一个git repository,首先在server上安装好后,在client上把server上的repository clone下来,在本地做一些更改,再push回server,server端的hooks会根据push上来的配置来更新权限。 接下来,介绍下安装和配置步骤

准备工作

如果你之前是用git账号来做权限控制的话,记得把/etc/passwd里git用户的shell换回/bin/bash,然后把~git/.ssh/authorized_key里不再需要的key移除。 用ssh-kengen生成一对key,比如your-name和your-name.pub(下文均以此为例) 拷贝私钥到本用户的.ssh文件夹中

? 1 mv your-name ~/. ssh /

拷贝公钥到git server上

? 1 scp you-name.pub git@your.server.name.or.ip.address:~

为了以后方便,这里可以做一个server别名,指定连接所需的用户名,server的地址、端口以及私钥

? 1 vim ~/. ssh /config

输入以下内容

? 1 2 3 4 5 host githost user git hostname your.server.name.or.ip.address port 22 identityfile ~/.ssh/your-name

安装Gitolite

登录git server

? 1 ssh git@your.server.name.or.ip.address

下载最新的Gitolite

? 1 git clone git: //github .com /sitaramc/gitolite

安装,这里说明下,安装方式有3种,区别在与指定生成gitolite可执行文件的路径,这里采用Gitolite作者推荐的第二种,也就是把文件生成到$HOME/bin中,这样可以在接下来的bash中直接执行gitolite命令而不用指定路径(如果你的~/bin目录不存在记得先mkdir ~/bin)

? 1 gitolite /install - ln

设置,由于是第一次运行这个命令,所以这里指定的key是拥有Gitolite管理员权限的

? 1 gitolite setup -pk your-name.pub

此命令会在你的~/repositories/目录生成两个repository:gitolite-admin.git和testing.git

配置权限

退到你的workstation上

? 1 exit

clone刚才生成的gitolite-admin.git

? 1 git clone githost:gitolite-admin

注意这里用的是刚才准备好的server别名来连接的,其中最重要的区别是使用your-name.pub这个key,并且没有采用绝对路径来指定想要clone的repository,而是直接使用名称,并且这个名称也没有包括.git这个后缀。这一点很重要,因为这是用Gitolite的机制来clone,如果你跳过它直接使用git来,那么它的一些功能就无法实现了。以后clone, push其它需要受Gitolite权限控制的repository都必须这样做。 clone完后会有个新的目录gitolite-admin,里面有两个文件夹conf和keydir,第一个目录中包含的是配置文件,里面就是记录权限配置的地方,第二个目录中则包含所有用户的pub key。 现在我们打开配置文件,按照我们的权限配置需要进行设置

? 1 vim gitolite-admin /conf/gitolite .conf

我期望的配置如下,你也可以根据你的需要做更改

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @repos_a @proj1 @proj2 @repos_b @proj3 @proj4 @proj5    @team_a @user1 @user2 @team_b @user3 @user4    repo gitolite-admin RW+ = your-name    repo @repos_a RW+ = @team_a R = @all    repo @repos_b RW+ = @team_b

这个配置很简单,首先定义了两个repository group,再又定义了两个user group,group的好处就是以后添加repository和user的时候,不需要再单独配置,只需加入到对应的group中即可。

添加全新的repository,在上面提到的gitolite.conf文件中配置好对应的名称和权限,再push到server即可,server会自动帮你创建一个empty的bare repository。如果你已经有一个repository,想把它加进来的话,那就把它拷贝到git server上的~/repositories文件夹里,记得文件夹名要以.git结尾,并且这个repository一定要是bare的,(你可以通过拷贝repository里的.git文件夹,然后运行git config --bool core.bare true,也可以运行git clone --bare your-repository来得到bare repository)。这种方式还有一个额外的操作就是在server上运行一次gitolite setup。移除repository,在配置文件中移除对应的repo,然后push,接着再删除server上对应的文件夹即可。 添加user,把pub key拷贝到keydir文件夹里删除user,一样,移除keydir里对应的pub key

注意,上面说的操作,都必须在clone的gitolite-admin里做更改,然后push,千万别在server上自己来,那样是没用的,因为这些权限配置、repository管理都有一些额外的操作,gitolite-admin会帮你搞定一切。 把你的更改push回server上,试试clone,pull,push,看看权限是否正确。比如

? 1 git clone githost:proj3

更多的内容,可以参考官方文档 本文由Roy最初发表于:http://blog.chengbo.net/2012/04/20/use-gitolite-to-manage-git-repositories.html,你可以在保持文章完整和保留本声明的情况下转帖、分发和印刷等。

转载于:https://www.cnblogs.com/cxt-janson/p/5190230.html

最新回复(0)