zoukankan      html  css  js  c++  java
  • 使用Gitosis搭建Git服务器

    1.安装gitosis
    首先是获取gitosis(这里假设你已经安装过git):
     
    git clone git://github.com/res0nat0r/gitosis.git
    接下来安装gitosis:
     
    sudo python setup.py install
     
    接下来添加用来管理仓库的用户,用户名任意,我们这里使用git:
     
    useradd git
    Mac用户在「系统偏好设置 » 用户与群组 」中添加。
     
    修改PATH,使git用户可以调用git:
     
    vi /home/git/.bashrc
    PATH=/usr/local/bin:/usr/local/git/bin:$PATH
    创建key pair,并拷贝public key到/tmp下,这样可以确保gitosis-init命令对其有读取权限:
     
    ssh-keygen -t rsa
    cp ~/.ssh/id_rsa.pub /tmp/id_rsa.pub
    以git用户来执行gitosis-init命令:
     
    sudo -H -u git gitosis-init < /tmp/id_rsa.pub
    此时/home/git下增加了两个目录:
     
    gitosis
    repositories
    其中gitosis是gitosis的根目录,repositories是仓库存放目录。
     
    如果出现以下错误:
     
    if install git from source, otherwise:
    raise child_exception
    OSError: [Errno 2] No such file or directory
    那么做个symlink:
     
    ln -s /usr/local/bin/git /usr/bin/git
    给脚本post-update赋予可执行权限:
     
    sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
    2. 添加新仓库
    gitosis的管理是通过git来管理的,clone一下:
     
    git clone git@localhost:gitosis-admin.git
     
     
    cd gitosis-admin
    ls -l
    -rw-r--r--  1 weizhifeng  staff  124  6 14 13:45 gitosis.conf
    drwxr-xr-x  3 weizhifeng  staff  102  6 14 13:46 keydir
    keydir目录用来存放用户的public key(.pub文件),gitosis.conf为配置文件。
     
    看一下配置文件:
     
    cat gitosis.conf
    [gitosis]
     
    [group gitosis-admin]
        members = root@pc3
        writable = gitosis-admin
    其中group代表一个组,writable是仓库名,members是此仓库的成员,可以有多个成员,用空格进行分割。
     
    添加一个新仓库:
     
    [group test]
        members = root@pc3 pc2
        writable = test
    把更改提交并push到git@localhost:gitosis-admin.git:
     
    git commit -a -m "添加新仓库test"
    git push
    在本地创建一个仓库
     
    cd /home/git/repositories
    mkdir test.git
    git init --bare test.git
    chown -R git.git test.git
     
     
    3. 添加用户
    假设我们要添加的用户为pc2,那么需要创建key pair:
     
    ssh-keygen -t rsa
    假设生成的public key为~/.ssh/pc2.pub
     
    注意.pub文件名和你要在members中添加的用户名要完全一样。
     
    拷贝pc2.pub到keydir中:
     
    cp ~/.ssh/pc2.pub keydir/
    把更改push到gitosis-admin.git:
     
    git commit -a -m "添加pc2到test仓库"
    git push
    接下来把private key分发给pc2,然后他就可以从自己的机器上进行clone了:
     
    git clone git@SERVER_HOSTNAME:test.git
    如果出现以下错误:
     
    ERROR:gitosis.serve.main:Repository read access denied
    fatal: The remote end hung up unexpectedly
    是因为使用了内容相同,名字不同的public key(.pub)。
     
    4.其他
    如果SSH使用的不是22端口,那么请如下修改:
     
    vi ~/.ssh/config
    Host myserver.com
    Port 2345     
     
    配置钩子同步代码

    在git仓库hooks下新建post-receive

    cd /data/git/xxx.git/hooks

    vi post-receive

    修改代码:

    #!/bin/bash

    git --work-tree=/home/website/wwwroot(项目路径) checkout -f(注意项目路径文件权限)

     

    git分支:

    git用户提权:

    vim /etc/sudoers

    添加:

    Defaults visiblepw

    git ALL=(ALL:ALL) ALL

    在命令行执行:

    将nginx用户添加到git组:

    gpasswd -a nginx git 

     

    创建分支:

    git checkout -b dev    #git checkout 命令加上-b  参数表示创建并切换,相当于执行了以下两条命令:

    git branch dev        #创建分支

    git checkout dev     #切换分支

    使用git branch命令查看当前分支:

    git branch命令会列出所以分支, 当前分支前会标一个*号

    切换分支:   git checkout master

    git merge dev   :   把dev分支合并到master上:

    git merge 命令用于合并制定分支到当前分支

    git  branch -d dev   #删除dev分支

    git branch  :  查看分支

    详细教程:https://git-scm.com/book/zh/v2

     
  • 相关阅读:
    洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
    洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告
    vector-pop_back
    vector-push_back
    vector-push_back
    vector-max_size
    vector-max_size
    vector-insert
    vector-insert
    vector-front
  • 原文地址:https://www.cnblogs.com/uvwill/p/10986407.html
Copyright © 2011-2022 走看看