使用gogs搭建自己的git服务!!!

一、GIT服务器搭建方式

上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么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协议进行通信,这是绝大部分linuxuninx系统都支持的,所以利用该协议架设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容器(apachenginx)及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服务

概要:

  1. gogs 介绍与安装

  2. gogs 基础配置

  3. gogs 定时备份与恢复

gitlab > gitblit > gitweb > gogs

gogs搭建私服教程

gitlab ==> 功能多一些

1、gogs 介绍安装

​ Gogs 是一款开源的轻量级Git web服务,其特点是简单易用完档齐全、国际化做的相当不错。其主要功能如下:

  1. 提供Http 与ssh 两种协议访问源码服务

  2. 提供可WEB界面可查看修改源码代码

  3. 提供较完善的权限管理功能、其中包括组织、团队、个人等仓库权限

  4. 提供简单的项目viki功能

  5. 提供工单管理与里程碑管理。

下载安装

官网: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服务教程的更多相关文章

  1. Windows平台搭建Git服务教程详解

    引言 软件企业的核心就是代码,如何确保代码的安全?如何在团队开发中协同工作?为解决这些问题,我们需要采用相应的管理工具来满足管理的需求.探长从最初的VSS.SVN.TFS到现在的Git存储一路走来,感 ...

  2. Windows 使用 Gogs 搭建 Git 服务器(转)

    Windows 使用 Gogs 搭建 Git 服务器   随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在wind ...

  3. Centos搭建 Git 服务器教程

    搭建 GIT 服务器教程 下载安装 git Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服 ...

  4. nodejs搭建web服务教程

    nodejs搭建web服务教程 先安装nodejs 然后 命令node js文件 即可开启服务了 输出如下 Magic happens on port 9011 你查看端口可以看到tcp 0 0 :: ...

  5. 用Gogs在Windows上搭建Git服务

    1.下载并安装Git,如有需求,请重启服务器让Path中的环境变量生效. 2.下载并安装Gogs,请注意,在Windows中部署时,请下载MiniWinService(mws)版本. 3.在Maria ...

  6. 使用Gogs搭建Git服务器

    Git现在基本上已经代替SVN成为主流的源码管理工具了,我在之前的文章使用GIT进行源码管理--GIT托管服务中介绍过一些国内外的主流在线Git服务,虽然这些在线的Git服务大多非常好用,但是有的时候 ...

  7. Windows 使用 Gogs 搭建 Git 服务器

    随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在windows搭建Git服务器,主要是因界面好看,管理更方便一些. ...

  8. Windows平台使用Gitblit搭建Git服务器教程

    Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...

  9. 用gogs搭建git服务器

    Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 G ...

随机推荐

  1. LinearLayout中组件右对齐

    在LinearLayout中,如果将其定位方向设为横向排列:android:orientation="horizontal",那么这个布局中的控件将自左向右排列. 但有时会有这样的 ...

  2. POJ_3450_KMP

    http://poj.org/problem?id=3450 直接暴力枚举第一行的每一个字串,在下面的字符串中查找就行了,注意不符合就及时break. 然后试了一下strstr,发现效率是KMP的3- ...

  3. 【Java并发工具类】Semaphore

    前言 1965年,荷兰计算机科学家Dijkstra提出的信号量机制成为一种高效的进程同步机制.这之后的15年,信号量一直都是并发编程领域的终结者.1980年,管程被提出,成为继信号量之后的在并发编程领 ...

  4. EMC NW disaster and recovery simulation 2

    scanner -ivp can help your new networker server recongize that only clone pool has data

  5. 转:RBAC如何设计一个权限系统

    前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块 ...

  6. yum仓库配置与内网源部署记录

    使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...

  7. Linux 性能分析 工具命令

    背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...

  8. [Redis-CentOS7]Redis列表操作(三)

    LPUSH添加列表 127.0.0.1:6379> LPUSH websites www.baidu.com (integer) 1 LRANGE 获取全部值 127.0.0.1:6379> ...

  9. CCS过渡和动画

    过渡 过渡能让使用过渡的元素在样式发生变化时(例如鼠标划过,单击按钮,点击图片时,颜色,尺寸,位置等样式发生变化),定义变化过程中的动画,让变化不再是瞬间产生. 过渡样式使用transition定义, ...

  10. linux系统初装

    一.linux系统安装 VMware workstation是一个虚拟机软件,它的主要作用是在原有操作系统(windows或linux)下,虚拟出一台电脑,你可以在这台虚拟电脑上安装不同的操作系统,进 ...