持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
本文系作者 不太自律的程序猿原创,转载请私信并在文章开头附带作者和原文地址链接。
GIT服务器搭建方式
git支持的四种通信协议:
1. Local(本地协议)
2. ssh
3. http(Dumb、Smart)
4. git
1、Local(本地协议)
基于本地文件系统或共享(NFS)文件系统进行访问,
优点: 简单,直接使用了现有的文件权限和网络访问权限,小团队小项目建立一个这样的版本管理系统是非常轻松的一件事。
缺点: 这种协议缺陷就是本身共享文件系统的局限,只能在局域网,而且速度也慢。
适应场景: 小团队,小项目临时搭建版本服务。
l 演示本地协议使用方式:
#从本地 f/git/atals 目录克隆项目
git clone /f/git/atals/
#即使是 bare仓库也可以正常下载
git clone /f/git/atals.git
#基于file 协议克隆本地项目
git clone file:///f/git/atals/
如果在 URL 开头明确的指定 file://,那么 Git 的行为会略有不同。 如果仅是指定路径,Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。 如果指定 file://,Git 会触发平时用于网路传输资料的进程,传输过来的是打包好的文件,更节约硬盘空间。
l 演示通过 file:///协议与直接拷贝的区别。
2、ssh 协议
git 支持支持利用ssh 协议进行通信,这是绝大部分linux、uninx系统都支持的,所以利用该协议架设GIT版本服务是非常方便的
优点: 首先SSH 架设相对简单、其次通过 SSH 访问是安全的、另外SSH 协议很高效,在传输前也会尽量压缩数据。
缺点: 权限体系不灵活,必须提供操作系统的帐户密码,哪怕是只需要读取版本。
适应场景: 小团队、小项目、临时项目
演示基于 ssh 协议
这里我们把git 服务必须先安装到linux 系统上,然后才能使用ssh 协议跟git 服务进行通信。
linux 安装git服务
1.安装依赖环境
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2.下载并解压源码
$ wget github.com/git/git/arc…
#备用下载链接: pan.baidu.com/s/1czwEz8 密码: y3hn
$ unzip v2.3.0.zip
$ cd git-2.3.0
3 编译 安装(如果没有权限就加上sudo)
make prefix=/usr/local/git all
make prefix=/usr/local/git install
4、添加环境变量
vim /etc/profile
export PATH=/usr/local/git/bin:$PATH
source /etc/profile
#如果成功显示版本号表示添加成功
git --version
git version 2.3.0
l #创建一个祼项目
git --bare init luban.git
#本地基于远程克隆仓库
git clone root@192.168.0.147:/data/git-repository/luban.git
cd luban/
#添加文件
echo "this is luban" >> README.MF
#本地添加、提交、并推送至远程
git add -A; git commit -am 'first commit'; git push;
可能的错误:
git-upload-pack: command not found
原因是 ssh 协议下只能访问/usr/bin 下的目录,解决办法如下
ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack
ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack
3、http(Dumb、Smart)
Git http 协议实现是依懒 WEB容器(apache、nginx)及cgi 组件进行通信交互,并利用WEB容器本身权限体系进行授权验证。在 Git 1.6.6 前只支持http Dumb(哑)协议,该协议只能下载不能提交,通常会配合ssh 协议一起使用,ssh 分配提交帐号,http dumb提供只读帐号。1.6.6 之后git 提供了git-http-backend 的 CGI 用于实现接收远程推送等功能。
优点: 解决了local 与ssh 权限验证单一的问题、可基于http url 提供匿名服务,从而可以放到公网上去。而local 与ssh 是很难做到这一点,必如实现一个类似github 这样的网站。
缺点: 架设复杂一些需要部署 WEB服务器,和https 证书之类的配置
场景: 大型团队、需要对权限精准控制、需要把服务部署到公网上去
l 演示 http Dumb 配置与使用
1、创建服务端版本仓库
cd /data/git-repository
git --bare init luban.git
cd luban.git/hooks/mv
// 版本更新钩子,当有版本提交的时候会执行更新
post-update.sample post-update
./post-update
nginx 静态访问配置
server {
listen 80;
server_name git.tl.com;
location / {
root /data/git-repository;
}
}
#重命名钩子
mv hooks/post-update.sample hooks/post-update
本地克隆远程服务
git clone git.tl.com/luban.git
注: http Smart 协议 是基于 CGI 配合GIT git-http-backend 脚本进行使用,配置较复杂,现在一般不会这么去做,而是采用gitlab 、gogs 之类的web管理进行代替,在此就不在演示。
4、GIT 协议
Git 协议是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。
优点
目前,Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。
缺点
Git 协议缺点是缺乏授权机制。 而且9418是一个非标准端口,一般防火墙不会开放。
l 演示GIT协议的使用
cd luban.git/
#创建一个空文件,表示开放该项目
touch git-daemon-export-ok
#启动守护进程
$nohub git daemon --reuseaddr --base-path=/data/git-repository/ /data/git-repository/ &
#本地克隆远程项目
git clone git://192.168.0.147:9418/luban.git
感谢诸君的观看,文中如有纰漏,欢迎在评论区来交流。如果这篇文章帮助到了你,欢迎点赞👍关注。