Progit学习笔记:服务器上的Git
裸仓库是工程目录内的 .git子目录内容,不包含其他资料。
协议
Git可以使用四种协议传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git协议。
本地协议
本地协议(Local protocol) ,其中的远程版本库就是同一主机上的另一个目录。
# 克隆本地版本库
$ git clone /srv/git/project.git
# 指定 file://
$ git clone file:///srv/git/project.git
指定路径:Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。
file://
:Git 会触发平时用于网路传输资料的进程,那样传输效率会更低,主要目的是取得一个干净版本库副本。
# 增加一个本地版本库到现有的Git项目,可以祥网络一样推送和拉取了
$ git remote add local_proj /srv/git/project.git
-
优点:
简单,并且直接使用了现有的文件权限和网络访问权限 -
缺点:共享文件系统比较难配置,并且比起基本的网络连接访问,这不方便从多个位置访问;议并不保护仓库避免意外的损坏。
HTTP协议
智能HTTP协议:支持像git://
协议一样设置匿名服务, 也可以像SSH协议一样提供传输时的授权和加密,只用一个URL就可以做到。
-
智能HTTP协议优点: 只需要一个URL以及服务器只在需要授权时提示输入授权信息;HTTPS 协议被广泛使用。
-
智能HTTP协议缺点:在一些服务器上,架设 HTTPS 协议的服务端会比 SSH 协议的棘手一些;在HTTP上使用需授权的推送,管理凭证会比使用SSH密钥认证麻烦一些。
哑(Dumb)HTTP协议:仅把裸版本库当作普通文件来对待,提供文件服务。
SSH协议
# SSH 协议克隆版本库,指定一个 ssh:// 的 URL
$ git clone ssh://[user@]server/project.git
# 简短的 scp 式的写法
$ git clone [user@]server:project.git
- 优点:SSH 架设相对简单 —— SSH 守护进程很常见;通过 SSH 访问是安全的(传输数据都要经过授权和加密)、高效的(在传输前也会尽量压缩数据)。
- 缺点:它不支持匿名访问Git仓库。
Git协议
包含在Git里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于SSH服务,但是访问无需任何授权。
- 优点:Git 协议是 Git 使用的网络传输协议里最快的,使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。
- 缺点:是缺乏授权机制;Git 协议也许也是最难架设的。
一般的做法里,会同时提供SSH或者HTTPS协议的访问服务,只让少数几个开发者有推送(写)权限,其他人通过 git:// 访问只有读权限。
创建一个新的裸仓库
# 相当于$ cp -Rf my_project/.git my_project.git
$ git clone --bare my_project my_project.git
生成SSH公钥
默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。
$ ssh-keygen
第三方托管的选择
GitLab、GitHub、Gitee