侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论
Git

Git的基础概念。Git文件的四种传输协议

Z同学
2022-03-15 / 0 评论 / 1 点赞 / 134 阅读 / 2,500 字
温馨提示:
本文最后更新于 2022-03-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.介绍

我们在使用Git进行数据提交或者拉流的时候,有考虑到为什么速度那么快么?或者Git的数据提交是按照什么样的协议呢?

Git有四种不同的协议用来传输资料,分别是:

  • 本地协议Local
  • HTTP协议
  • SSH协议(Secure Shell)
  • Git协议

下面就针对这四种协议进行一个介绍。并标注相关的优缺点。

本篇主要是提高大家对于git的一些扩展知识。很多情况下我们单纯使用Git时,并不用在意这些知识,但是我们如果想自己搭建Git服务器,那么这些知识可以说是必不可少的。

2. 协议

2.1 本地协议

本地协议常见的情况就是,远程仓库地址在同一主机上的其他目录。例如NFS文件共享仓库等。我们访问该仓库可以直接通过操作系统的文件管理器进行访问。如果是这样的共享文件系统,我们也可以和使用远程仓库一样,机械能clone克隆,push推送,pull拉取等操作。

示例:

$ git clone /zinyan/git/project.git 
或使用下面的这种
$ git clone file:///zinyan/git/project.git    

优点: 基于文件系统的版本仓库的优点就是简单,并且可以直接使用现有的文件权限和网络访问权限。如果团队已经有了共享文件系统,那么建立版本仓库会十分容易。只需要像设置其他文件共享一样。共享项目并设置好读写权限就可以了。

其次就是,访问速度将会十分快速。

缺点: 一般情况下共享文件系统比较难配置,而且往往会出现一些访问错误。最后就是无法外网访问,如果需要外网访问。还需要挂载一个远程磁盘或通过vpn访问。

2.2 HTTP协议

我们主要讨论Git 1.6.6版本后的智能HTTP协议。老版本的Http协议就不做太多讨论了,毕竟现在Git都已经更新到2.35.1了。

智能 HTTP 的运行方式和 SSH 及 Git 协议类似,只是运行在标准的 HTTP/S 端口上并且可以使用各种 HTTP 验 证机制, 这意味着使用起来会比 SSH 协议简单的多,比如可以使用 HTTP 协议的用户名/密码授权,免去设置 SSH 公钥。(我们之后介绍如何设置SSH公钥)

它即支持像 git:// 协议一样设置匿名服务, 也可以像 SSH 协议一样提供传输时的授权和加密。 而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的 URL。 如果你要推送到一个需要授权的服务器上(一般来讲都需要),服务器会提示你输入用户名和密码。 从 服务器获取数据时也一样。

这也是现在主流提供的https地址

image-20220315112801155

优点 : 不同的访问方式只需要一个 URL 以及服务器只在需要授权时提示输入授权信息,这两个简便性让终端用户使用 Git 变得非常简单。 相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。 对非资深的使用者,或者系统上缺少 SSH 相关程序 的使用者,HTTP 协议的可用性是主要的优势。 与 SSH 协议类似,HTTP 协议也非常快和高效。 你也可以在 HTTPS 协议上提供只读版本库的服务,如此你在传输数据的时候就可以加密数据;或者,你甚至可 以让客户端使用指定的 SSL 证书。 另一个好处是 HTTPS 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过。

缺点 在一些服务器上,架设 HTTPS 协议的服务端会比 SSH 协议的棘手一些。 除了这一点,用其他协议提供 Git 服务 与智能 HTTP 协议相比就几乎没有优势了。 如果你在 HTTP 上使用需授权的推送,管理凭证会比使用 SSH 密钥认证麻烦一些。 然而,你可以选择使用凭证 存储工具,比如 macOS 的 Keychain 或者 Windows 的凭证管理器。

2.3 SSH 协议

架设 Git 服务器时常用 SSH 协议作为传输协议。 因为大多数环境下服务器已经支持通过 SSH 访问 —— 即使没 有也很容易架设。 SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易。

通过 SSH 协议克隆版本库,你可以指定一个 ssh:// 的 URL:

优势 首先,SSH 架设相对简单:SSH 守护进程很常见,多数管理员都有使用经验,并且多数操作系统都包含了它及相关的管理工具。 其次,通过 SSH 访问是安全的 :所有传输数据都要经过授权 和加密。 最后,与 HTTPS 协议、Git 协议及本地协议一样,SSH 协议很高效,在传输前也会尽量压缩数据。

缺点 它不支持匿名访问 Git 仓库。 如果你使用 SSH,那么即便只是读取数据,使用者也 必须 通 过 SSH 访问你的主机, 这使得 SSH 协议不利于开源的项目,毕竟人们可能只想把你的仓库克隆下来查看。 如果你只在公司网络使用,SSH 协议可能是你唯一要用到的协议。 如果你要同时提供匿名只读访问和 SSH 协议, 那么你除了为自己推送架设 SSH 服务以外, 还得架设一个可以让其他人访问的服务。

2.4 Git 协议

这是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。 要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 —— 但是除此之外没有任何安全措施。 要么谁都 可以克隆这个版本库,要么谁也不能。 这意味着,通常不能通过 Git 协议推送。 由于没有授权机制,一旦你开 放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。 很少有人会这样使用

优点 目前,Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且 不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制, 但是省去了加密和授权的开销。

缺点 缺乏授权机制。 把 Git 协议作为访问项目版本库的唯一手段是不可取的。 一般的做法里,会同时 提供 SSH 或者 HTTPS 协议的访问服务,只让少数几个开发者有推送(写)权限,其他人通过 git:// 访问只有 读权限。 Git 协议也许也是最难架设的。 它要求有自己的守护进程,这就要配置 xinetd、systemd 或者其他 的程序。 它还要求防火墙开放 9418 端口,但是企业防火墙一般不会开放这个非标准端口。 而大型的企业防火墙通常会封锁这个端口。

1

评论区