跳至内容
liuzhen932 的小窝
返回

使用 git-pkgs 管理你的历史包依赖

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 帮助开发者清晰掌握依赖的演变过程,提升依赖管理的可追溯性和安全性。


分享这篇文章:

上一篇
在 Debian 13 上部署 OpenGrok 源代码浏览工具
下一篇
ICMP 互联网控制消息协议 Type 和 Code 详解

人机验证:请刷新页面以加载评论区