我在GitHub上托管了一些公共存储库,偶尔会根据流量图接收克隆。虽然我想相信很多人都在找我的代码并下载它,但其中一些代码的性质让我怀疑这些克隆大部分来自机器人或搜索引擎爬虫/蜘蛛。我知道如果我通过搜索引擎找到一个git存储库,我通常会在浏览器中查看代码,并在克隆之前判断它是否有用。
有人知道克隆git存储库是否是搜索引擎抓取工具的标准技术,或者我的代码是否比我想的更受欢迎?
答案 0 :(得分:2)
"克隆或下载"存储库的Github页面中的按钮提供存储库的URL。如果您将该URL与Web浏览器一起使用,则可以在浏览器中看到HTML页面。网络蜘蛛也接收到同一页面。
但是,如果您向Git客户端提供URL,则它可以对存储库文件进行操作(克隆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
第一个被称为" dumb"协议(Github不再支持),第二个称为" smart"协议。 "哑巴"一个人使用短信," smart"一个使用二进制字符串块和自定义HTTP标头。
为了在Git存储库上运行,Git客户端必须解析从服务器收到的响应,并使用这些信息来创建并提交正确的请求。
浏览器无法在Git存储库上运行,因为它不知道协议。通用网络爬虫或多或少地像浏览器一样工作。它通常不太关心样式和脚本以及HTML的正确性,但对于HTTP,它与浏览器非常相似。
为了克隆您的仓库,必须对Web爬虫进行专门编程,以了解Git传输协议。或者(更好)它可以在找到它认为是Git存储库的URL的URL时运行外部git clone
命令。在这两种情况下,必须为此目的编写爬虫程序:克隆Git存储库。
总而言之,网络抓取工具(或使用网络浏览器的用户)无法错误地克隆Git存储库。
Web爬网程序甚至不需要从Github或其他服务于Git存储库的Web服务器克隆Git存储库。它可以使用(Github或其他)Web服务器提供的链接获取存储库中包含的所有文件的每个版本。