当前位置: 首页 > 工具软件 > Git-secure > 使用案例 >

服务器上的 Git - 协议

阎渝
2023-12-01

协议

Git 可以使用四种不同的协议来传输数据:Local、HTTP、Secure Shell (SSH) 和 Git。在这里,我们将讨论它们是什么,以及在什么基本情况下您希望(或不想)使用它们。

本地协议

最基本的是本地协议,其中远程存储库位于同一主机上的另一个目录中。如果团队中的每个人都有权访问共享文件系统(如 NFS 挂载),或者不太可能每个人都登录到同一台计算机,则通常使用此选项。后者并不理想,因为所有代码存储库实例都将驻留在同一台计算机上,从而使灾难性损失的可能性更大。

如果您有一个共享的已挂载文件系统,则可以克隆、推送到基于本地文件的存储库并从中拉取。要克隆这样的存储库,或将存储库作为远程存储库添加到现有项目中,请使用存储库的路径作为 URL。例如,要克隆本地存储库,可以运行如下操作:

$ git clone /srv/git/project.git

或者你可以这样做:

$ git clone file:///srv/git/project.git

如果在 URL 的开头显式指定,Git 的操作会略有不同。如果只指定路径,Git 会尝试使用硬链接或直接复制所需的文件。如果指定 ,Git 会启动它通常用于通过网络传输数据的进程,这通常效率要低得多。指定前缀的主要原因是,您是否希望保留无关引用或对象的存储库的干净副本 - 通常在从另一个VCS或类似内容导入之后(请参阅Git Internals了解维护任务)。我们将在此处使用正常路径,因为这样做几乎总是更快。file://file://file://

要将本地存储库添加到现有 Git 项目中,可以运行如下操作:

$ git remote add local_proj /srv/git/project.git

然后,您可以通过新的远程名称推送到该远程数据库并从中拉取,就像通过网络执行此操作一样。local_proj

HTTP 协议

Git 可以使用两种不同的模式通过 HTTP 进行通信。在 Git 1.6.6 之前,只有一种方法可以做到这一点,它非常简单,通常是只读的。在1.6.6版本中,引入了一种新的,更智能的协议,涉及Git能够以类似于通过SSH的方式智能协商数据传输。在过去的几年中,这种新的HTTP协议变得非常流行,因为它对用户来说更简单,并且更智能地进行通信。较新的版本通常被称为智能HTTP协议,较旧的版本称为哑HTTP。我们将首先介绍较新的智能HTTP协议。

SSH 协议

当自托管通过 SSH 时,Git 的通用传输协议。这是因为对服务器的SSH访问已经在大多数地方设置好了-如果没有,那就很容易做到。SSH也是一种经过身份验证的网络协议,而且由于它无处不在,因此通常易于设置和使用。

要通过 SSH 克隆 Git 存储库,可以指定如下 URL:ssh://

$ git clone ssh://[user@]server/project.git
或者,您可以对 SSH 协议使用较短的类似 scp 的语法:

$ git clone [user@]server:project.git
在上面的两种情况下,如果您未指定可选用户名,Git 将假定您当前登录的用户身份。

Git 协议

最后,我们有Git协议。这是一个特殊的守护进程,与Git一起打包;它侦听专用端口 (9418),该端口提供类似于 SSH 协议的服务,但绝对没有身份验证。为了通过Git协议提供存储库,您必须创建一个文件 - 守护程序不会在没有该文件的情况下为存储库提供服务 - 但是,除此之外,没有安全性。Git 存储库可供所有人克隆,或者不能克隆。这意味着通常没有推动此协议。您可以启用推送访问,但由于缺乏身份验证,互联网上找到您项目URL的任何人都可以推送到该项目。可以说,这是罕见的。

 类似资料: