一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

时间:2022-11-06 23:41:56

第二课:搭建企业私有Git服务.docx

课程概要:

  1. GIT远程通信协议详解
  2. 基于gogs 搭建WEB管理服务

一、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 会尝试直接复制所有需要的文件。 如果指定 file://,Git 会触发平时用于网路传输资料的进程,传输过来的是gc处理后打包好的文件,更节约硬盘空间。

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

git init --bare luban.git

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

git add -A;git commit -am'1 commit';git push

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

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 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 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

git init --bare luban.git

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

linux添加ssh登录公钥

cd ~/.ssh/

ls

> authorized_keys

vim authorized_keys

:wq  保存退出

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

ssh-keygen

cat ~/.ssh/id_rsa.pub

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

3、http(Dumb、Smart)

Git http 协议实现是依懒 WEB容器(apache、nginx)及cgi 组件进行通信交互,并利用WEB容器本身权限体系进行授权验证。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 ;
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

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 ==> 功能多一些

下载安装

官网:https://gogs.io

下载:https://gogs.io/docs/installation 选择 linux amd64 下载安装

文档:https://gogs.io/docs/installation/install_from_binary

解压之后进入目录

#前台运行

./gogs web

#后台运行

$nohup ./gogs web &

默认端口:3000

初次访问http://<host>:3000 会进到初始化页,进行引导配置。

可选择mysql 或sqlite 等数据。这里选的是sqllite

注:mysql 索引长度的问题没有安装成功,需要用mysql5.7 以上版本

2、gogs 基础配置

邮件配置说明:

邮件配置是用于注册时邮件确认,和找回密码时候的验证邮件发送。其配置分为两步:

第一:创建一个开通了smtp 服务的邮箱帐号,一般用公司管理员邮箱。

第二:在{gogs_home/custom/conf/app.ini  文件中配置。

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

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 中

===============================

参考资料:

Gogs搭建教程-极易搭建的自助 Git 服务

一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理的更多相关文章

  1. Git服务搭建及github使用教程

    .pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...

  2. Git 学习(六)分支管理

    Git 学习(六)分支管理 几乎每一种版本控制系统都支持分支.使用分支意味着你可以从开发主线上分离开来,然后不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录 ...

  3. git学习(5)分支管理(续)

    git学习(5)分支管理(续) 1.解决冲突 冲突的产生 如我们在新建分支和原来master分支上对同一文件做了修改并提交,在合并分支的时候就会遇到冲突 比如我新建了分支myBranch,在这个分支上 ...

  4. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  5. 一、VIP课程:互联网工程专题 01-Git基本概念与核心命令掌握

    第一课:Git基本概念与核心命令掌握.docx 课程概要: GIT 体系概述 GIT 核心命令使用 GIT 底层原理 一.GIT体系概述 1.使用方式区别 从本地把文件推送远程服务,SVN只需要com ...

  6. Git学习05 --分支管理02

    1.冲突 产生冲突后,查看readme.txt   可以看到冲突内容 <<<<<<< ======= >>>>>>> ...

  7. git 教程(15)--分支管理策略

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...

  8. Git学习(四)——分支管理

    一.创建与合并分支 1.创建分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.每次提交 ,mast ...

  9. git 教程(12)--分支管理

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

随机推荐

  1. c&num; wpf定时器的一种用法

    1.xaml页面 <Window x:Class="EssentialWPF.MainWindow" xmlns="http://schemas.microsoft ...

  2. mysql 操作杂记

    SHOW VARIABLES LIKE 'character%'; SET character_set_client = utf8; SET character_set_connection = ut ...

  3. Excel 日期转换

    public static void importExcel2(File file) throws Exception, IOException { Workbook book = Workbook. ...

  4. 解决问题 &OpenCurlyDoubleQuote;You don&&num;39&semi;t have permission to access &sol;index&period;html on this server&period;”

    前几天装一个linux 企业版5.0安装了apache,打开测试页面的时候出现如下错误: Forbidden You don't have permission to access /index.ht ...

  5. MAC下显示或者隐藏文件的命令

    显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...

  6. TestNg的xml配置

    TestNG中,可以通过配置xml来运行某一类.包.方法. 1.通过TestNg运行某一个类 <?xml version="1.0" encoding="UTF-8 ...

  7. js用replaceAll全部替换的方法

    1 前言 js中字符串整体替换,只有自带的replace,并没有replaceAll,如果我们需要把字符串中的字符统一替换,可以用正则表达式,由于经常使用就在String直接加个原生方法,方便调用. ...

  8. 第三部分:Android 应用程序接口指南---第二节:UI---第一章 用户界面和布局

    第1章 用户界面和布局 应用程序的用户界面就是用户能看到并可以与它交互的任何东西.Android提供多种预置的UI组件,如结构化布局对象和允许你为应用程序创建图形用户界面的UI控件.Android也会 ...

  9. 1094&period; The Largest Generation &lpar;25&rpar;-(dfs,树的遍历,统计每层的节点数)

    题目很简单,就是统计一下每层的节点数,输出节点数最多的个数和对应的层数即可. #include <iostream> #include <cstdio> #include &l ...

  10. asp&period;net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑

    首先需要引入命名空间System.Speech.Synthesis,代码如下: using (var speechSyn = new SpeechSynthesizer()) { speechSyn. ...