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

我们项目组打算从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 [email protected]:~

为了以后方便,这里可以做一个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 [email protected]

下载最新的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,里面有两个文件夹confkeydir,第一个目录中包含的是配置文件,里面就是记录权限配置的地方,第二个目录中则包含所有用户的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,你可以在保持文章完整和保留本声明的情况下转帖、分发和印刷等。

时间: 2024-10-20 18:50:44

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

使用Gitolite来对Git的repository实现权限控制

我们项目组打算从svn向git迁移,前几天我搭建了git环境,把代码从svn转移过来,然后所有成员都通过server上的git账号来做pull和push,一切都安置妥当,没有问题.但是后来其它项目组也打算使用这个git server,那么问题来了,之前那种授权的方式肯定是不够的,因为只要能连上server,那么他对这个server上所有的repository都有完全的读写权限,这显然是不可接受的. 所以打算使用Gitolite这个组件来做权限控制,搜索了下,找到的文章貌似都是老版本的,所以有了写

再谈git的http服务-权限控制gitweb版(未成功)

截至目前,对gitweb的掌握还没达到最终目标,仅仅实现了通过浏览器来浏览项目,通过git命令仍然未能clone项目.但仍然要记录下来,主要是因为打算暂时放弃这条路,而所收获的一些经验还是要记录下来.说不定哪天又捡起来了呢. 首先描述下目标:可以按照项目.人员来分别控制项目的读写权限.方法应该很多,之前通过git-http-backend的hook可以搞定,gitlab也应该可以搞定.根据已有的资料,gitweb也应该可以搞定.思路之一应该是scriptalias,把git命令的申请路由到git

再谈git的http服务-权限控制hooks版

通过git-http-backend方法提供的http服务基本上可以做到认证用户才能使用,但只能控制到服务器路径访问,而且无法区分读写.经过不懈努力,找到了方法,但涉及到脚本编写,暂时未有成熟版本提供. 基本思路就是利用apache的路径权限设置控制版本库的读权限:通过hooks/pre-receive钩子来控制版本库的写权限,具体钩子的原理和用户这里不写了.git提供了几个全局变量可以在pre-receive钩子里面使用,详情可以参看git-http-backend manual page.

ubuntu Gitolite管理git server代码库权限

公司代码库用Git,全部用SSH认证,多个代码库多个用户,权限管理是个头疼的问题,今天终于有空测试下Gitolite, Gitolite是在Git之上的一个授权层,依托sshd或者httpd来进行认证.(概括:认证是确定用户是谁,授权是决定该用户是否被允许做他想做的事情). Gitolite允许你定义访问许可而不只作用于仓库,而同样于仓库中的每个branch和tag name.你可以定义确切的人(或一组人)只能push特定的"refs"(或者branches或者tags)而不是其他人.

linux服务器上搭建gitolite实现对git server的版本库的权限控制

一.环境介绍: 1.1Git账户管理机器manageip:10.0.0.56 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [[email protected] ~]# hostname manage [[email protected] ~]# tail -2 /etc/hosts 10.0.0.56 manage 10.0.0.11 git-server 1.2.git远程版本库git-se

Git 的安装 与 权限的控制 (使用Gitolite)

一: Git的安装(centos)  (参考 http://www.ccvita.com/tag/git/) 注意: A: Git 没有什么server端和client端之分,Git属于分布式版本控制系统. B: Git 安装步骤 yum install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel wget https://www.kernel.org/pub/software/scm/

git 删除 repository

git 删除 repository 打开版本库,选择要删除的repository 点击Settings 找到删除选项 输入repository name,点击delet…… 删除本地仓库 执行git init命令 在本地目录下找到.git文件 删除.git 删除本地仓库目录文件 $$ MINGW32 ~ $ cd c:/PycharmProjects/test $$ MINGW32 ~/PycharmProjects/test (master) $ pwd /c/Users/china/Pych

转载——分享一个html+js+ashx+easyui+ado.net权限管理系统

EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得去看懂,还有一些不是在推广自己的代码生成器就是在卖权限组件,看着漂亮的UI和完善的功能就是没源码学习,真是恼人. 前段时间公司项目阶段性结束了,就抽空把权限控制的部分抽取出来写了个html+js+ashx+ado.net的权限管理系统分享给一些初学者,这个权限系统demo没有MVC.没有ORM.数据

git忽略掉文件权限检查

有时 git diff 执行显示文件内容没变化,但是有 old mode xxx new mode,原因是文件的权限,被chmod变化了,这种变化也被 diff 识别出来了,让git忽略掉文件权限检查可以使用一下命令: git config core.fileMode false 原文地址:https://www.cnblogs.com/senlinyang/p/8435928.html