美文网首页Android框架相关Android原理git
使用gitolite搭建完美Git服务器以及Git钩子的使用

使用gitolite搭建完美Git服务器以及Git钩子的使用

作者: lMadman | 来源:发表于2017-08-23 01:58 被阅读0次

    上节讲到如何使用在阿里云上申请一个9.9的服务器初始化配置,那么现在需要在这个服务器上搭建git服务器,下面来说一下我这一周多求学的知识。

    一、使用gitolite搭建git服务器

    1.首先使用ssh 用户名@ip地址 远程连接到你的服务器;
    2.然后输入用户的密码去登录;
    3.现在进去正题,使用yum update更新所需要的数据包,系统会先提示你需要更新那些包,输入y去执行更新;


    以上是一个更新完整的过程。

    4.安装git

    yum install git
    

    安装的顺序大概和上面的一样,先会告诉你有哪些需要更新,然后输入y,执行更新。安装成功之后可以输入 git 查看其相关的命令。

    5.安装perl

    yum install perl
    

    注意:在安装perl的同时,最好把 cpan 也同时安装一下

    yum install cpan
    

    6.安装openssh

    yum install openssh
    

    以上这些都是开发前的环境准备,现在开始进入正题;

    7.添加git、gitadmin用户

    useradd git 
    //添加一个用户名为 git 的用户,这个名字你可以随便起
    //比如,我想添加一个madman用户,使用useradd madman
    //以上解释是害怕你们被误导,但是建议用户名还是起的有意义比较好
    

    8.相关命令

    • 添加用户的ssh登录密码
    passwd git  //为git用户添加登录的密码
    
    • 查看所有的用户
    cat /etc/passwd   //这个命令用来查看所有的用户
    

    这里有人会问,为什么会有这么多用户呢?大多都是系统自带的,而只有像root、git这样的以/bin/bash的,是可以使用ssh登录的。

    • 查看所有用户的详细信息
    cat  /etc/shadow
    

    别问我用户:后面那一长串东东是什么鬼,我只能说我也不是很清楚,应该有端口号,有用户的id什么的吧,具体你们用到的时候可以上网搜一下,那么第一个是用户的密码,当然是经过加密处理的。
    还有的是 ntp:!!:17357 是什么鬼?这是说明这个用户是被锁定的,其实一开始添加 git 用户的时候,如果不给 git 用户添加密码,它的状态也是被锁定的。比如我现在添加一个 gitadmin 用户来查看一下:
    • 删除用户
    userdel -r gitadmin    //删除gitadmin用户以及关联文件
    

    9.在 gitadmin 用户下生成公钥私钥

    ssh-keygen  //中间敲三次回车
    //第一次:默认生成的路径,回车
    //第二次第三次 输入密码 确认密码,建议回车
    

    10.把私钥移动到tmp目录下

    cp id_rsa.pub /tmp/gitadmin.pub
    //ps:截图中敲错单词了,不要在意这些细节,最后我又改回来了
    

    11.在 git 用户下安装 gitolite
    首先,来到 git 用户的home目录下,依次执行

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

    12.设置管理员的私钥
    在git用户下的/bin目录下,执行

    ./gitolite setup -pk /tmp/gitadmin.pub
    

    在git用户下会多出两个文件projects.list 、respositories:


    respositories文件是所有的仓库,这里在git用户下只是做配置;
    cd 到respositories目录下,我们查看一下目录下的东西:


    13.切换到gitadmin用户下,clone git用户下的gitolote-admin.git

    git clone git@ip地址:gitolite-admin
    

    我们看到gitadmin用户下已经存在了这个目录,然后查看一下这个目录,下面有两个文件,这两个文件一会儿再去操作:


    14.现在我们要在本地生成公钥私钥,然后copy到gitadmin/gitolite-admin/keydir下,至于如何在本地生成公钥私钥,我之前有篇文章提到过,可以去那里看一下,http://www.jianshu.com/p/32690ccd101b,下面只执行scp操作去操作本地的公钥;

    scp id_rsa.pub root@ip地址:/home/gitadmin/gitolite-admin/keydir/liding_mac.pub
    

    来到服务器gitadmin用户下,查看上传的文件:

    但是,我们还需要做git的一系列操作,我们先查看一下现在是什么状态:

    我们按照提示去git add 到暂存区,再去查看状态:

    根据上面的提示,我们再去执行commit操作:

    好吧,再根据提示告诉git你是谁,再去执行commit操作:


    最后,我们终于可以执行git push操作了:


    好了,最后可以看到缓存区已经被清空了,那么通过以上操作,大概可以明白gitadmin/gitolite-admin/keydir这个文件是用来放置公钥的;

    15.下面来说一下conf这个文件,我们先打开看一下这个是干什么的。


    可以看到里面有一个文件gitolite.conf文件,打开这个文件是上图的代码;那么这个文件是干什么的?其实这个就是所谓的仓库,这里面每一个repo都是一个仓库,一般一个项目可以关联一个仓库,我们可以使用vim打开新增或删除这个仓库,再和上面同样的操作就可以了,最后使用```git clone git@ip地址:仓库名``把空仓库pull下来,可以往里面添加东西。

    好了,以上就是整个git服务器的搭建过程,接下来就是git中钩子的使用了。

    至于什么是钩子,这里就不再做详细解释,从以上的搭建中,只要把用户的本地公钥添加到gitadmin下的keydir文件中,就可以把项目pull下来直接使用,也可以进行git的相关操作,而最终完整的项目存在于git用户下的repositories目录中。但是我们不可能把这个项目直接copy下来放到服务器的一个目录下,然后域名指向这个目录中的索引文件。当然你这样开发完成之后再去这样操作也是可行的,但是维护呢?总不能维护的时候再去copy一份吧,这显然也不是一个很好的开发体验。那么这里就需要用到git钩子了,我们每次做git操作的时候都会触发这个钩子执行一系列的操作,去更新服务器中的文件,想想就比较完美。那么,接下来我会一步一步操作去演示。

    二、使用git钩子完善完美的git服务器

    1.首先,我们切换到gitadmin 用户,来到gitolite-admin/conf/目录下,在gitolite.conf中添加一个新的仓库,比如下图中的ipaiban-admin:


    然后执行git status,根据相关提示进行一系列的git操作,以上都有,这里不再重复了。
    那么,现在我们就可以从本地正常git clone下来这个仓库了,但是这是一个空仓库,先不要管他。

    2.切换到git用户下,可以看到在repositories中已经有了ipaiban-admin.git目录


    我们查看一下ipaiban-admin.git目录里都有什么:


    别的目录都不要管,可以看到有个hooks目录,继续查看


    好了,这里就是我们要找的目录了,我们需要在这个目录下创建钩子文件:
    使用vi 创建一个新文件

    vi post-receive
    

    在这个文件中写shell脚本并保存:

    #!/bin/sh
    
    unset GIT_DIR
    
    MYDIR=ipaiban-admin
    
    cd mnt/work/$MYDIR
    git pull
    git checkout dev
    
    sudo cp -rfu ./* /mnt/w3c/$MYDIR
    
    cd /mnt/w3c/
    sudo chown -R www.www $MYDIR
    

    3.来到挂载的硬盘mnt下,创建两个目录:work 以及 w3c

    mkdir work
    mkdir w3c
    sudo chown -R www.www w3c
    sudo chown -R git.git work
    

    然后分别在w3c下和work下创建ipaiban-admin目录;
    需要注意的是work一定要分给git 用户,并且需要生成git用户的公钥,并放到gitadmin下的keydir文件里面并执行git一系列提交操作;

    结束语:(重要)

    OK,到这里基本已经结束了,最后要做的是把域名指向w3c下的ipaiban-admin就可以了,这里只适合测试服务器,而正式服务器的操作最好不要用钩子直接关联,而是把正式服务器生成密钥加到测试服务器的keydir文件里,需要更新到正式服务器的时候,手动执行一下上面的脚本,有人会发现,我在shell脚本里都切换到了dev分支,为什么呢?因为一般master分支是用来搭建主体架构的,不建议直接进行开发,需要建一个分支去开发,这里我建立了一个dev分支,而实际开发中还需要real分支,就是正式分支,在dev分支上开发测试完成之后,合并到real分支去。

    Happy Hacking~

    相关文章

      网友评论

        本文标题:使用gitolite搭建完美Git服务器以及Git钩子的使用

        本文链接:https://www.haomeiwen.com/subject/klwrdxtx.html