【问题标题】:Do bots/spiders clone public git repositories?机器人/蜘蛛会克隆公共 git 存储库吗?
【发布时间】:2017-03-26 13:40:16
【问题描述】:

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

有谁知道克隆 git 存储库是否是搜索引擎爬虫的标准技术,或者我的代码是否比我想象的更受欢迎?

【问题讨论】:

  • 我昨天在 github 上放了一个新项目(有史以来第一次)。到目前为止,insights 说我只有一个网络访问者(大概是我),但我有 10 个独特的克隆。我假设有些机器人可能会通过 github API 找到有关 github 项目的信息,然后出于任何原因克隆 repos。这些爬虫可能是专门为索引源代码而设计的。我当然发现谷歌过去曾将我带到源代码,所以这必须以一种或另一种方式发生......

标签: git search github web-crawler git-clone


【解决方案1】:

存储库的 Github 页面中的“克隆或下载”按钮提供了存储库的 URL。如果您在 Web 浏览器中使用该 URL,您将获得可以在浏览器中看到的 HTML 页面。网络蜘蛛也接收到相同的页面。

但是,如果您将 URL 提供给 Git 客户端,则它能够对存储库文件进行操作(克隆存储库、拉取、推送)。这是因为 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 存储库的 URL 的 URL 时运行外部 git clone 命令。在这两种情况下,爬虫的编程都必须牢记这个目的:克隆 Git 存储库。

总而言之,网络爬虫(或使用网络浏览器的用户)不可能错误地克隆 Git 存储库。

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

【讨论】:

  • 谢谢。我认为您的论点是有道理的,因此 GitHub 的克隆统计数据可能具有误导性。也许他们将“克隆”视为只是通过链接下载主分支的 zip 的人,这确实可能是由爬虫完成的。
猜你喜欢
  • 2023-01-11
  • 2023-03-16
  • 2018-01-22
  • 1970-01-01
  • 2020-09-23
  • 2010-12-02
  • 2022-07-03
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多