version-fox / version-fox/vfox
[Feature]: 支持为已安装的 SDK 版本添加别名/重命名功能
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 4k
- Forks
- 157
- Avg merge
- 1h 3m
- Merged PRs (30d)
- 5
Description
[Feature] 支持为已安装的 SDK 版本添加别名/重命名功能
背景
在日常开发中,我使用 vfox 管理多个 SDK 版本,包括 Java、Node.js、Go 等。随着项目积累,我发现一个常见但棘手的问题:同一个版本号的不同发行版(distribution)难以区分。
以 Java 为例,版本号 17.0.9 对应多种发行版:
$ vfox list java
17.0.9-tem (Eclipse Temurin)
17.0.9-zulu (Azul Zulu)
17.0.9-open (OpenJDK)
17.0.9-graal (GraalVM)
虽然 vfox 在安装时使用了 sdk-name@version-dist 的命名规范,但在以下场景中仍然存在痛点:
痛点 1:版本号过长,切换不便
# 每次都要输入完整名称
vfox use java@17.0.9-tem
vfox use java@21.0.1-graal
痛点 2:记住发行版后缀的心智负担
开发者需要记住每个版本的发行商缩写(tem、zulu、open、graal 等),尤其是当多个项目使用不同发行版时。
痛点 3:团队协作时版本标识不统一
不同开发者可能使用相同的版本号但不同的发行版:
| 开发者 | 实际安装版本 | 写入 .tool-versions 的内容 |
|---|---|---|
| 开发者 A | 17.0.9-tem |
java 17.0.9-tem |
| 开发者 B | 17.0.9-zulu |
java 17.0.9-zulu |
虽然功能上可能兼容,但写入 .tool-versions 文件的字符串不同,导致版本管理混乱。
期望的功能
我希望 vfox 能支持为已安装的 SDK 版本设置用户自定义别名(alias),类似于 Git 的 git alias 或 Docker 的 image tag 功能。
基础用法
# 为已安装的版本设置别名
vfox alias java@17.0.9-tem java17-temurin
vfox alias java@21.0.1-graal java21-graalvm
# 为同一版本设置多个别名(可选)
vfox alias java@17.0.9-tem jdk17 default-java
# 查看所有别名
vfox alias list
# 删除别名
vfox alias remove java17-temurin
# 使用别名切换版本
vfox use java17-temurin
vfox use jdk17
# 在 .tool-versions 文件中使用别名
echo "java jdk17" > .tool-versions
期望的行为
-
别名仅用户本地生效:别名不应影响团队共享的
.tool-versions文件,仅用于简化个人操作 -
别名的持久化存储:别名配置应保存在用户目录(如
~/.version-fox/aliases.json),不在项目内共享 -
别名的优先级:当别名与实际版本名冲突时,应优先解析为别名,并给出警告提示
-
别名的迁移支持:当卸载 SDK 版本时,对应的别名也应被清理或标记为无效
使用场景
场景 1:为常用版本设置简短别名
# 设置简短别名
vfox alias java@17.0.9-tem j17
vfox alias java@21.0.1-tem j21
# 日常切换更高效
vfox use j17
vfox use j21
场景 2:统一不同开发者的本地版本标识
| 开发者 | 实际安装版本 | 本地别名 | .tool-versions 中的记录 |
|---|---|---|---|
| 开发者 A | 17.0.9-tem |
team-java17 |
java team-java17 |
| 开发者 B | 17.0.9-zulu |
team-java17 |
java team-java17 |
虽然底层使用不同发行版,但通过别名实现了团队层面的统一标识。
场景 3:为实验性版本添加备注
# 安装一个预览版并添加备注性别名
vfox install java@22-ea
vfox alias java@22-ea java22-preview-test
# 标记不稳定的版本
vfox alias java@21-rc jdk21-rc-dont-use
与其他功能的协同
| 功能 | 协同说明 |
|---|---|
vfox cd <sdk> |
别名应能用于 vfox cd 命令,如 vfox cd j17 进入该版本的安装目录 |
vfox list |
列表显示时,应在版本号旁标注已设置的别名 |
.tool-versions |
支持在项目配置文件中使用别名(需团队约定别名的含义) |
必要性总结
| 视角 | 现状 | 期望 |
|---|---|---|
| 个人开发者 | 每次要输入完整的 sdk@version-dist |
使用简短别名快速切换 |
| 团队协作 | 不同发行版导致 .tool-versions 不统一 |
通过本地别名屏蔽底层差异 |
| 版本实验 | 难以标记特殊用途的版本 | 通过别名添加备注性标识 |
核心价值:提升日常使用效率,降低版本管理的心智负担,同时保持与现有生态的兼容性。
技术可行性参考
已有类似实现可供参考:
- Git alias:
git config --global alias.co checkout - Docker tag:
docker tag <image-id> <new-tag> - nvm alias:
nvm alias default 18.17.0 - sdkman alias:
sdk default java 17.0.9-tem
vfox 可以借鉴这些成熟方案的设计,实现符合自身生态的别名系统。
相关命令参考(当前 vfox 已有)
# 查看已安装版本
vfox list <sdk-name>
# 切换版本
vfox use <sdk-name>@<version>
# 查看当前版本路径(支持别名后将受益)
vfox cd <sdk-name> # 当前版本的安装目录
总结
这个功能将为 vfox 带来更灵活的用户体验,让版本管理更加个性化和高效。
感谢 vfox 团队的关注与考虑!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the existing vfox list, vfox use, and vfox cd command entry points, along with how installed versions are removed. Then determine where user-local alias data could be persisted and how alias resolution should interact with .tool-versions. Done means aliases can be created, listed, removed, resolved by the relevant commands, and cleaned up when their installed version is removed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- cli, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100