Git 并不是一种协议,而是一种分布式版本控制系统。Git 在进行代码仓库的远程操作时(比如 git push、git pull),会通过某些网络协议来和远程仓库通信。Git 支持以下几种常见协议:
如果 Apache 2 是一个“普通的静态 Web 服务器”,只把 Git 仓库的目录当成静态文件托管的话,直接 clone 是行不通的。git clone 并不是简单地下载一堆文件,而是通过 Git 协议(或者 HTTP(S) 的“智能协议”)和服务器交互,获取仓库的对象和 refs 信息。只有把 Apache 配置为支持 Git smart HTTP(也叫“智能 HTTP 协议”),或者单独跑一个 git-daemon/ssh 服务,Git 客户端才能正确和远程仓库通信。
什么是Git smart HTTP?(工作流程是?)
TODO