version-keeper(vk): 一个版本管理工具

一个运行在服务器端的版本管理工具
更新于: 2025-03-31 17:49:46

idea 提示词

我想实现一个命令行
1. --target-dir: 指定一个目录,待处理的目录(target_dir)
2. --limit: 一个数字,默认值为 5
3. --versions 版本目录,默认值为 versions,这个目录是相对于 --target-dir
4. --latest 当前目录的值,默认值为 current,这个目录是相对于 --target-dir
5. --type 只针对 file 或者 directory
6. --filter 在目录里,写一个 glob 表达式,默认是 *

功能如下
1. 跳转到指定目录
2. 清空 latest 目录,注意实现的时候是:清空其中的内容,而不是直接删除再创建
3. 找到指定目录下的所有版本目录
4. 找到最新的版本目录(最后更新时间),软连接到当前目录; 如果 current 已经存在,不要先删除原来的链接
5. 根据-n的值,保留最新的n个版本目录,删除其他版本目录
6. 保留最新的n个版本目录,删除其他版本目录
7. 删除前是否需要进行确认,不需要

添加一个 --skip-symbolic-link 的选项: 如果有这个就不需要 current 目录,并且不需要做软连接相关的逻辑
添加一个 --skip-versions: 如果有这个,就不需要创建 versions 目录,相关文件直接放在 target-dir 里。

项目名

我计划在 github 上实现这个功能,帮我取个简洁的项目名吧(多列几个让我选),并写一个 10-15 词的描述,英文的

### 项目名称建议:  
1. **version-keeper**  
2. **dir-versioner**  
3. **version-prune**  
4. **latest-linker**  
5. **clean-versions**  

### 项目描述(英文):  
A CLI tool to manage versioned directories by linking the latest and keeping only the newest N versions.

使用场景

  • 备份数据库
  • 发布网站

备份数据库

# 假设数据库文件为 db.sql
$ tar -czf db_$(date +"%Y%m%d%H%M%S").tar.gz db.sql

# 使用 vk 备份
$ vk --target-dir my-backup/ --skip-symbolic-link --skip-versions --type file
# 备份前
$ tree
.
├── file1
├── file2
├── file3
├── file4
├── file5
└── file6

# 备份后
.
├── file3
├── file4
├── file5
├── file6
└── file7

纯静态HTML

  • 在 nginx 上配置 /Users/ap7/Downloads/my-app/current 为网站目录即可
vk my-app --limit 5
$ tree
.
├── current -> /Users/ap7/Downloads/my-app/versions/versions9
└── versions
    ├── versions5
    │   └── app.txt
    ├── versions6
    │   └── app.txt
    ├── versions7
    │   └── app.txt
    ├── versions8
    │   └── app.txt
    └── versions9
        └── app.txt