一个远程仓库通常只是一个裸仓库(bare repository),是没有当前工作目录的仓库。因为该仓库仅仅是作为合作媒介,仅需要存放Git资料。裸仓库就是本地工程目录中的.git子目录内容。

协议

Git使用4种主要协议传输:Local、HTTP、SSH、Git。

本地协议

本地协议(Local protocol),其中的远程版本库就是硬盘内的另一个目录,这常见于团队的每一个成员都对一个共享的文件系统(如NFS)拥有访问权,或者比较少见的多人共用同一台电脑。

如果使用的是共享文件系统,就可以从本地版本库克隆、推送、拉取

$ git clone /opt/git/project.git

或者是

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

在项目中增加一个本地版本库

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

HTTP

在Git 1.6.6之前,只有“哑”HTTP协议;之后则为“智能”HTTP协议。

“智能”HTTP协议运行方式与SSH及Git协议类似,只是运行在标准的HTTP/S端口并且可以使用各种HTTP验证机制。

智能HTTP协议既可以支持像git:// 协议一样设置匿名服务,也可以像SSH协议一样提供传输时的授权和加密。而且只使用一个URL,就可以完成不同的需求。类似Github服务,它的URL在克隆、推送时完全一样。

而“哑”HTTP协议里web服务器将裸版本库当做普通文件对待,提供文件服务。此时,只需要将裸版本库放在HTTP根目录,并设置一个叫做post-update 的挂钩即可(Git钩子)。

$ cd /var/www/htdocs/
$ git clone --bare /path/to/git_project gitproject.git
$ cd gitproject.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update

Git自带的post-update挂钩会默认执行合适的命令,确保通过HTTP的获取和克隆操作正常工作。

SSH协议

架设Git服务器时,常使用SSH协议作为传输协议。

通过SSH协议克隆版本库

$ git clone ssh://user@server/project.git

或者是简短的scp式写法

$ git clone user@server:project.git

Git协议

关于Git协议,首先得提及Git里的特殊守护进程,它监听特定的端口9218,类似于SSH服务,但是访问无需任何授权。

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

results matching ""

    No results matching ""