在 GitHub 上统计空仓库的数量

4
我在想是否有可能统计GitHub上空仓库的总数。如果不能针对所有用户,那么自己可以做到吗?
编辑
我尝试过size:0搜索,但似乎返回了许多包含数据的存储库。使用size:0..1之类的东西也没有帮助。
如果我尝试搜索关键字empty,但它并不能涵盖所有方面。
更新
我收到了Brian Levine(GitHub)的回复。
那将是一个有趣的统计数据。目前我们还没有简单的方法来完成这个任务。但是,您可以使用GitHub API来接近。您可以查看公共存储库并比较“pushed_at”和“created_at”日期,以查看是否有任何活动。此外,您可以查找“size”为0的存储库。在此处有有关如何查找此信息以及更多信息:http://developer.github.com/v3/repos/

“空的”是什么意思?一个没有文件和提交记录的存储库吗?我在GitHub上从未见过这样的存储库! - Robin Green
1
@RobinGreen 是的!没有文件的存储库。这是完全可能的。许多人创建存储库,但从未推送代码。 - Aniket
3个回答

4

你可以:

请注意,即使使用默认的README.md描述文件创建,一个“空”存储库仍然可能有至少一个提交记录。
实际上,正如 OP Aniket 评论所述:

我解释了“empty”的意思是:0-1个提交记录,最多3个文件:

.gitignore
README.md
LICENSE 

(注:READMEREADME.md不同
另一种方法是,对于每个存储库,查看提交次数
0或1个提交意味着可能是一个空的存储库。
更新:GitHub确认目前没有办法确定存储库是否“空”。最接近的方法是:
您可以查看公共存储库,并比较“推送时间”和“创建时间”日期,以查看是否有任何活动。

我已经尝试过这个,但是0kb的仓库也有一些数据。https://github.com/search?q=size%3A0&ref=simplesearch 这意味着GitHub不响应0kb的查询。 - Aniket
@Aniket 是的,正如我在我的编辑答案中提到的那样。我怀疑需要进行排序,以便您可以检测到“小”存储库,这些存储库可能是“空”存储库。 - VonC
@Aniket 是的,我同意,并且API仅反映了最近n天的提交,因此它甚至不适用于所有存储库。我仍然会按大小对存储库进行排序。 - VonC
我认为如果可能的话,我应该与GitHub联系。 - Aniket
@Aniket 我完全同意。 - VonC
显示剩余5条评论

2

要检查存储库是否为空,请查看其是否有任何提交记录。

https://api.github.com/repos/:owner/:repo/commits?per_page=1

一个空的存储库将具有非成功的HTTP状态和内容...

{
  "message": "Git Repository is empty.",
  "documentation_url": "https://developer.github.com/v3"
}

如果不存在,您将会得到一个404错误,并且...
{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3"
}

如果存在的话,您将会收到一个HTTP 200和一次提交。

2
使用API中的“size”属性不会帮助,正如其他人在这里提到的那样。
一个例子是这个存储库: https://api.github.com/repos/errfree/test 如果您注意到,尽管为空,它显示大小为48。
免责声明:这种方法是一种黑客手段。它不够高效,也不受GitHub官方支持,但对我来说工作得足够好。
基本上,我下载存储库的Zip版本。当存储库为空时,它不会返回zip文件,而是提供一个HTML页面,上面写着“This repository is empty.”。
在下载zip文件后,我验证其大小是否小于30Kb,如果是,我查看文件内容中的字符串“This repository is empty.”以确认给定的存储库是否为空。
以下是一个直接下载zip的实际示例,在这种情况下将显示一个空白页面: https://github.com/errfree/test/zipball/master/ 我的Java伪代码:
        // we might have reached an empty repository
        if(fileZip.length() < 30000){
            // read the contents
            final String content = utils.files.readAsString(fileZip);
            // is this an HTML file with the repository empty message?
            if(content.contains("This repository is empty.")){
                return null;
            }
        }

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接