• 安装gitolite搭建git服务器


    本文讲解在ubuntu上安装gitolite,为客户端提供git仓库服务器功能。ubuntu版本:server 16.04
     

    安装准备

    1.安装gitolite前,要安装 git,openssh-server和 openssh-client

    apt-get update
    apt-get -y install git openssh-server openssh-client

    2.准备好你的ssh私钥和公钥

    没有的话可在本地执行
    ssh-keygen -t rsa -C "yourname@example.com 
    生成一个,生成后在~/.ssh/目录里,id_rsa是私钥,id_rsa.pub是公钥,文件生成后可以改名。
    本文用的客户端管理用户都在同一服务器上。

    3.上传公钥

    将公钥上传到服务器备用,比如是/tmp/YourName.pub
     

    添加git用户

    添加git管理用户gitadmin
    useradd -m -d /data/db/gitadmin -s /bin/bash gitadmin
    su - gitadmin
    ssh-keygen -t rsa
    cd .ssh
    mv id_rsa gitadmin
    mv id_rsa.pub gitadmin.pub

    添加git仓库用户

    useradd -m -d /data/db/git -s /bin/bash git
    cp gitadmin/.ssh/gitadmin.pub git
    chown git.git git/gitadmin.pub

    安装gitolite

    1.登录到git用户
    su - git

    2.确保 ~/.ssh/authorized_keys 文件不存在或者为空

    mkdir .ssh
    chmod 700 .ssh

    3.把公钥拷贝到git主目录下

    #上边已经复制过,不需要操作以下命令
    cp /data/db/gitadmin/.ssh/gitadmin.pub $Home/gitadmin.pub

    4.下载并安装gitolite

    git clone https://github.com/sitaramc/gitolite
    mkdir -p $HOME/bin
    gitolite/install -to $HOME/bin

    5.初始化gitolite, 同时配置管理员

    $HOME/bin/gitolite setup -pk gitadmin.pub
    #运行此命令后会在.ssh文件夹中生成 authorized_keys 文件
    cat .ssh/authorized_keys
    #///////////////////////文件内容////////////////////////////////////////
    # gitolite start
    command="/data/db/git/bin/gitolite-shell gitadmin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLEz4ATHj+07/PHJheOTaPN2Vr9HGWy80Pujx2UoTFRak88W0BhW7JO/IlTpO30JHw72bQ6u24ZP4DbafuKZLIG2PYtYfVyhIsbNJp9U8BR0G3CQJZGYgh4znpYKkFV2HhXwzFOpEcpBoVYnzJ2y/rmgBocHLc22KLYVDVMam9F2qm715lhWlccfJzAcePvvOnHkgUJESWGm2OJcbyeT1nrL+nkgqpNyrfc2nIZKqBXuxr7+aHT4YuGQ6lyHUR0CstJeB43KGDM+pxJEqXfOla1Jb2HKWyG1wiuFUrOaRHoPjhWsAB371aMbHJtM+nJV+PWZ5ccl/nZnd83CbDvlPV gitadmin@hhk-op-01
    # gitolite end
    #///////////////////////////////////////////////////////////////////////
    #退出git用户
    exit

    克隆管理库到本地

    不要直接在服务器上创建和管理仓库,仓库管理是通过叫gitolite-admin的仓库进行的,这个仓库在初始化gitolite时就已经生成了,管理员可以克隆到本地进行配置,在客户端执行
    su - gitadmin
    git clone git@127.0.0.1:/gitolite-admin.git
    #>>>>>>>>>>>>>>>输出内容>>>>>>>>>>>>>>>>>>>>>>>
    Cloning into 'gitolite-admin'...
    Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
    Permission denied (publickey).
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    #需要以下操作

    如果提示输入密码,编辑客户端的~/.ssh/config文件,添加以下内容:

    #添加文件
    ~/.ssh/config
    #///////////////////////////////文件内容////////////////////////////
    Host 服务器地址
        HostName 服务器地址
        User git
        Port 22
        IdentityFile ~/.ssh/gitadmin
    #//////////////////////////////////////////////////////////////////
    #在运行命令
    git clone git@git:/gitolite-admin.git
    cd gitolite-admin/
    vim conf/gitolite.conf
    #///////////////////////////////文件内容////////////////////////////
    ###########################################
    # user and group
    ############################################
    
    # general
    @admin = gitadmin ebj-hhk
    @cm = @admin 
    @op = @cm hhkgit
    @confuser = @cm hhkgit
    
    ############################################
    # repo groups
    ############################################
    
    @apps_repos = apps/rainbow apps/mountain apps/forest apps/hail apps/lake apps/glacier apps/inverse apps/hamster apps/sunlight
    
    @conf_repos = conf/rainbow conf/mountain conf/forest conf/hail conf/lake conf/glacier conf/inverse conf/hapoxy conf/hhk-web-01-nginx conf/hamster conf/sunlight conf/hhk-web-01b-nginx
    
    repo gitolite-admin
        RW+     = @cm gitadmin
    
    repo testing
        RW+C    =   @cm
        RW+     =   @all
    
    repo @apps_repos
        RW+C    =    @op
    
    repo @conf_repos
        RW+C    =    @confuser
    #///////////////////////////////文件内容结束///////////////////////////////////
    
    git add .
    git commit -m "add"
    #出现错误
    #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    *** Please tell me who you are.
    
    Run
    
      git config --global user.email "you@example.com"
      git config --global user.name "Your Name"
    
    to set your account is default identity.
    Omit --global to set the identity only in this repository.
    
    fatal: empty ident name (for <gitadmin@hhk-op-01.(none)>) not allowed
    #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    #运行以下命令解决
    git config --global user.email "gitadmin@example.com"
    git config --global user.name "gitadmin"
    git commit -m "add"
    git push

    添加用户和仓库

    gitolite-admin里面两个文件夹keydir和conf:
    1.keydir存储用户的公钥,添加用户可以直接拷贝用户的公钥到此文件夹;
    2.conf目录里的gitolite.conf是配置文件,格式如下:
    repo gitolite-admin
        RW+ = gitadmin
    
    repo testing
        RW+ = @all

    比如要添加一个仓库'foo',并给alice,bob和carol不同的权限,首先把他们的公钥(alice.pub,bob.pub,carol.pub)拷贝到keydir;然后编辑conf/gitolite.conf添加:

    repo foo
        RW+ = alice
        RW = bob
        R = carol

    最后把修改push到服务器:

    git add conf
    git add keydir
    git commit -m "added foo, gave access to alice, bob, carol"
    git push
    服务器会自动添加用户到~/.ssh/authorized_keys,并且添加一个新的空仓库’foo’。
     
    上述操作完成后,alice、bob和carol就可以将仓库克隆到本地:
    git clone git@服务器地址:foo

    查看对仓库的操作权限,可以在客户端执行

    ssh git@服务器地址 info

    访问规则示例

    gitolite的访问规则功能强大,以下是示例:
    repo foo
        RW+ = alice
        - master = bob
        - refs/tags/v[0-9] = bob
        RW = bob
        RW refs/tags/v[0-9] = carol
        R = dave
    规则解释:  
    alice对所有branch和tag拥有所有权限--create, push, delete, rewind/overwrite等等
    bob可以创建或者fast-forward push名字中不以’master‘开头的branch,可以创建不以v+数字开头的tag
    carol只可以创建v+数字开头的tag
    dave只有只读权限,可以clone/fetch。

    管理组

    某些时候使用组来管理用户是非常方便的,下面是两个组:
    @staff = alice bob carol
    @interns = ashok
    repo secret
    RW = @staff
    repo foss
    RW+ = @staff
    RW = @interns

    组成员可以累加,下面对@staff的定义和上面的效果是一样的:

    @staff = alice bob
    @staff = carol

    组也可以包含其他组:

    @all-devs = @staff @interns

    @all是一个特殊组名称,既可以指所有的仓库,可以指所有的用户。

    常用命令

    客户端可以通过ssh远程执行一些命令,以下命令可以查看帮助:
    ssh git@host help
    info是最长用到的命令,在命令后跟上’-h’可以查看命令的用法。
     
    在服务器端有非常丰富的使用命令,运行gitolite help查看详细信息。
  • 相关阅读:
    HTML页面保存为图片
    一些chrome调试
    hooks使用的一些注意点
    React(v16.8) Hooks 简析
    基于 React.js 和 Node.js 的 SSR 实现方案
    移动端垂直居中对齐
    python XML ElementTree的增删改查
    python实现XML解析的三种方法
    git的用法
    Appium获取元素的方式
  • 原文地址:https://www.cnblogs.com/opma/p/11607329.html
Copyright © 2020-2023  润新知