gogs搭建git服务教程
一、GIT服务器搭建方式
上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢?
git支持的四种通信协议:
- Local(本地协议)
- ssh
- http(Dumb、Smart)
- 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 协议很高效,在传输前也会尽量压缩数据。
缺点:权限体系不灵活,必须提供操作系统的帐户密码,哪怕是只需要读取版本。
适应场景:小团队、小项目、临时项目
l 演示基于 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 https://github.com/git/git/archive/v2.3.0.zip
\# 备用下载链接: https://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
#创建一个祼项目
git --bare init gqz.git
#本地基于远程克隆仓库
git clone root@192.168.0.147:/data/git-repository/gqz.git
cd gqz/
#添加文件
echo "this is gqz" >> 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
证书之类的配置
**场景:**大型团队、需要对权限精准控制、需要把服务部署到公网上去
演示 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 http://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
二、基于gogs快速搭建企业私有GIT服务
概要:
gogs 介绍与安装
gogs 基础配置
gogs 定时备份与恢复
gitlab > gitblit > gitweb > gogs
gitlab ==> 功能多一些
1、gogs 介绍安装
Gogs 是一款开源的轻量级Git web服务,其特点是简单易用完档齐全、国际化做的相当不错。其主要功能如下:
提供Http 与ssh 两种协议访问源码服务
提供可WEB界面可查看修改源码代码
提供较完善的权限管理功能、其中包括组织、团队、个人等仓库权限
提供简单的项目viki功能
提供工单管理与里程碑管理。
下载安装
官网:https://gogs.io
下载:https://gogs.io/docs/installation 选择 linx amd64 下载安装
文档:https://gogs.io/docs/installation/install_from_binary
安装:
解压之后目录:
运行:
#前台运行
$./gogs web
创建git用户,登录git用户开启后台运行!!
#后台运行
$nohup ./gogs web &
默认端口:3000
初次访问http://:3000 会进到初始化页,进行引导配置。
可选择mysql 或sqlite 等数据。这里选的是sqllite
注:mysql 索引长度的问题没有安装成功,需要用mysql5.7 以上版本
2、gogs 基础配置
邮件配置说明:
邮件配置是用于注册时邮件确认,和找回密码时候的验证邮件发送。其配置分为两步:
第一:创建一个开通了smtp 服务的邮箱帐号,一般用公司管理员邮箱。我这里用的是QQ邮箱。
第二:在{gogs_home/custom/conf/app.ini 文件中配置。
QQ邮箱开通smtp服务
1、点击设置
2、开启smtp
邮件设置
设置文件:{gogs_home/custom/conf/app.ini}
ENABLED = true
HOST=smtp.qq.com:465
FROM=gqzdev<971785418@qq.com>
USER=971785418@qq.com
PASSWD=jwuqhtjxgtzbbdie
ENABLED =true 表示启用邮件服务
host 为smtp 服务器地址,(需要对应邮箱开通smtp服务 且必须为ssl 的形式访问)
from 发送人名称地址
user 发送帐号
passwd 开通smtp 帐户时会有对应的授权码
重启后可直接测试
管理员登录==》控制面版==》应用配置管理==》邮件配置==》发送测试邮件
3、gogs定时备份与恢复
备份与恢复:
#查看备份相关参数
./gogs backup -h
#默认备份,备份在当前目录
./gogs backup
#参数化备份 --target 输出目录 --database-only 只备份 db
./gogs backup --target=./backupes --database-only --exclude-repos
#恢复。执行该命令前要先删除 custom.bak
./gogs restore --from=gogs-backup-20180411062712.zip
#自动备份脚本
#!/bin/sh -e
gogs_home="/home/apps/svr/gogs/"
backup_dir="$gogs_home/backups"
cd dirname $0
# 执行备份命令
./gogs backup --target=$backup_dir
echo ‘backup sucess’
day=7
#查找并删除 7天前的备份
find $backup_dir -name ‘*.zip’ -mtime +7 -type f |xargs rm -f;
echo ‘delete expire back data!’
#添加定时任务 每天4:00执行备份
# 打开任务编辑器
crontab -e
# 输入如下命令 00 04 * * * 每天凌晨4点执行 do-backup.sh 并输出日志至 #backup.log
00 04 * * * /home/apps/svr/gogs/do-backup.sh >> /home/apps/svr/gogs/backup.log 2>&1
4、客户端公钥配置与添加
Git配置
#Git安装完之后,需做最后一步配置。打开git bash,分别执行以下两句命令
git config --global user.name “用户名”
git config --global user.email “邮箱”
#git 自动记住用户和密码操作
git config --global credential.helper store
SSH公钥创建
1、打开git bash
2、执行生成公钥和私钥的命令:ssh-keygen -t rsa 并按回车3下
3、执行查看公钥的命令:cat ~/.ssh/id_rsa.pub
4、拷贝id_rsa.pub 内容至至服务~~/.ssh/authorized_keys 中
Issue
1、git-update 钩子与git 怎么协作完成文件下载的?
答:git-update 在推送的时候调用,用于打包git对象文件与并生成索引。http哑协议必须基于索引来pull。
2、裸项目就可以当服git服务吗,非裸项目可以做git服务吗?
答:祼项目一般用做git服务、非裸项也可做远程服务,二者区别在于祼项目录中文件无法查看和修改。
3、nigx 与 Apache 区别
答:都是WEB反向代理服务器,两个不同的项目,就好比Tomcat 与jetty 都是servlet 容器一样。
4、执行pull以后 本地的.git目录内容就和git服务器上的如luban.git中的内容一样了?
答:不是百分百一样,只能说本地一部分git对象同步过去了。
5、钩子是固定的那几个么?可不可以自个写? 剩下的那几个钩子的作用是什么?
答:可以自己写,具体参见:https://www.git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
6、文件冲突了,也解决了冲突,提交后对应文件原来的提交历史记录没了,如何查看文件原来的提交记录?
答:解决冲突之后,原来的提交记录是不会删除的。只有以下两种情况会删除提交 一、强行删除未合并的分支 二使用 rest 命令强行回滚两历史提交 git reset --hard
7、如果不修改钩子名字 有其它方式可以弄么???
答:那是在仓库创建的时候默认放在hooks 下的钩子,如果要启用就把后缀去掉
8、post-update.simple 这个文件名称就是如果不修改 有没有其它的方式可以打包pack那些文件
答:那只能手动的去执行 git update-server-info 命令。
9、ssh 协议就是一个密匙协议吗? 和亚协议怎么配合使用 ?
答:ssh 是linux/uninx 远程登录协议。ssh协议分配读写帐号,而哑协议分配只读帐号,这样来配合使用。
11、哑协议还是不懂是啥?什么时候创建裸项目?哑协议不是只读吗,怎么能提交呢?
答:哑协议 就是git基于http web 服务器只读协议,他不能提交,课堂上我们演示提交的时候是用ssh协议提交的。远程通信协议和仓库项目本身是两回事。
当你需要创建一个仓库项目的时候创建裸项目,裸项目就是在服务端不能编编辑修改,只能在客户端修改。
12、nginx主要是干嘛的,怎么使用,有没有相关资料?
答:nginx 与Apache、IIS一样是一个WEb服务器,后续课程当中会讲。
13、实际项目中git是怎么玩的呢?
答:①比如分支合并,
②如果有2个功能,我只想上线1个功能,应该怎么去维护呢
这属于版本发布管理的事情,我们在工程专题后面两节课会讲,并模拟版本迭代过程。
14、nginx配置文件也共享到源码中心吧?
答:可以
15、我们本地环境该怎么连远程Linux服务器,不会用自己电脑搭Linux服务器。
答:在linux基础课上会讲
16、配置nginx的作用是干嘛?
答:做WEB代理,GIT本身实现http通信,只能基于WEB容器来实现。
17、钩子是什么?有啥作用?
答:你可把钩子理解成事件触发,比如当你代码提交以后 你想邮件通知相关人员,就可以自己用脚本写一个通知。或者所当某个分支删除时通知相关人员等。
gogs搭建git服务教程的更多相关文章
- Windows平台搭建Git服务教程详解
引言 软件企业的核心就是代码,如何确保代码的安全?如何在团队开发中协同工作?为解决这些问题,我们需要采用相应的管理工具来满足管理的需求.探长从最初的VSS.SVN.TFS到现在的Git存储一路走来,感 ...
- Windows 使用 Gogs 搭建 Git 服务器(转)
Windows 使用 Gogs 搭建 Git 服务器 随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在wind ...
- Centos搭建 Git 服务器教程
搭建 GIT 服务器教程 下载安装 git Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服 ...
- nodejs搭建web服务教程
nodejs搭建web服务教程 先安装nodejs 然后 命令node js文件 即可开启服务了 输出如下 Magic happens on port 9011 你查看端口可以看到tcp 0 0 :: ...
- 用Gogs在Windows上搭建Git服务
1.下载并安装Git,如有需求,请重启服务器让Path中的环境变量生效. 2.下载并安装Gogs,请注意,在Windows中部署时,请下载MiniWinService(mws)版本. 3.在Maria ...
- 使用Gogs搭建Git服务器
Git现在基本上已经代替SVN成为主流的源码管理工具了,我在之前的文章使用GIT进行源码管理--GIT托管服务中介绍过一些国内外的主流在线Git服务,虽然这些在线的Git服务大多非常好用,但是有的时候 ...
- Windows 使用 Gogs 搭建 Git 服务器
随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在windows搭建Git服务器,主要是因界面好看,管理更方便一些. ...
- Windows平台使用Gitblit搭建Git服务器教程
Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...
- 用gogs搭建git服务器
Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 G ...
随机推荐
- LinearLayout中组件右对齐
在LinearLayout中,如果将其定位方向设为横向排列:android:orientation="horizontal",那么这个布局中的控件将自左向右排列. 但有时会有这样的 ...
- POJ_3450_KMP
http://poj.org/problem?id=3450 直接暴力枚举第一行的每一个字串,在下面的字符串中查找就行了,注意不符合就及时break. 然后试了一下strstr,发现效率是KMP的3- ...
- 【Java并发工具类】Semaphore
前言 1965年,荷兰计算机科学家Dijkstra提出的信号量机制成为一种高效的进程同步机制.这之后的15年,信号量一直都是并发编程领域的终结者.1980年,管程被提出,成为继信号量之后的在并发编程领 ...
- EMC NW disaster and recovery simulation 2
scanner -ivp can help your new networker server recongize that only clone pool has data
- 转:RBAC如何设计一个权限系统
前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块 ...
- yum仓库配置与内网源部署记录
使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...
- Linux 性能分析 工具命令
背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
- [Redis-CentOS7]Redis列表操作(三)
LPUSH添加列表 127.0.0.1:6379> LPUSH websites www.baidu.com (integer) 1 LRANGE 获取全部值 127.0.0.1:6379> ...
- CCS过渡和动画
过渡 过渡能让使用过渡的元素在样式发生变化时(例如鼠标划过,单击按钮,点击图片时,颜色,尺寸,位置等样式发生变化),定义变化过程中的动画,让变化不再是瞬间产生. 过渡样式使用transition定义, ...
- linux系统初装
一.linux系统安装 VMware workstation是一个虚拟机软件,它的主要作用是在原有操作系统(windows或linux)下,虚拟出一台电脑,你可以在这台虚拟电脑上安装不同的操作系统,进 ...