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. 优点

  1. 简单
  2. 直接使用了现有的文件权限和网络访问权限
    只需要像设置其他共享目录一样
    把一个裸版本库的副本放到都可以访问的路径,并设置好读/写的权限即可
  3. 这也是快速从别人的工作目录中拉取更新的方法
    如果和别人一起合作一个项目,他想让你从版本库中拉取更新时
    运行类似 git pull /home/john/project 的命令比推送到服务器再取回简单多了

2.3. 缺点

  1. 通常共享文件系统比较难配置
  2. 不能保护仓库避免意外的损坏
    因为每一个用户都有“远程”目录的完整 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. 优点

  1. 不同的访问方式只需要一个 URL
  2. 服务器只在需要授权时提示输入授权信息
  3. 可以在 HTTPS 协议上提供只读版本库的服务
  4. 可以让客户端使用指定的 SSL 证书
  5. 一般的企业防火墙都会允许这些端口的数据通过

3.3. 缺点

  1. 架设 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. 优势

  1. SSH 架设相对简单
  2. 通过 SSH 访问是安全的,所有传输数据都要经过授权和加密
  3. SSH 协议很高效,在传输前也会尽量压缩数据

4.2. 缺点

  1. 不能通过他实现匿名访问
    如果只在公司网络使用,SSH 协议可能是唯一要用到的协议

5. Git 协议

这是包含在 Git 里的一个特殊的守护进程
它监听在一个特定的端口(9418),类似于 SSH 服务
但是访问无需任何授权


5.1. 应用场景

要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件
它是 Git 协议守护进程为这个版本库提供服务的必要条件

但是除此之外没有任何安全措施
要么谁都可以克隆这个版本库,要么谁也不能
这意味着,通常不能通过 Git 协议推送

由于没有授权机制,一旦开放推送操作
意味着网络上知道这个项目 URL 的人都可以向项目推送数据
不用说,极少会有人这么做


5.2. 优点

  1. 目前,Git 协议是 Git 使用的网络传输协议里最快的
  2. 使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销

5.3. 缺点

  1. 缺乏授权机制
    一般的做法里,会同时提供 SSH 或者 HTTPS 协议的访问服务
    只让少数几个开发者有推送(写)权限,其他人通过 git:// 访问只有读权限
  2. 最难架设
    要求有自己的守护进程,这就要配置 xinetd 或者其他的程序,这些工作并不简单
  3. 要求防火墙开放 9418 端口
    但是企业防火墙一般不会开放这个非标准端口

参考: git
以上内容,均根据git官网介绍删减、添加和修改组成


相关推荐:

Git笔记(16) 变基
Git笔记(15) 远程分支
Git笔记(14) 分支开发工作流
Git笔记(13) 分支管理
Git笔记(12) 分支使用


谢谢

Git笔记(17) 协议相关推荐

  1. 【Git笔记1】本地项目与GitHub远程仓库互联

    秋招面试的时候,面试官就问了我:你会Git吗?我迟疑看着他,他微笑着说,入职前要抓紧时间好好学习一下. 由于地理位置优势先来公司熟悉下环境,咨询算法组组长入职前可以做些什么准备?组长说,Git要好好学 ...

  2. Git笔记(22) 项目贡献要点

    Git笔记(22) 项目贡献要点 1. 项目影响因素 1.1. 活跃贡献者的数量 1.2. 使用的工作流程 1.3. 提交权限 2. 提交准则 2.1. 检查空白错误 2.2. 独立变更 2.3. 提 ...

  3. Git笔记(21) 分布式工作流程

    Git笔记(21) 分布式工作流程 1. 分布式特性 2. 集中式工作流 3. 集成管理者工作流 4. 司令官与副官工作流 1. 分布式特性 同传统的集中式版本控制系统(CVCS)不同 Git 的分布 ...

  4. Git笔记(19) 生成SSH公钥

    Git笔记(19) 生成SSH公钥 1. SSH公钥认证 2. 密钥 3. 公钥 1. SSH公钥认证 许多 Git 服务器都使用 SSH 公钥进行认证 如果某系统用户尚未拥有密钥,必须事先为其生成一 ...

  5. Git笔记(38) 凭证存储

    Git笔记(38) 凭证存储 1. 凭证存储 2. 底层实现 3. 自定义凭证缓存 1. 凭证存储 如果使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥 就可以在不输入用户名和密码的情况下 ...

  6. Git笔记(36) 打包

    Git笔记(36) 打包 1. 打包 2. 举例 1. 打包 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等) 但还有另外一种不太常见却又十分有用的方式 Git 可以将它 ...

  7. Git笔记(29) 搜索

    Git笔记(29) 搜索 1. 浏览代码和提交 2. Git Grep 3. Git 日志搜索 4. 行日志搜索 1. 浏览代码和提交 无论仓库里的代码量有多少 经常需要查找一个函数是在哪里调用或者定 ...

  8. Git笔记(28) 签署工作

    Git笔记(28) 签署工作 1. 签署工作 2. GPG 介绍 3. 签署标签 4. 验证标签 5. 签署提交 6. 使用环境 1. 签署工作 Git 虽然是密码级安全的,但它不是万无一失的 如果从 ...

  9. Git笔记(23) 不同角色的贡献

    Git笔记(23) 不同角色的贡献 1. 私有小型团队 2. 私有管理团队 3. 派生的公开项目 4. 通过邮件的公开项目 1. 私有小型团队 可能会遇到的最简单的配置是有一两个开发者的私有(闭源)项 ...

最新文章

  1. 手机web开发的感想
  2. leetcode 151 python
  3. maven本地安装jar
  4. JProfiler 使用说明
  5. PHP脚本调用systemctl,centos7之systemctl
  6. 结构体typedef struct和struct
  7. Miro Video Converter针对FFMPEG转换参数
  8. 美国文件服务器,raksmart美国服务器_新闻中心
  9. 解一元二次方程——Java
  10. 13种老人不适合带孩子_让老人带娃却遭怒摔!细数13种不适合带孩子的老人!...
  11. A4打印时宽高mm对应像素px
  12. python3跑通smpl模型_SMPL模型改用python3+numpy计算
  13. 《跟我学习AI量化投资》通过chatgpt进行选股,简单易懂,降低人为操作风险
  14. php命令执行后门,php后门木马常用命令
  15. 战舰少女服务器不显示,老玩家告诉你游戏战舰少女连不上网的解决方法
  16. 总结开发者在合作过程中的典型交流方式
  17. 论文理解【RL - Exp Replay】—— 【ReMERN ReMERT】Regret Minimization Exp Replay in Off-Policy RL
  18. ebay测评补单需要注意哪些?
  19. android去掉odex
  20. 使用ftp从Linux中下载文件时报550 Filed to open file

热门文章

  1. 你真会用setTimeout吗?
  2. 面试题 php随机获取概率结果
  3. Eclipse和Notepad++快捷键
  4. 浅谈服务器使用RAID5磁盘阵列的问题
  5. windows phone 页面导航(6)
  6. Vivo叉九Android版本,vivo狂野飙车9正版下载
  7. java的关键字和保留字_Java关键字和保留字及其含义
  8. SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
  9. LAMP架构mariadb/apache的安装及基本使用
  10. 前端面试题-CSS选择器性能优化