所有提交中有15%是修复吗?(2025)
摘要
对热门 GitHub 仓库中修复提交比例的分析发现,平均修复比例约为 10%,略低于作者之前在生产软件中观察到的 15%。
<p><a href="https://lobste.rs/s/9hb9ou/are_15_all_commits_fixes_2025">评论</a></p>
查看缓存全文
缓存时间: 2026/08/23 17:21
# 15%的提交都是修复吗?
来源:https://carvalho.sh/posts/2025-07-29-are-15-of-all-commits-fixes
**简言之**:更接近10%。
我最近开始了一份新工作,拿到代码库访问权限后最先做的几件事之一,就是查看它的各种统计数据。
比如:代码库存在多久了、总共有多少提交、谁是主要贡献者、哪些文件被修改过最多次、是使用合并提交还是线性历史记录等等。
其中,"修复"类型提交的占比尤其让我感兴趣。也就是说,所有提交中有多少是修复性质的。为简单起见,从现在起我将其称为"修复占比"。
在我接触过的多个代码库以及不同公司的环境中,大多数生产级软件的修复占比似乎都在15%左右浮动。
而当我对主代码库运行命令时:
```
λ numbat -e $(git log --oneline | grep -iw fix | wc -l)/$(git rev-list --count --all)
0.148675
```
看,又是经典的15%。
这让我产生了疑问:**其他公开代码库的修复占比是否也接近这个范围?**
于是我开始寻找GitHub上一些具有一定影响力的代码库列表,同时清楚以下几点:
- a) 开源软件和闭源软件(我观察到15%比例的)是两类不同的产品;
- b) 并非所有热门仓库都是应用程序,很多只是文本集合的"精选列表";
- c) 即使能快速获取一定数量的仓库,样本依然可能不具备代表性。
我从这里(https://gitstar-ranking.com/repositories)获取了前200个仓库的列表。
尽管存在这些局限性,我还是下载了114GB的数据(附注1),准备计算最终答案。
## 准备工作
首先,我将每个仓库的"修复"提交数和总提交数提取到`output.csv`文件中。
请注意,以下脚本依赖GNU Parallel(https://www.gnu.org/software/parallel/)。
```bash
# 文件: count.sh
#!/usr/bin/env bash
set -euo pipefail
function count_repo {
repo=$1
num_fixes=$(git -C $repo log --oneline | grep -iw fix | wc -l)
num_commits=$(git -C $repo rev-list --count --all)
echo $repo,$num_fixes,$num_commits
}
# 导出函数以便在下面的'parallel'命令中使用
export -f count_repo
function main {
# 写入CSV表头
echo 'repo,num_fixes,num_commits'
# 遍历每个仓库,统计修复提交数和总提交数
find -maxdepth 1 -type d -execdir test -d {}/.git \; -print -prune |
parallel --jobs 8 count_repo
}
main | tee output.csv
```
```
λ ./count.sh
repo,num_fixes,num_commits
[...]
./opencv,4338,36425
./next.js,5405,38047
./rust,28281,306211
./rails,11212,113647
./vscode,23092,145918
./tensorflow,18848,191525
./linux,198048,1369404
```
接着,我计算了修复占比,并使用DuckDB分析结果。`SUMMARIZE`命令(https://duckdb.org/docs/stable/guides/meta/summarize.html)对这类快速分析非常有用。
```sql
-- 文件: analyze.sql
.mode line
summarize
select num_fixes/num_commits as fix_ratio from 'output.csv';
```
```
λ duckdb < analyze.sql
column_name = fix_ratio
column_type = DOUBLE
min = 0.0
max = 0.35591287490021667
approx_unique = 172
avg = 0.10526396442532608
std = 0.07332227658614995
q25 = 0.05261715331694921
q50 = 0.09326059309410577
q75 = 0.14624197878941886
count = 200
null_percentage = 0.00
```
## 结果分析
由于没有对数据进行任何清洗,结果存在一定波动是意料之中的。但从这200个开源仓库的样本来看,修复提交的占比似乎更接近10%,而非15%。
## 这意味着什么?
虽然不如之前看到~15%比例时那样有共鸣,但我认为这仍然是一个合理的估算。如果你的修复占比在10%-20%之间,我想你大概能睡得安稳,不用经常凌晨三点起来修复生产环境问题。如果你维护的项目简直是个烂摊子,我很好奇——你的修复占比是多少?
总的来说,你需要注意这个比例吗?可能不必。
## 注意事项
- 你需要某种程度上遵循语义化提交规范,或者至少在提交信息中包含`fix`字样。
- 频繁使用合并的代码库可能不符合这个比例。
## 关键启示
1. 使用GNU Parallel:这是一个非常便捷的工具(https://carvalho.sh/posts/2025-06-01-gnu-parallel-as-a-poor-mans-scraper/)。
2. 使用DuckDB,特别是`SUMMARIZE`命令,可以快速进行统计分析。
3. 接受一个事实:大约10%的变更可能需要修复。
---
1. 公平地说,其中32.2GB仅来自nerd-fonts(https://github.com/ryanoasis/nerd-fonts)项目。↩(https://carvalho.sh/posts/2025-07-29-are-15-of-all-commits-fixes#fr-1-1)
相似文章
@MTSlive: 情况已检测到:GitHub的月度提交量从4月的14亿增长到8月的29亿。
GitHub的月度提交量从4月的14亿翻倍增长到8月的29亿,表明平台上的开发者活动显著增加。
微软论文显示GitHub Copilot提升生产力40%
一项微软研究利用16223名工程师43周的数据发现,在保持开发工作量不变的情况下,GitHub Copilot使拉取请求完成率提高了40.5%。
每在AI编码工具上花费1美元,只有0.18美元能进入生产环境。我们分析了超过100万个PR,以找出其余资金的去向。
根据对超过100万个拉取请求的研究发现,每在AI编码工具上花费1美元,只有0.18美元能进入生产环境,其余资金用于修复错误、返工和代码审查。分析显示,虽然PR数量增长了2.6倍,但被撤回的PR增长了3.7倍,表明失败比产出增长得更快。
@danshipper: GitHub 坐拥前排席位,目睹代码编写方式的变革——如今每个人,连同他们的智能体大军,都能提交代码。三月份……
GitHub COO Kyle Daigle 讨论了 AI 智能体创建的拉取请求激增(3 月份达到 1700 万),以及预计今年将有 140 亿次提交。他强调开源维护者的控制权、基于使用量的定价模式取代按席位许可,以及随着 AI 工具使非开发者也能构建应用,开发者与非开发者之间的界限正在模糊。
GitHub 仓库统计
一个网页工具,通过输入仓库名称或URL即可显示GitHub仓库的统计信息,包括提交次数、贡献者、语言和发布详情,并支持可选的身份验证以提高API速率限制。