Linux创建GIT仓库并实现hook同步到指定目录

(注:我的服务器是Ubuntu 16.04.3 LTS 64)

一、在服务器上安装git

sudo apt-get install git

安装完成之后,可运行“git --version”查看安装版本,能看到git版本信息则说明已经安装成功。

二、添加git用户

有一些操作系统会在你安装git时会同时帮你创建一个git用户,但Ubuntu的需要我们手动来创建。这也非常简单的,那我们就来手动创建一个git用户:

sudo adduser git  #输入密码,然后其它信息默认直接回车就行。

三、在服务器上创建裸仓库

你也可以一条命令完成上面的操作:

git --bare init carcartalk.git

裸仓库里面只保存了一些配置信息和你的版本库文件等,但是看不到我们所上传的文件或代码的,这就是裸仓库的特点。我们只需要能够从裸仓库里clone代码到你的本地就行。

其实裸仓库的内容也就是我们正常git仓库里面的隐藏文件夹.git里面的内容

四、在本地克隆服务器上的裸仓库

我的客户端是windows,我已经安装好git了。windows上的git安装非常简单,上网直接百度一个git的exe文件安装就行。如果没有的话,我这里也可以推荐一个git的下载链接:https://git-scm.com/downloads,点击打开,选择windows版本直接下载安装即可,和所有的windows软件安装一样,这里我就不特别说明了。

严格来说,其实Git并没有所谓的服务器端和客户端,这也是Git和SVN最大的一点不同。不管你在哪里创建了一个git仓库,原理上它都可以充当一个git服务器,这取决于你的配置。深入了解就涉及到很多git的原理知识了,感趣兴的同学可以自行去学习,当然,我也非常推荐你这样去做。

好了,我又扯远了,回到主题

克隆刚刚在服务器创建的裸仓库到本地:

git clone git@服务器ip:/home/git/project/carcartalk.git carcartalk

然后输入你的git用户的密码,你将会看到一个如下的“warning”提示,即说明你已经完成了克隆到本地的任务。

warning: You appear to have cloned an empty repository.

注意:很有可能你会在这个步骤收到一个权限不足的错误,这很有可能是因为git用户对你的服务器端的git仓库目录权限不足的原因,这里你只要把仓库的所属用户及用户组都改为git即可。

chown git:git -R /home/git  #正常来说,如果你是在git用户的主目录下创建仓库则不会出现该问题。

这里可能你还有一个疑问,如果我不知道git用户的密码呢?这该怎么办?(因为把git的密码告诉别人,那么他就可能会登录上你的服务器。)

其实有两种办法可以解决这个问题,(1)可以登录你的root用户,设置git用户不可登录服务器,这样你把git密码透露出去也相对没那么危险,但我还是推荐下一种方法;(2)通过验证客户端秘钥来实现不需要密码进行git代码管理(等下我会在文章最后面拿这种方法来讲解,这个方法用起来会相对方便很多,非常适合开发。)

五、测试使用

克隆了远程仓库到本地后,你可以先进行一些简单的测试操作,确保你的git能正常使用,如下:

touch readme.txt
git add readme.txt
git commit -m"first commit"
git push origin master  # 在服务器端没有配置秘钥之前,每次push都要输入密码

第一次push可能会有一些提示,因为裸版本库还什么都没有,你可能需要 git push origin master写全命令,之后就没必要了,直接 git push 就可以了。

六、设置git钩子

就比如一个web服务器,当我们在本地把开发好的代码文件push到服务器时,只是把更新提交到了你一开始在服务器创建的裸仓库中。此时你还需要进入你的web目录把更新的代码文件pull到你的指定目录,这样明显非常的不方便。这也不是我们想要的结果,这时候就是到git的钩子发辉作用的时候了。git钩子可以帮你解决你以上提出的问题。

下面开始我们的设置。

进入我们的裸仓库的hooks文件夹,然后新建一个post-receive文件。

cd hooks/
vim post-receive

在post-receive写入以下内容:

#!/bin/bash
git --work-tree=/www/carcartalk checkout -f

其中/www/carcartalk为你实际需要同步的站点目录。

然后修改post-receive为可执行文件(其实这就是一个脚本文件)

chmod +x post-receive

post-receive的原理就是,当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。其实git还提供了很多其它动作的钩子,这里我们就不深入了解了。

注意:同时你还需要修改你的web站点目录的权限,修改所属用户与用户组为git,否则钩子的权限可能会不足而导致执行失败。(你也可以通过添加git用户到相应的用户组来解决问题)

chown git:git -R /www    #修改所属用户

设置好钩子后,当你本地再次执行push的时候,你会发现你web目录的文件也同步的更新了。

到这一步,我们的“Linux搭建GIT服务器并实现hook同步到指定目录”教程算是已经讲解完了。哈哈,聪明的人肯定还记得前面遗留的一个问题,嗯嗯,就是关于公钥验证的问题。

内容比较多,我下面就单独用一个小节来讲解。

七、配置公钥验证方式

在配置了公钥验证之后,当你再次从本地更新代码到服务器时,将不会再提示输入密码。

1)服务器设置

查看你的git用户目录下是否存在一个文件.shh,如果没有的话则自己手动创建。

mkdir .ssh

然后在.ssh文件夹里面新建一个文件authorized_keys

touch .ssh/authorized_keys

等下会用到这个文件,我们需要分别将其他开发者的公钥(全选、复制、不能更改!)添加到该文件去,一个开发者的公钥分一行。

2)查看客户端的公钥(linux)

cd ~/.ssh
ls -al  #如果列出了authorized_keys、id_rsa、id_rsa.pub 则证明你拥有公钥。

如果你的主目录里没有上述的文件,那么你可以通过运行 ssh-keygen 程序来创建它们。

ssh-keygen

首先 ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。

之后你就会在你的根目录下生成下图所示的文件:

这里我们需要的就是id_rsa.pub文件里面的内容,也就是你的公钥。里面内容如下:

把它复制,然后提交给git服务器的管理员进行相关配置。

如果你的客户端是windows,那么查看公钥的方法如下:

3)查看客户端的公钥(Windows)

在 Windows 上,该程序包含于Git 软件包中。打开你的git命令行,输入

ssh-keygen.exe    #创建公钥

由于我的本地之前已经创建过密钥,所以得到如上图的结果。

然后根据你创建时提示的实际路径即可找到你的公钥文件,windows一般都是放在C:\Users\Administrator.ssh中。接下来就和上面一样,把你的公钥文件id_rsa.pub提供给git管理员。

4)服务器配置

打开在上面第1)步创建的文件authorized_keys,然后把第2)或第3)步提供给你的公钥粘贴到该文件。注意!如果有多个开发者需要受权,则你需要把他们的公钥都拷贝到这个文件,每个公钥需要单独占一行!

5)测试

此时,当你再次向git服务器push的时候,将不会再弹出需要输入密码的提示,如上图。

感谢阅读!

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

推荐阅读更多精彩内容