zoukankan      html  css  js  c++  java
  • 为git服务器配置gitosis管理权限

    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 755 /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改变时

  • 相关阅读:
    JS兼容性总结
    [妙味DOM]第五课:事件深入应用
    关于iOS开发的学习
    世界经典——乔布斯
    梦想改变世界
    乔布斯在斯坦福大学的演讲
    10步让你成为更优秀的程序员
    程序员的八个级别
    程序员的学习和积累
    哈佛大学二十条训言
  • 原文地址:https://www.cnblogs.com/biaopei/p/9353349.html
Copyright © 2011-2022 走看看