2016-11-12 57 views
3

我在GitHub上托管了一些公共存储库,它偶尔会根据流量图接收克隆。虽然我想相信很多人都在查找我的代码并下载它,但其中一些代码的性质使我怀疑这些克隆中的大多数来自僵尸程序或搜索引擎爬虫/蜘蛛。我知道如果我通过搜索引擎找到git存储库,我通常会用浏览器查看代码,然后在克隆它之前确定它是否有用。机器人/蜘蛛是否克隆公共git存储库?

有谁知道克隆git repositories是否是搜索引擎抓取工具的标准技术,或者如果我的代码比我想象的更流行?

回答

1

存储库的Github页面中的“克隆或下载”按钮提供存储库的URL。如果您通过网页浏览器使用该网址,您将获得可在浏览器中看到的HTML页面。网页蜘蛛也收到相同的页面。但是,如果您将URL提供给Git客户端,则它可以对存储库文件进行操作(克隆repo,pull,push)。这是因为Git客户端使用在HTTP之上构建的两个Git's own protocols中的一个。

为了使用这些协议,Git客户端根据存储库的基本URL构建URL并在这些URL上提交HTTP请求。

例如,如果Git的URL是https://github.com/axiac/code-golf.git,一个Git客户端尝试,以便找到有关存储库的内部结构的详细信息如下两个要求之一:

GET https://github.com/axiac/code-golf.git/info/refs HTTP/1.0 

GET https://github.com/axiac/code-golf.git/info/refs?service=git-upload-pack HTTP/1.0 

第一个被称为“愚蠢的”协议(并且不再被Github支持),第二种被称为“智能”协议。 “愚蠢的”一个与文本消息一起使用,“聪明的”一个与二进制字符串块和自定义HTTP标头一起使用。

为了在一个Git仓库操作,Git的客户端必须解析从服务器接收的响应,并利用这些信息来创建和提交打算采取的行动正确的请求。

浏览器无法在Git存储库上操作,因为它不知道协议。一个通用的网络爬虫程序,或多或少的,就像一个浏览器。它通常不会太在意样式和脚本以及HTML的正确性,但对于HTTP而言,它与浏览器非常相似。

为了克隆你的回购站,一个网络爬虫必须被专门编程来理解Git传输协议。或者(更好)它可以运行一个外部git clone命令,当它发现一个它认为是Git存储库的URL的URL。在这两种情况下,抓取程序都必须考虑到这一目的进行编程:克隆Git存储库。

总而言之,没有办法一个网络爬虫(或使用网页浏览器的用户)可以通过错克隆一个Git仓库。

网络爬虫甚至不需要从Github或从其他服务于Git存储库的Web服务器克隆Git存储库。它可以通过使用(Github或其他)Web服务器提供的链接来获取存储库中包含的所有文件的每个版本。

+0

谢谢。我认为你的观点是有道理的,所以也许GitHub的克隆统计数据是有误导性的。也许他们把一个“克隆”作为一个简单的链接来下载master分支的zip文件,这确实可以由爬虫完成。 – Sean