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

上节讲到如何使用在阿里云上申请一个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~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容