Git笔记(17) 协议
Git笔记(17) 协议
- 1. Git 服务器
- 2. 本地协议
- 2.1. 应用场景
- 2.2. 优点
- 2.3. 缺点
- 3. HTTP 协议
- 3.1. 智能 HTTP 协议
- 3.2. 优点
- 3.3. 缺点
- 4. SSH协议
- 4.1. 应用场景
- 4.1. 优势
- 4.2. 缺点
- 5. Git 协议
- 5.1. 应用场景
- 5.2. 优点
- 5.3. 缺点
1. Git 服务器
为了使用 Git 协作功能,还需要有远程的 Git 仓库
与他人合作的最佳方法即是建立一个你与合作者们都有权利访问
且可从那里推送和拉取资料的共用仓库
架设一台 Git 服务器并不难
首先,选择服务器使用的通讯协议
一个远程仓库通常只是一个裸仓库(bare repository)
即一个没有当前工作目录的仓库
因为该仓库仅仅作为合作媒介,不需要从磁盘检查快照,存放的只有 Git 的资料
简单的说,裸仓库就是工程目录内的 .git
子目录内容,不包含其他资料
Git 可以使用四种主要的协议来传输资料:
- 本地协议(Local)
- HTTP 协议
- SSH(Secure Shell)协议
- Git 协议
2. 本地协议
最基本的就是本地协议(Local protocol)
其中的远程版本库就是 硬盘内的另一个目录
2.1. 应用场景
这常见于团队每一个成员都对一个共享的文件系统拥有访问权
或者比较少见的多人共用同一台电脑的情况
如果使用共享文件系统
就可以从本地版本库克隆(clone
)、推送(push
)以及拉取(pull
)
例如,克隆一个本地版本库,可以执行如下的命令:
$ git clone /opt/git/project.git
如果仅是指定路径,Git 会尝试使用硬链接(hard link
)或直接复制所需要的文件
或可以执行这个命令:
$ git clone file:///opt/git/project.git
如果指定 file://
,Git 会触发平时用于 网路传输资料的进程,那通常是传输效率较低的方法
但取得一个没有外部参考(extraneous references)或对象(object)的干净版本库副本
通常是在从其他版本控制系统导入后或一些类似情况需要这么做
在此将使用普通路径,因为这样通常更快
要增加一个本地版本库到现有的 Git 项目,可以执行如下的命令:
$ git remote add local_proj /opt/git/project.git
然后,就可以像在网络上一样从远端版本库推送和拉取更新了
2.2. 优点
- 简单
- 直接使用了现有的文件权限和网络访问权限
只需要像设置其他共享目录一样
把一个裸版本库的副本放到都可以访问的路径,并设置好读/写的权限即可 - 这也是快速从别人的工作目录中拉取更新的方法
如果和别人一起合作一个项目,他想让你从版本库中拉取更新时
运行类似git pull /home/john/project
的命令比推送到服务器再取回简单多了
2.3. 缺点
- 通常共享文件系统比较难配置
- 不能保护仓库避免意外的损坏
因为每一个用户都有“远程”目录的完整 shell 权限
没有方法可以阻止他们修改或删除 Git 内部文件和损坏仓库
3. HTTP 协议
Git 通过 HTTP 通信有两种模式
在 Git 1.6.6 版本之前只有一个方式可用,十分简单并且通常是只读模式的
Git 1.6.6 版本引入了一种新的、更智能的协议
让 Git 可以像通过 SSH 那样智能的协商和传输数据
3.1. 智能 HTTP 协议
智能 HTTP 协议或许是最流行的使用 Git 的方式
运行方式和 SSH 及 Git 协议类似
只是运行在标准的 HTTP/S 端口上并且可以使用各种 HTTP 验证机制
这意味着使用起来会比 SSH 协议简单的多
比如可以使用 HTTP 协议的用户名/密码的基础授权,免去设置 SSH 公钥
它即支持像 git:// 协议一样设置匿名服务
也可以像 SSH 协议一样提供传输时的授权和加密
而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的 URL
如果要推送到一个需要授权的服务器上,服务器会提示你输入用户名和密码
从服务器获取数据时也一样
事实上,类似 GitHub 的服务,在网页上看到的 URL
和在克隆、推送(如果有权限)时使用的是一样的
3.2. 优点
- 不同的访问方式只需要一个 URL
- 服务器只在需要授权时提示输入授权信息
- 可以在 HTTPS 协议上提供只读版本库的服务
- 可以让客户端使用指定的 SSL 证书
- 一般的企业防火墙都会允许这些端口的数据通过
3.3. 缺点
- 架设 HTTP/S 协议的服务端会比 SSH 协议的棘手一些
4. SSH协议
SSH 协议也是一个验证授权的网络协议
并且,因为其普遍性,架设和使用都很容易
4.1. 应用场景
之前架设 Git 服务器时常用 SSH 协议作为传输协议
因为大多数环境下服务器已经支持通过 SSH 访问
通过 SSH 协议克隆版本库,可以指定一个 ssh://
的 URL:
$ git clone ssh://user@server/project.git
或者使用一个简短的 scp 式的写法:
$ git clone user@server:project.git
也可以不指定用户,Git 会使用当前登录的用户名
4.1. 优势
- SSH 架设相对简单
- 通过 SSH 访问是安全的,所有传输数据都要经过授权和加密
- SSH 协议很高效,在传输前也会尽量压缩数据
4.2. 缺点
- 不能通过他实现匿名访问
如果只在公司网络使用,SSH 协议可能是唯一要用到的协议
5. Git 协议
这是包含在 Git 里的一个特殊的守护进程
它监听在一个特定的端口(9418),类似于 SSH 服务
但是访问无需任何授权
5.1. 应用场景
要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok
文件
它是 Git 协议守护进程为这个版本库提供服务的必要条件
但是除此之外没有任何安全措施
要么谁都可以克隆这个版本库,要么谁也不能
这意味着,通常不能通过 Git 协议推送
由于没有授权机制,一旦开放推送操作
意味着网络上知道这个项目 URL 的人都可以向项目推送数据
不用说,极少会有人这么做
5.2. 优点
- 目前,Git 协议是 Git 使用的网络传输协议里最快的
- 使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销
5.3. 缺点
- 缺乏授权机制
一般的做法里,会同时提供 SSH 或者 HTTPS 协议的访问服务
只让少数几个开发者有推送(写)权限,其他人通过git://
访问只有读权限 - 最难架设
要求有自己的守护进程,这就要配置 xinetd 或者其他的程序,这些工作并不简单 - 要求防火墙开放 9418 端口
但是企业防火墙一般不会开放这个非标准端口
参考: git
以上内容,均根据git官网介绍删减、添加和修改组成
相关推荐:
Git笔记(16) 变基
Git笔记(15) 远程分支
Git笔记(14) 分支开发工作流
Git笔记(13) 分支管理
Git笔记(12) 分支使用
谢谢
Git笔记(17) 协议相关推荐
- 【Git笔记1】本地项目与GitHub远程仓库互联
秋招面试的时候,面试官就问了我:你会Git吗?我迟疑看着他,他微笑着说,入职前要抓紧时间好好学习一下. 由于地理位置优势先来公司熟悉下环境,咨询算法组组长入职前可以做些什么准备?组长说,Git要好好学 ...
- Git笔记(22) 项目贡献要点
Git笔记(22) 项目贡献要点 1. 项目影响因素 1.1. 活跃贡献者的数量 1.2. 使用的工作流程 1.3. 提交权限 2. 提交准则 2.1. 检查空白错误 2.2. 独立变更 2.3. 提 ...
- Git笔记(21) 分布式工作流程
Git笔记(21) 分布式工作流程 1. 分布式特性 2. 集中式工作流 3. 集成管理者工作流 4. 司令官与副官工作流 1. 分布式特性 同传统的集中式版本控制系统(CVCS)不同 Git 的分布 ...
- Git笔记(19) 生成SSH公钥
Git笔记(19) 生成SSH公钥 1. SSH公钥认证 2. 密钥 3. 公钥 1. SSH公钥认证 许多 Git 服务器都使用 SSH 公钥进行认证 如果某系统用户尚未拥有密钥,必须事先为其生成一 ...
- Git笔记(38) 凭证存储
Git笔记(38) 凭证存储 1. 凭证存储 2. 底层实现 3. 自定义凭证缓存 1. 凭证存储 如果使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥 就可以在不输入用户名和密码的情况下 ...
- Git笔记(36) 打包
Git笔记(36) 打包 1. 打包 2. 举例 1. 打包 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等) 但还有另外一种不太常见却又十分有用的方式 Git 可以将它 ...
- Git笔记(29) 搜索
Git笔记(29) 搜索 1. 浏览代码和提交 2. Git Grep 3. Git 日志搜索 4. 行日志搜索 1. 浏览代码和提交 无论仓库里的代码量有多少 经常需要查找一个函数是在哪里调用或者定 ...
- Git笔记(28) 签署工作
Git笔记(28) 签署工作 1. 签署工作 2. GPG 介绍 3. 签署标签 4. 验证标签 5. 签署提交 6. 使用环境 1. 签署工作 Git 虽然是密码级安全的,但它不是万无一失的 如果从 ...
- Git笔记(23) 不同角色的贡献
Git笔记(23) 不同角色的贡献 1. 私有小型团队 2. 私有管理团队 3. 派生的公开项目 4. 通过邮件的公开项目 1. 私有小型团队 可能会遇到的最简单的配置是有一两个开发者的私有(闭源)项 ...
最新文章
- 手机web开发的感想
- leetcode 151 python
- maven本地安装jar
- JProfiler 使用说明
- PHP脚本调用systemctl,centos7之systemctl
- 结构体typedef struct和struct
- Miro Video Converter针对FFMPEG转换参数
- 美国文件服务器,raksmart美国服务器_新闻中心
- 解一元二次方程——Java
- 13种老人不适合带孩子_让老人带娃却遭怒摔!细数13种不适合带孩子的老人!...
- A4打印时宽高mm对应像素px
- python3跑通smpl模型_SMPL模型改用python3+numpy计算
- 《跟我学习AI量化投资》通过chatgpt进行选股,简单易懂,降低人为操作风险
- php命令执行后门,php后门木马常用命令
- 战舰少女服务器不显示,老玩家告诉你游戏战舰少女连不上网的解决方法
- 总结开发者在合作过程中的典型交流方式
- 论文理解【RL - Exp Replay】—— 【ReMERN ReMERT】Regret Minimization Exp Replay in Off-Policy RL
- ebay测评补单需要注意哪些?
- android去掉odex
- 使用ftp从Linux中下载文件时报550 Filed to open file