任何重要的决策都应该以数据为依据,信息化项目和软件开发同样如此。如果不仔细查看描述项目演变的数据并给出合理的改进步骤,就无法了解项目的健康状况。为了分析和挖掘这些信息,我们可以从项目所在的Git仓库和代码托管平台(如GitHub、Gitlab)中获取一些有意义的数据。然而,想要轻松从Git/GitHub中获取数据,其实并不是一件简单的事情。在本文中,虫虫将介绍一些Git/GitHub开源分析工具,供大家参考。GitHubAPI首先要说的是Github的官方API,这是获取GitHub仓库详细信息的绝佳途径。API非常易于使用。可以使用curl或者其他语言打包库,获取仓库的所有信息(其他公共在线Git托管平台或者自建Gitlab都有类似的API)。但是,烦人的是Github对API调用有限制,每小时的请求数是有限制的(匿名用户60个,授权用户5000个),如果要分析大型项目(或者全局分析其中的一些),那么使用API并不是一个好的解决方案。但是,通常用于关注单个项目或单个构建的贡献者的某种仪表板不会受到影响。通过GithubAPI,你基本上可以得到你浏览项目的Github仓库时看到的所有信息,但是你对仓库的Git信息的内部信息有限(例如,想知道最近一天修改了哪些代码行)).您需要克隆仓库并使用git命令获取完整信息。GHCrawlerGHCrawler是微软开发的健壮的GitHubAPI爬虫,用于遍历、搜索和跟踪GitHub实体和消息。如果您想分析组织或项目的活动,GHCrawler特别有用。GHCrawler也受到GithubAPI请求数量的限制,但GHCrawler通过使用令牌池和轮换来优化API令牌的使用。GHCrawler支持命令行调用,也支持网页端界面操作(ghcrawler-dashboard)项目官方仓库:https://github.com/Microsoft/ghcrawlerGHArchiveGHArchive是一个开源项目,用于记录公共GitHub时间轴,将其存档,并使其易于访问以供进一步分析。GitHubArchive捕获存储在一组JSON文件中的所有GitHub事件信息,以供按需下载和离线处理。或者,GitHubArchive也可作为GoogleBigQuery上的公共数据集使用。数据集每小时自动更新一次,并且可以在几秒钟内对整个数据集运行任意类似SQL的查询。项目官网:https://www.gharchive.orgGHTorren与GHArchive类似,GHTorrent项目也用于监控Github公共事件日程信息。对于每个事件,它都会详尽地检索其内容和相互依赖关系。生成的JSON的信息然后存储到MongoDB数据库中,其结构也被提取到MySQL数据库中。GHTorrent有点类似于GHArchive。它们之间的区别在于GHArchive旨在提供更详细的事件集合并按小时获取信息。另一方面,GHTorrent以更结构化的方式提供事件数据,以便更轻松地获取所有与事件相关的信息,数据获取频率为1个月。项目官方仓库:https://github.com/ghtorrentKibbleApacheKibble是一套用于收集、汇总和可视化软件项目活动的工具。Kibble架构由中央Kibble服务器和一组专门处理特定类型资源(git存储库、邮件列表、JIRA实例等)并将编译后的数据对象推送到Kibble服务器的扫描应用程序组成。基于这些数据,可以自定义一个仪表板,其中包含许多显示项目数据(语言分类、主要贡献者、代码演变等)的小部件。从这个意义上说,Kibble更像是一个可以帮助创建项目数据信息在Web端展示的工具。项目官网:https://kibble.apache.org/CHAOSSCHAOSS是Linux基金会下的一个项目,致力于创建数据分析和指标定义,以帮助健康的开源社区。CHAOSS计划有许多工具来挖掘和计算项目所需的指标数据:Augur是一个Python库、FlaskWeb应用程序和REST服务器,用于提供有关开源软件开发项目的健康和可持续性的指标。目标是作为CHAOSS社区感兴趣的新指标的快速原型。Cregit专注于生成视图以可视化代码更改的来源,这是GrimoireLabBitergia迄今为止最成熟、最雄心勃勃的工具。GrimoireLab的目的是提供一个开源平台,使:1.从几乎所有开源开发相关工具(数据源)(源代码控制、问题跟踪系统、论坛等)自动和增量收集数据,以自动丰富清理数据并扩展上面收集的数据(合并重复身份,添加有关贡献者隶属关系、计算延迟、地理数据等的额外信息)数据可视化,按时间范围、项目、存储库、贡献者等过滤搜索。GrimoireLab使用Kibana在收集的数据之上提供所有这些出色的可视化效果。CHAOSS项目官网:https://chaoss.community/SourcedSourced号称是开发生命周期的数据平台。与以前的工具相比,它更侧重于项目的代码而不是社区的协作。Sourced项目使用通用的AST,它可以以与语言无关的方式查询代码库的详细信息。在Sourced项目组织中,可以找到几个有趣的数据分析工具。包括:go-git:一个用纯Golang编写的高度可扩展的git实现库。Hercule:一个分析工具,用于在Golang中实现的存储库的整个提交历史记录。gitbase:用于Git存储库的Golang实现的SQL数据库接口。例如根据年、月、committer的提交信息,可以使用如下Sql语句:SELECTYEAR,MONTH,repo_id,committer_email,COUNT(*)ASnum_commitsFROM(SELECTYEAR(committer_when)ASYEAR,MONTH(committer_when)ASMONTH,repository_idASrepo_id,committer_emailFROMref_commitsNATURALJOINcommitsWHEREref_name='HEAD')AStGROUPBYcommitter_email,YEAR,MONTH,repo_id;项目官网:https://sourced.tech/Github项目机构:https://github.com/src-dHubbleHubble用于可视化GitHubEnterprise的协作、使用和健康数据。它专注于帮助大公司了解他们的内部组织、项目和贡献者是如何分布和协作的。哈勃企业号由两个部分组成。更新程序组件是一个Python脚本,它每天查询GitHubEnterprise设备以获取相关数据并将结果存储在Git存储库中。docs组件是一个用于可视化收集的数据的Web应用程序,托管在GitHubPages上。项目官方托管地址:https://github.com/Autodesk/hubbleonefetch最后提一个非常漂亮的命令行下可视化git项目信息的工具,支持50多种语言,因为它使用了新兴的WrittenintheRust语言。为了总结这篇文章,我们在github/git上列出了一些用于数据挖掘的工具和项目。除了上面提到的以下开源软件,一些商业工具也很不错,比如Snoot和Waydev。
