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