
一个远程仓库通常只是一个裸仓库(bare repository)— 即一个没有当前工作目录的仓库。因为该仓库仅仅作为合作媒介,不需要从磁碟检查快照;存放的只有 Git 的资料。简单的说,裸仓库就是你专案目录内的 .git 子目录内容,不包含其他资料。
1、协议
Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git协议。
1.1 本地协议
最基本的就是 本地协议(Local protocol) ,其中的远程版本库就是硬盘内的另一个目录。
如果你使用共享文件系统,就可以从本地版本库克隆(clone)、推送(push)以及拉取(pull)。像这样去克隆一个版本库或者增加一个远程到现有的项目中,使用版本库路径作为 URL。
例如,克隆一个本地版本库,可以执行如下的命令:# git clone /opt/git/project.git
或你可以执行这个命令:# git clone file:///opt/git/project.git
如果在 URL 开头明确的指定 file://,那么 Git 的行为会略有不同。
如果仅是指定路径,Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。
如果指定 file://,Git 会触发平时用于网路传输资料的进程,那通常是传输效率较低的方法。
指定 file:// 的主要目的是取得一个没有外部参考(extraneous references)或对象(object)的干净版本库副本– 通常是在从其他版本控制系统导入后或一些类似情况(参见 Git 内部原理 for maintenance tasks)需要这么做。
在此我们将使用普通路径,因为这样通常更快。
要增加一个本地版本库到现有的 Git 项目,可以执行如下的命令:# git remote add local_proj /opt/git/project.git
然后,就可以像在网络上一样从远端版本库推送和拉取更新了。
优点
基于文件系统的版本库的优点是简单,并且直接使用了现有的文件权限和网络访问权限。
如果你的团队已经有共享文件系统,建立版本库会十分容易。只需要像设置其他共享目录一样,把一个裸版本库的副本放到大家都可以访问的路径,并设置好读/写的权限,就可以了,我们会在 在服务器上搭建 Git 讨论如何导出一个裸版本库。shell 删除文件这也是快速从别人的工作目录中拉取更新的方法。
如果你和别人一起合作一个项目,他想让你从版本库中拉取更新时,运行类似 git pull /home/john/project 的命令比推送到服务再取回简单多了。
缺点
这种方法的缺点是,通常共享文件系统比较难配置,并且比起基本的网络连接访问,这不方便从多个位置访问。
如果你想从家里推送内容,必须先挂载一个远程磁盘,相比网络连接的访问方式,配置不方便,速度也慢。
值得一提的是,如果你使用的是类似于共享挂载的文件系统时,这个方法不一定是最快的。访问本地版本库的速度与你访问数据的速度是一样的。
在同一个服务器上,如果允许 Git 访问本地硬盘,一般的通过 NFS 访问版本库要比通过 SSH 访问慢。
最终,这个协议并不保护仓库避免意外的损坏。每一个用户都有“远程”目录的完整 shell 权限,没有方法可以阻止他们修改或删除 Git 内部文件和损坏仓库。
1.2 HTTP协议
Git 通过 HTTP 通信有两种模式。
在 Git 1.6.6 版本之前只有一个方式可用,十分简单并且通常是只读模式的。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-72418-1.html
才是最明智者
美颜盛世韬宝唱的赞赞