git-pkgs 是一个用于追踪包依赖关系在 Git 历史中的变化的 Git 子命令。它分析仓库,显示依赖项何时被添加、修改或移除,谁做了这些更改,以及原因。
git-pkgs 有两个版本,一个是原版的 Ruby 版本,另一个我们接下来要用的 Go 版本。
怎么装
如果你有 Go 工具链,可以直接使用 go install 安装:
go install github.com/git-pkgs/git-pkgs@latest
安装完成后使用命令行检查一下版本:
git pkgs -v
# git-pkgs version v0.15.1
怎么用
官方也给了很多 Quick Start 示例,摘抄如下:
cd your-repo
git pkgs init # analyze history (one-time)
git pkgs list # show current dependencies
git pkgs stats # see overview
git pkgs blame # who added each dependency
git pkgs history # all dependency changes over time
git pkgs history rails # track a specific package
git pkgs why rails # why was this added?
git pkgs diff # HEAD vs working tree
git pkgs diff --from=HEAD~10 # what changed recently?
git pkgs diff main..feature # compare branches
git pkgs vulns # scan for known CVEs
git pkgs vulns blame # who introduced each vulnerability
git pkgs outdated # find packages with newer versions
git pkgs changelog lodash -e npm --from 4.17.20 --to 4.17.21 # view changelog
git pkgs update # update all dependencies
git pkgs add lodash # add a package
git pkgs why pkg:npm/lodash # use a PURL instead of -e flag
初始化数据库
我们使用 init 子命令初始化数据库,git-pkgs 会逐一浏览 git 历史,并建立一个存储在 .git/pkgs.sqlite3 储存依赖变更的 SQLite 数据库。
git pkgs init
# Analyzing 30 commits on main...
# Snapshot at branch main (1a2b3c4)
#
# Done! Analyzed 30 commits, found 8 with dependency changes (122 total changes)
# Snapshots: 0 tags, 1 branches
选项 --no-hooks 可以跳过安装 git 钩子(默认安装,且我推荐安装)
列出依赖关系
直接使用 list 就能列出依赖关系了,如下:
git pkgs list
# .github/workflows/docker-publish.yml (github-actions):
# actions/checkout v4
# docker/build-push-action v6
# docker/login-action v3
# docker/metadata-action v5
# docker/setup-buildx-action v3
#
# Dockerfile (docker):
# oven/bun 1-alpine
# ...
查看依赖历史
使用 history 子命令查看依赖历史,可以在后面添加依赖名称查看具体单个变更。
git pkgs history # all dependency changes
git pkgs history rails # changes for a specific package
git pkgs history pkg:gem/rails # same thing, using a PURL
git pkgs history --author=alice # filter by author
git pkgs history --since=2024-01-01 # changes after date
git pkgs history --ecosystem=rubygems # filter by ecosystem
责备
不知道谁引入了那个依赖?你可以用 blame 命令寻找是谁添加了某个依赖,并通过 crush w/ AI 生成责怪邮件,使用 pop 发送。
git pkgs blame
git pkgs blame --ecosystem=docker
统计
git pkgs stats --by-author # 谁添加了最多的依赖?
依赖树
git pkgs tree
输出示例:
.github/workflows/docker-publish.yml (github-actions)
└── runtime
├── actions/checkout v4
├── docker/build-push-action v6
├── docker/login-action v3
├── docker/metadata-action v5
└── docker/setup-buildx-action v3
Dockerfile (docker)
└── runtime
└── oven/bun 1-alpine
总结
本文介绍了 git-pkgs,一个用于追踪 Git 仓库中包依赖关系历史变化的 Git 子命令。它支持多种功能:初始化依赖数据库、列出当前依赖、查看依赖变更历史、责任追溯(谁添加了依赖)、统计贡献、分支对比、漏洞扫描、版本过时检查、更新依赖以及依赖树可视化等。
git-pkgs 的核心命令完全基于 Git 历史记录运行,无需网络访问,而其他命令则会获取外部数据。通过分析提交记录,git-pkgs 帮助开发者清晰掌握依赖的演变过程,提升依赖管理的可追溯性和安全性。