Git仓库文件创建者识别及公平字符计数付费方案咨询
Git 仓库编辑贡献核算方案
原有统计逻辑将所有提交过某文件的作者都计入整文件贡献,在跨编辑修正内容时会出现计数不公的问题,以下针对三个问题给出可直接落地的解决方案:
1. 统计用户创建的文件列表及对应字符数
要筛选用户首次新增到仓库的文件(即用户作为创建者的文件),只需要在原有命令中增加--diff-filter=A参数,该参数会仅保留提交中属于「Add(新增)」状态的文件,排除后续修改、删除类提交关联的文件,最终命令如下:
git log --use-mailmap --no-merges --author="CertainEditor" --diff-filter=A --name-only --pretty=format:"" | sort -u
sort -u用于去重,避免文件被删除后重新添加等特殊场景下的重复计数- 将输出结果通过管道传给
wc -m,即可得到该用户作为创建者贡献的总字符数,作为基础酬劳核算依据
2. Commit hooks 自动覆盖Author字段的可行性
强烈不建议这么实现,核心原因有两点:
- Git提交的Author字段核心作用是溯源实际修改人,强行将非创建者提交的Author改为原文件创建者,会完全丢失修改记录,后续出现内容错误、违规内容等问题时无法定位实际操作人
- 客户端hooks(pre-commit/commit-msg等)可以被用户通过
git commit --no-verify轻易绕过,服务端hooks虽然可以强制拦截,但篡改作者信息的逻辑会直接打击编辑主动修正他人笔误的积极性,和鼓励互助校对的初衷相悖
如果需要标记文件原创建者,更合理的方案是通过git notes给提交附加原创建者备注,或在提交说明中自动追加标记,不要篡改提交本身的作者信息。
3. 按实际修改量核算非创建者酬劳的方案
按diff增量统计是目前最公平的核算方式,完全不需要调整提交流程,直接通过Git原生命令即可实现:
- 酬劳拆分规则建议:文件创建者获得该文件首次提交时全文字符对应的酬劳;后续所有修改的贡献者,按自己实际提交中新增的有效字符数核算酬劳,删除字符、纯空白字符修改不计酬,避免无效操作刷量
- 统计指定作者所有提交累计新增字符数的基础命令如下:
git log --use-mailmap --no-merges --author="CertainEditor" --pretty=tformat: --numstat | awk '{sum += $1} END {print sum}'
- 如果需要精确到字符而非行数,可以替换为逐词diff统计逻辑,配合阈值规则过滤小幅修改:比如设置单文件单次提交新增字符数少于10(阈值可自行调整)时,不计入酬劳统计,默认归为编辑间互助校对,既鼓励主动修正笔误,也不会出现改1个字符拿整份文件酬劳的问题
注意:统计前请确保本地仓库是全量克隆,不要使用浅克隆(shallow clone),否则会缺失早期提交记录导致统计偏差。
内容的提问来源于stack exchange,提问作者user1876484
相关产品推荐
相关产品推荐

