yum install python-setuptools
git clone https://github.com/tv42/gitosis.git
cd gitosis
sudo python setup.py install
ln -s /opt/git /home/git/repositories #gitosis默认仓库文件位于/home/git/下面,/opt/git是我们的仓库文件位置,所以我们可以直接创建一个连接
mv /home/git/.ssh/authorized_keys /home/git/.ssh/ak.bak #因为gitosis会管理用户公钥,所以我们直接mv掉秘钥配置文件也可以
#至于git用户的shell改不改无所谓
sudo -H -u git gitosis-init < /home/git/.ssh/id_dsa.pub #代替authorized_keys进行管理
#报错的话就需要修改权限chown -R git:git /home/git因为新建的链接所属用户为root,仓库/opt/git的所属用户也需要修改为git用户
chmod /opt/git/gitosis-admin.git/hooks/post-update #修改权限
git clone git@ip:gitosis-admin.git #在windows上执行,正常的话这里不需要输入密码,执行完后会在本地有一个gitosis-admin文件夹,在里面有几个文件,如果报错,就改成绝对路径
#找到gitosis.conf并进行修改,添加以下内容。注意这个如果报错的话就再试试绝对路径
[group mobile]
members = git #git是用户名,我直接使用的是git@localhost.localdomain否则会报错
writable = phone #这个相当于仓库名 执行
git commit -am 'add iphone_project and mobile group' git remote add origin git@gitserver:phone.git #我这里会报远程库已存在,执行git remote rm origin删除远程库再次执行即可。而且这里不能使用绝对路径,直接:项目名即可 git push origin master 如果git push origin master 报错,提示没有权限或者不是git仓库时可以尝试以下方法,我的设置之后就正常了
可能就还需要在git服务器上的本地gitosis-admin.git(setup.py时安装的仓库位置那里指定的路径)里面修改gitosis.conf添加以下跟上面相同的内容
[group mobile]
members = git #git是用户名,我直接使用的是git@localhost.localdomain否则会报错
writable = phone #这个相当于仓库名
如果还是报错,可以尝试配置使用秘钥登录
增加gitosis-admin.git权限

按照以上方式添加git仓库后,并往新仓库添加文件更新到仓库,再次操作gitosis-admin会报以下错误

$ git push origin master
To 172.16.1.116:phone.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@172.16.1.116:phone.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

执行git pull origin master将仓库更新到最新即可

我再次试着把git用户对phone的权限改为只读,然后在服务器上先执行git pull origin master然后再次git push origin master。意思是先将远程更新更新本地仓库再提交本地仓库的更新

然后在Windows下用git用户的phone仓库下试着git push会报错。再次修改回写的权限后,在Windows本地的phone仓库里也要先git pull将远程更新更新到本地

现在我们来模拟正常使用情况:

  项目组需要新增一个项目,所以我们先在仓库位置/opt/git位置新建一个aa.git然后cd aa.git执行git init初始化一个空仓库

  如果不先初始化,会出现一个很奇怪的情况,下面的xiaomiproject是我不手动初始化aa.git,让gitosis-admin自动创建的仓库,可以发现,多了配置文件,也就是说开发人员也可以修改项目配置文件了

  最好再把aa.git 所有者改为git用户和git用户组

  然后在Windows下面的gitosis-admin下面进行修改gitosis.conf文件添加以下内容

[group aa]
members = git@localhost.localdomain
writable = aa

  然后git commit -am 'set aa '

  添加远程git remote add origin git@ip:gitosis-admin.git

  接着执行git push origin master

  正常的话效果如下

  

注意:一定要记得使用git push ,git pull, git push origin master ,git pull origin master,特别是当gitosis-admin的gitosis.config改变时

为git服务器配置gitosis管理权限的更多相关文章

  1. CentOS安装配置Git服务器(gitosis)

    主要参考: http://blog.csdn.net/dengjianqiang2011/article/details/9260435 辅助参考: http://freeloda.blog.51ct ...

  2. CentOS6.4下Git服务器Gitosis安装配置

    1.安装GIt: #yum install git 2.增加一个git用户 #useradd git #passwd git 3.创建git仓库存储目录,设置权限 #mkdir /home/git/r ...

  3. 软工实践练习——使用git进行代码管理心得

    一.在Github上注册账户.其中创建organization在小组成员的账户上创建,并在其账户上创建了小组的版本库.在创建organization的过程中,参考了助教提供的博客:http://sef ...

  4. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结   JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...

  5. Git Flow 分支管理简述

    概述 Git 是什么 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...

  6. git+gitolite如何实现权限控制

    前言 首先说明一下,这还是本人第一次写这类文章,如有不妥,多多见谅. 基本情况 因为现在公司的人不是很多,但是还对代码有着严格的管控,所以采用了gitolite的管理方式 其实正常来讲,这种权限的把控 ...

  7. Linux命令详解-Apache网站服务器配置和管理

    1.Apache网站服务器配置和管理 1.源码包安装 2.rpm包安装 rpm –a | grep httpd 3.启动服务 service httpd start 4.配置文件: /etc/http ...

  8. 使用scm-manager搭建git/svn 代码管理仓库

    使用 scm-manager 搭建 git/svn 代码管理仓库 1.在官网上下载scm-manager 下载地址https://www.scm-manager.org/download/ 2. 配置 ...

  9. 使用git进行源代码管理

    git是一款非常流行的分布式版本控制系统,使用Local Repository追踪代码的修改,通过Push和Pull操作,将代码changes提交到Remote Repository,或从Remote ...

随机推荐

  1. QThread使用——关于run和movetoThread的区别

    QThread 使用探讨 2010-10-23 00:30 注意:本文停止更新,请优先考虑 Qt 线程基础(QThread.QtConcurrent等) dbzhang800 2011.06.18 Q ...

  2. Hibernate的cascade属性 特别是 cascadeType.all的 作用

    1.JPA中的CascadeType.ALL并不等于{CascadeType.PESIST,CascadeType.REMOVE,CascadeType.MERGE,CascadeType.REFRE ...

  3. 【转载】URL编码与两次encodeURI

    当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码. encodeURI函数采用UTF-8对 ...

  4. Java GC机制中Minor GC/Full GC

    Minor GC Young GC Full GC Major GC https://blog.csdn.net/chenleixing/article/details/46706039 内存划分为 ...

  5. 利用python操作excel

    https://zhuanlan.zhihu.com/p/51292549 打开程序:https://segmentfault.com/q/1010000002441500

  6. MVC校验方式【六】

    一.以往的校验都是自己写正则表达式校验,本篇讲的是通过MVC自带的jquery文件进行校验 实现步骤:1. 在webform页面中引入两个jquery文件,10,11行的代码. <%@ Page ...

  7. js的点滴2

    博客: 1.大牛博客:每一篇博客都需要仔细的看.http://blog.csdn.net/hongchh/article/details/54744318 2.layui:的作者 贤心的博客:http ...

  8. HashMap 和 HashTable差别

    代码版本 JDK每一版本都在改进.本文讨论的HashMap和HashTable基于JDK 1.7.0_67.源码见这里 1. 时间 HashTable产生于JDK 1.1,而HashMap产生于JDK ...

  9. netty-socketio(一)之helloworld,与springboot整合

    netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架. 1.参考资料 (1)netty-socketio项目github地址: https:/ ...

  10. python----操作文本文件

    一.文本文件基本操作 1.1 打开文本文件,得到文件句柄并赋值给一个变量 f = open('test', 'r', encoding='utf-8') # 默认打开模式为r 文件路径:相对路径.绝对 ...