ubuntu git server

来源:互联网 发布:淘宝购买小号 编辑:程序博客网 时间:2024/04/28 16:10

今天开始配置git服务,之前已在ubuntu虚拟机上配置过,但最后客户端连接失败。先重新安装一次,并记录过程:

参考:http://my.oschina.net/u/1240239/blog/495654

1、安装配置git

      A、安装:

       sudo apt-get install git-core openssh-server openssh-client

    git-core是git版本控制核心软件

    安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传

  b、配置:

  • 创建所有代码仓库和用户权限的管理者git,并更改用户的密码。在当前用户下执行:
    sudo useradd -m -s /bin/bash git
    sudo passwd git

    useradd会在ubuntu上增加一个git用户

  • 创建git仓库的存储目录、更改文件目录属主为代码仓库的管理者git,只让git用户对此目录有权限。本文档以/srv/git目录做为git仓库的存储目录。在当前用户下执行:
    sudo mkdir /srv/git
    sudo chown git:git /srv/git
    sudo chmod 700 /srv/git

    2安装配置gitosis

    1. 安装gitosis前准备

      • 初始化git用户。在任何一台机器上使用git,第一次必须初始化一下。在当前用户下初始化全局的git信息:
        git config --global user.name "jackliu"
        git config --global user.email "xcltl618@gmail.com"

      • 安装python的setup tool。在当前用户下执行如下命令安装:
        sudo apt-get install python-setuptools

    1. 安装gitosis。在当前用户下进行安装,执行如下命令: 

      cd /tmp
      git clone https://github.com/res0nat0r/gitosis.git

      上面有2个零啊,不要打错了

      1. cd gitosis

      2. sudo python setup.py install
        默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接到/home /repo,su到git用户,执行如下命令:
        ln -s /srv/git /home/git/repositories
        然后退出git用户,一定要切换到git用户下执行



    2. 到这一步,/home/git/下没有repositories这个文件夹,再查看,原来有个gitcy用户,在那个文件夹里有了repositories文件夹。可是删了该用户后,不管怎么重复之前打步骤,始终不能生成该文件夹,后来,新建一个虚拟机测试,git账户也不能生成这个文件夹,原来是需要手动创建打。
    3. 创建/home/git/repositories  : sudo mkdir /home/dir/repositories
    4. sudo chown git:git /home/dir/repositories
    5. sudo chmod 755 /home/dir/repositories
    6. ln-s /srv/git /home/dir/repositories
    7. ssh-keygen -t rsa    在/home/git/.ssh/下生成公钥
    8. 切换到其他账户,ssh-keygen -t  rsa 生成管理员公钥/home/cy/.ssh/
    9. scp /home/cy/.ssh/id_rsa.pub git@127.0.0.1:/tmp
    10. su git
    11. cd /tmp
    12. sudo chmod a+r id_rsa.pub
    13. sudo -H -u git gitosis-init < /tmp/id_rsa.pub 初始化管理仓库
    14. sudo chmod 755 /home/git/repositories/gitosis-admini.git/hooks/post-update
  • 在git服务器上搭建测试项目库

    建立仓库名“test”的测试仓库

    1. mkdir /srv/git/test.git     (用git账户创建test.git)
    2. cd /syv/git/test.git
    3. git init --bare  (初始化仓库




  • gitosis本身的配置也是通过git来实现的。
  • 克隆gitosis-admin.git仓库
  • 切换到管理员账户(cy)
  • 在git管理员用户目录下,git clone git@<server>:gitosis-admin.git
  • 如果出现:
    fatal: '~/gitosis-admin.git' does not appear to be a git repository fatal: The remote end hung up unexpectedly
    改成:
    sudo git clone git@<Server-IP>:/home/repo/gitosis-admin.git
  • cd gitosis-admin/       
  • 该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥:各个用户按照前面提到的办法生成各自的ssh公钥文件后,把所有人的ssh公钥文件都拿来,按名字命名一下,比如b@pc1.pub, lz@pc2.pub等,统统拷贝到keydir下:
    su root
  • cp /path/.ssh/id_rsa.pub ./keydir/b@pc1.pub
    • 修改gitosis.conf文件
      [gitosis]
      [group gitosis-admin]
      members = test@liutailin-ThinkPad-Edge ltl@it-c-015
      writable = gitosis-admin 

      [group hello]
      members = ltl@liutailin-ThinkPad-Edge ltl@it-c-015
      writable = test

      这个配置文件说明:

      members = 后面跟的一定要和 .pub的前缀一致,否则没有访问权限

      目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。 加入新文件、提交并push到git服务器:
      git add .
      git commit -am “add test prj and users”
      git push origin master

      • gitosis-admin组成员有test@liutailin-ThinkPad-Edge, ltl@it-c-015, 该组对gitosis-admin仓库有读写权限;

      • hello组有test@liutailin-ThinkPad-Edge, ltl@it-c-015两个成员, 该组对test仓库有读写权限;

    测试搭建的项目库

    服务器搭建完了,并且有一个空的项目test在服务器上。接下来测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始化一个版本。 下面是在ltl@it-c-015客户端完成。
    mkdir test-ori
    cd test-ori/
    git init
    echo “/*add something*/” > hello
    git add .

    git commit -am “initial version”
    git remote add origin git@<server-ip>:test.git
    git push origin master

     添加其他账户并clone  在cy-virtual客户机上

     cd ~

     ssh-keygen -t rsa

     scp .ssh/id_rsa.pub git@<server-ip>:/tmp 

    服务端:

    cp /tmp/id_rsa.pub <管理员gitosis-admin目录>/keydir/cy@virtual.pub

修改gitosis.conf文件
[group test]
members = 添加cy@virtual


并提交管理更改

git add .
git commit -am “and newusers”
git push origin master

现在客户端可以clone


客户端:在需要克隆的目录: git clone git@<server-ip>: test.git


完成搭建


    




  • git 帐号执行sudo ,报不在sudoers文件中,修改/etc/sudoers,添加当前用户

  • git    ALL=(ALL:ALL) ALL。我是直接添加的git组:@git    ALL=(ALL:ALL) ALL



  • 如果修改了端口,clone: git clone ssh://git@<serverip>:22/git项目。就是必须加ssh://,以及添加端口。默认端口22(ssh的端口)


  • Linux中SSH默认端口为22,:
    在/etc/ssh/sshd_config中找到Port 22,将其修改为60000,或使用/usr/sbin/sshd -p 60000指定端口。

    如果用户想让22和60000端口同时开放,只需在/etc/ssh/sshd_config增加一行内容如下:
    [root@localhost /]# vi /etc/ssh/sshd_config
    Port 22
    Port 60000
    保存并退出
    [root@localhost /]#service ssh restart



0 0