shell 删除文件 四、服务器上的 Git(2)

电脑杂谈  发布时间:2018-02-11 20:23:18  来源:网络整理

Git 1.6.6 版本引入了一种新的、更智能的协议,让 Git 可以像通过 SSH 那样智能的协商和传输数据。

之后几年,这个新的 HTTP 协议因为其简单、智能变的十分流行。

新版本的 HTTP 协议一般被称为“智能” HTTP 协议,旧版本的一般被称为“哑” HTTP 协议。

我们先了解一下新的“智能” HTTP 协议。

1.2.1 智能(Smart) HTTP 协议

“智能” HTTP 协议的运行方式和 SSH 及 Git 协议类似,只是运行在标准的 HTTP/S 端口上并且可以使用各种HTTP 验证机制,这意味着使用起来会比 SSH 协议简单的多,比如可以使用 HTTP 协议的用户名/密码的基础授权,免去设置

SSH 公钥。

智能 HTTP 协议或许已经是最流行的使用 Git 的方式了,它即支持像 git:// 协议一样设置匿名服务,也可以像SSH 协议一样提供传输时的授权和加密。而且只用一个 URL 就可以都做到,省去了为不同的需求设置不同的URL。

如果你要推送到一个需要授权的服务器上(一般来讲都需要),服务器会提示你输入用户名和密码。从服务器获取数据时也一样。

事实上,类似 GitHub 的服务,你在网页上看到的 URL (比如,https://github.com/schacon/simplegit[]),和你在克隆、推送(如果你有权限)时使用的是一样的。

1.2.2 哑(Dumb) HTTP 协议

如果服务器没有提供智能 HTTP 协议的服务,Git 客户端会尝试使用更简单的“哑” HTTP 协议。

哑 HTTP 协议里 web 服务器仅把裸版本库当作普通文件来对待,提供文件服务。

哑 HTTP 协议的优美之处在于设置起来简单。

基本上,只需要把一个裸版本库放在 HTTP 跟目录,设置一个叫做 post-update 的挂钩就可以了(见 Git 钩子)。

此时,只要能访问 web 服务器上你的版本库,就可以克隆你的版本库。

下面是设置从 HTTP 访问版本库的方法:

# 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 挂钩会默认执行合适的命令(git update-server-info),来确保通过 HTTP 的获取和克隆操作正常工作。这条命令会在你通过 SSH 向版本库推送之后被执行;然后别人就可以通过类似下面的命令来克隆:# git clone https://example.com/gitproject.git

这里我们用了 Apache 里设置了常用的路径 /var/www/htdocs,不过你可以使用任何静态 web 服务器 —— 只需要把裸版本库放到正确的目录下就可以。

Git 的数据是以基本的静态文件形式提供的(详情见 Git 内部原理)。

通常的,会在可以提供读/写的智能 HTTP 服务和简单的只读的哑 HTTP 服务之间选一个。

极少会将二者混合提供服务。

优点

我们将只关注智能 HTTP 协议的优点。

不同的访问方式只需要一个 URL 以及服务器只在需要授权时提示输入授权信息,这两个简便性让终端用户使用Git 变得非常简单。

相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-72418-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...