git支持的四種通信協(xié)議:
1. Local(本地協(xié)議)
2. ssh
3. http(Dumb、Smart)
4. git
1、Local(本地協(xié)議)
基于本地文件系統(tǒng)或共享(NFS)文件系統(tǒng)進(jìn)行訪問,
優(yōu)點:簡單回梧,直接使用了現(xiàn)有的文件權(quán)限和網(wǎng)絡(luò)訪問權(quán)限,小團(tuán)隊小項目建立一個這樣的版本管理系統(tǒng)是非常輕松的一件事。
缺點:這種協(xié)議缺陷就是本身共享文件系統(tǒng)的局限鸳址,只能在局域網(wǎng),而且速度也慢泉懦。
適應(yīng)場景:小團(tuán)隊稿黍,小項目臨時搭建版本服務(wù)。
l 演示本地協(xié)議使用方式:
# 從本地 f/git/atals 目錄克隆項目
git clone /f/git/atals/
# 即使是 bare倉庫也可以正常下載
git clone /f/git/atals.git
# 基于file 協(xié)議克隆本地項目
git clone file:///f/git/atals/
如果在 URL 開頭明確的指定 file://崩哩,那么 Git 的行為會略有不同巡球。 如果僅是指定路徑,Git 會嘗試使用硬鏈接(hard link)或直接復(fù)制所需要的文件邓嘹。 如果指定 file://酣栈,Git 會觸發(fā)平時用于網(wǎng)路傳輸資料的進(jìn)程,傳輸過來的是打包好的文件,更節(jié)約硬盤空間汹押。
2矿筝、ssh 協(xié)議
git 支持支持利用ssh 協(xié)議進(jìn)行通信,這是絕大部分linux棚贾、uninx系統(tǒng)都支持的窖维,所以利用該協(xié)議架設(shè)GIT版本服務(wù)是非常方便的
優(yōu)點:首先SSH 架設(shè)相對簡單榆综、其次通過 SSH 訪問是安全的、另外SSH 協(xié)議很高效陈辱,在傳輸前也會盡量壓縮數(shù)據(jù)奖年。
缺點:權(quán)限體系不靈活,必須提供操作系統(tǒng)的帳戶密碼沛贪,哪怕是只需要讀取版本陋守。
適應(yīng)場景:小團(tuán)隊、小項目利赋、臨時項目
l 演示基于 ssh 協(xié)議
這里我們把git 服務(wù)必須先安裝到linux 系統(tǒng)上水评,然后才能使用ssh 協(xié)議跟git 服務(wù)進(jìn)行通信。
l **linux 安裝git服務(wù) **
# 1.安裝依賴環(huán)境
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 編譯 安裝(如果沒有權(quán)限就加上sudo)
make prefix=/usr/local/git all
make prefix=/usr/local/git install
#4媚送、添加環(huán)境變量
vim /etc/profile
export PATH=/usr/local/git/bin:$PATH
source /etc/profile
#如果成功顯示版本號表示添加成功
git --version
git version 2.3.0
l **#創(chuàng)建一個祼項目**
`git --bare init luban.git`
#本地基于遠(yuǎn)程克隆倉庫
git clone root@192.168.0.147:/data/git-repository/luban.git
cd luban/
#添加文件
`echo "this is luban" >> README.MF`
# 本地添加中燥、提交、并推送至遠(yuǎn)程
`git add -A; git commit -am 'first commit'; git push;`
可能的錯誤:
`git-upload-pack: command not found`
原因是 ssh 協(xié)議下只能訪問/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 協(xié)議實現(xiàn)是依懶 WEB容器(apache吟秩、nginx)及cgi 組件進(jìn)行通信交互咱扣,并利用WEB容器本身權(quán)限體系進(jìn)行授權(quán)驗證。在 Git 1.6.6 前只支持http Dumb(喓馈)協(xié)議闹伪,該協(xié)議只能下載不能提交,通常會配合ssh 協(xié)議一起使用壮池,ssh 分配提交帳號偏瓤,http dumb提供只讀帳號。1.6.6 之后git 提供了git-http-backend 的 CGI 用于實現(xiàn)接收遠(yuǎn)程推送等功能椰憋。
優(yōu)點:解決了local 與ssh 權(quán)限驗證單一的問題厅克、可基于http url 提供匿名服務(wù),從而可以放到公網(wǎng)上去橙依。而local 與ssh 是很難做到這一點,必如實現(xiàn)一個類似github 這樣的網(wǎng)站证舟。
缺點:架設(shè)復(fù)雜一些需要部署 WEB服務(wù)器,和https 證書之類的配置
場景:大型團(tuán)隊票编、需要對權(quán)限精準(zhǔn)控制、需要把服務(wù)部署到公網(wǎng)上去
l 演示 http Dumb 配置與使用
1卵渴、創(chuàng)建服務(wù)端版本倉庫
cd /data/git-repository
git --bare init luban.git
cd luban.git/hooks/mv
// 版本更新鉤子慧域,當(dāng)有版本提交的時候會執(zhí)行更新
post-update.sample post-update
./post-update
nginx 靜態(tài)訪問配置
server {
listen 80;
server_name git.tl.com;
location / {
root /data/git-repository;
}
}
#重命名鉤子
`mv hooks/post-update.sample hooks/post-update`
本地克隆遠(yuǎn)程服務(wù)
`git clone http://git.tl.com/luban.git`
**注:**http Smart 協(xié)議 是基于 CGI 配合GIT git-http-backend 腳本進(jìn)行使用,配置較復(fù)雜浪读,現(xiàn)在一般不會這么去做昔榴,而是采用gitlab 辛藻、gogs 之類的web管理進(jìn)行代替,在此就不在演示互订。
4吱肌、GIT 協(xié)議
Git 協(xié)議是包含在 Git 里的一個特殊的守護(hù)進(jìn)程;它監(jiān)聽在一個特定的端口(9418)仰禽,類似于 SSH 服務(wù)氮墨,但是訪問無需任何授權(quán)。
優(yōu)點
目前吐葵,Git 協(xié)議是 Git 使用的網(wǎng)絡(luò)傳輸協(xié)議里最快的规揪。 如果你的項目有很大的訪問量,或者你的項目很龐大并且不需要為寫進(jìn)行用戶授權(quán)温峭,架設(shè) Git 守護(hù)進(jìn)程來提供服務(wù)是不錯的選擇猛铅。 它使用與 SSH 相同的數(shù)據(jù)傳輸機(jī)制,但是省去了加密和授權(quán)的開銷凤藏。
缺點
Git 協(xié)議缺點是缺乏授權(quán)機(jī)制奸忽。 而且9418是一個非標(biāo)準(zhǔn)端口,一般防火墻不會開放揖庄。
l 演示GIT協(xié)議的使用
`cd luban.git/`
# 創(chuàng)建一個空文件栗菜,表示開放該項目
`touch git-daemon-export-ok`
# 啟動守護(hù)進(jìn)程
$nohub git daemon --reuseaddr --base-path=/data/git-repository/ /data/git-repository/ &
#本地克隆遠(yuǎn)程項目
`git clone git://192.168.0.147:9418/luban.git`
**二、基于gogs快速搭建企業(yè)私有GIT服務(wù)**
概要:
1. gogs 介紹與安裝
2. gogs 基礎(chǔ)配置
3. gogs 定時備份與恢復(fù)
gitlab ==> 功能多一些
**1抠艾、gogs 介紹安裝**
Gogs 是一款開源的輕量級Git web服務(wù)苛萎,其特點是簡單易用完檔齊全、國際化做的相當(dāng)不錯检号。其主要功能如下:
1. 提供Http 與ssh 兩種協(xié)議訪問源碼服務(wù)
2. 提供可WEB界面可查看修改源碼代碼
3. 提供較完善的權(quán)限管理功能腌歉、其中包括組織、團(tuán)隊齐苛、個人等倉庫權(quán)限
4. 提供簡單的項目viki功能
5. 提供工單管理與里程碑管理翘盖。
**下載安裝**
官網(wǎng):[<u>https://gogs.io</u>](https://gogs.io)
下載:[<u>https://gogs.io/docs/installation</u>](https://gogs.io/docs/installation) 選擇 linx amd64 下載安裝
文檔:[<u>https://gogs.io/docs/installation/install_from_binary</u>](https://gogs.io/docs/installation/install_from_binary)
安裝:
解壓之后目錄:

運(yùn)行:
#前臺運(yùn)行
./gogs web
#后臺運(yùn)行
$nohup ./gogs web &
默認(rèn)端口:3000
初次訪問http://<host>:3000 會進(jìn)到初始化頁,進(jìn)行引導(dǎo)配置。
可選擇mysql 或sqlite 等數(shù)據(jù)凹蜂。這里選的是sqllite
*注:mysql 索引長度的問題沒有安裝成功,需要用mysql5.7 以上版本*
**2馍驯、gogs 基礎(chǔ)配置**
**郵件配置說明:**
郵件配置是用于注冊時郵件確認(rèn),和找回密碼時候的驗證郵件發(fā)送玛痊。其配置分為兩步:
第一:創(chuàng)建一個開通了smtp 服務(wù)的郵箱帳號汰瘫,一般用公司管理員郵箱。我這里用的是QQ郵箱擂煞。
第二:在{gogs_home/custom/conf/app.ini 文件中配置混弥。
**QQ郵箱開通smtp服務(wù)**
1、點擊設(shè)置
2对省、開啟smtp
**郵件設(shè)置**
設(shè)置文件:{gogs_home/custom/conf/app.ini

ENABLED = true
HOST=smtp.qq.com:465
FROM=tuling<2877438881@qq.com>
USER=
PASSWD=
**ENABLED** =true 表示啟用郵件服務(wù)
**host** 為smtp 服務(wù)器地址蝗拿,(需要對應(yīng)郵箱開通smtp服務(wù) 且必須為ssl 的形式訪問)
**from** 發(fā)送人名稱地址
**user** 發(fā)送帳號
**passwd** 開通smtp 帳戶時會有對應(yīng)的授權(quán)碼
**重啟后可直接測試**
管理員登錄==》控制面版==》應(yīng)用配置管理==》郵件配置==》發(fā)送測試郵件
**3晾捏、gogs定時備份與恢復(fù)**
備份與恢復(fù):
#查看備份相關(guān)參數(shù)
./gogs backup -h
#默認(rèn)備份,備份在當(dāng)前目錄
./gogs backup
#參數(shù)化備份 --target 輸出目錄 --database-only 只備份 db
./gogs backup --target=./backupes --database-only --exclude-repos
#恢復(fù)。執(zhí)行該命令前要先刪除 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`
# 執(zhí)行備份命令
./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!'
#添加定時任務(wù) 每天4:00執(zhí)行備份
# 打開任務(wù)編輯器
crontab -e
# 輸入如下命令 00 04 * * * 每天凌晨4點執(zhí)行 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仓手,分別執(zhí)行以下兩句命令
git config --global user.name “用戶名”
git config --global user.email “郵箱”
#git 自動記住用戶和密碼操作
git config --global credential.helper store
**SSH公鑰創(chuàng)建**
1胖齐、打開git bash
2、執(zhí)行生成公鑰和私鑰的命令:ssh-keygen -t rsa 并按回車3下
3俗或、執(zhí)行查看公鑰的命令:cat ~/.ssh/id_rsa.pub
4市怎、拷貝id_rsa.pub 內(nèi)容至至服務(wù)~~/.ssh/authorized_keys 中