因为不满 git,我写了自己的本地版本管理工具 Rustory - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cmos
V2EX    程序员

因为不满 git,我写了自己的本地版本管理工具 Rustory

 
  •   cmos 182 天前 5454 次点击
    这是一个创建于 182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实验性代码的快照保存!

    https://github.com/uselibrary/rustory


    写 python 测试程序(运维狗/验证狗),会出现好几个版本都要用,版本与版本之间存在微小差异,但是又具有延续性。既要来回对比,又要反复改动。每次用 git 来回跳,操作着一堆 git 命令,偶尔还忘了到底哪个是哪个,只能在命名上加内容,最终名称比我皮带还长,过几天我还忘了到底哪个是哪个。测试期间生成的文件,大多数是重名的,反复测试导致覆盖,后面再想找回来又是 git 一顿输入,再配合上一顿拍大腿。

    觉得 git 不满足我的要求,那我就自己重复造轮子。

    rustory commit -m "提交 v2 版本测试参数" # 提交版本 rustory commit -m "添加图像显示新功能" # 提交新功能 rustory history # 查看记录 ID 时间 + ~ - 消息 ab12cd 2025-06-18T15:30:00 2 1 0 "添加图像显示新功能" ef34gh 2025-06-17T10:15:30 5 0 2 "提交 v2 版本测试参数" rustory rollback ef34gh # ./rustory-backup/backup-2025-06-17T10:15:30/* # 将特定版本的完整快照恢复到 rustory-backup 文件夹中 

    Rustory 是一个基于 Rust 的版本控制工具,为个人开发者提供简单直观的版本控制旨,轻松管理项目的快照历史记录配置。它提供了类似于 Git 的功能,但 Rustory 不是 Git 的替代品。Rustory 更专注于易用性,即跟踪快照还原项目文件变更。

    Rustory 的优势场景

    • 个人项目: 脚本、配置文件、文档的版本管理
    • 快速原型: 实验性代码的快照保存
    • 学习环境: 版本控制概念的学习和实践
    • 轻量需求: 不需要复杂工作流的小型项目
    • 二进制文件: 图片、视频、数据文件的版本跟踪

    设计目标

    • 本地优先: 专为个人开发者和脚本作者设计,无需分布式协作
    • 轻量高效: 纯 Rust 实现,无外部依赖,启动快速
    • 简单易用: 直观的命令行界面,快速上手
    • 存储优化: 内容去重 + 压缩存储,节省磁盘空间

    核心特性

    • 快照管理: 快速创建和恢复项目快照
    • 差异比较: 智能的文件差异检测和显示
    • 标签系统: 为重要快照添加描述性标签
    • 忽略规则: Git 风格的文件忽略模式
    • 垃圾回收: 自动清理过期数据,优化存储空间
    • 完整性验证: 数据完整性检查和修复
    • 丰富统计: 详细的仓库使用统计信息
    31 条回复    2025-09-04 10:09:12 +08:00
    javalaw2010
        1
    javalaw2010  
       182 天前   1
    感觉出发点有点奇怪

    “会出现好几个版本都要用,版本与版本之间存在微小差异,但是又具有延续性。既要来回对比,又要反复改动。”

    为啥不是在同一个脚本中,通过参数、选项或者配置文件来调整这些小的行为差异呢。
    litchinn
        2
    litchinn  
       182 天前   3
    git worktree?
    15855pm
        3
    15855pm  
       182 天前
    可能运维和测试这种写脚本多,写工程少的人能理解这个工具的作用
    maocat
        4
    maocat  
       182 天前
    我觉得你应该对标 SVN

    不如直接叫 RustSVN 吧
    isSamle
        5
    isSamle  
       182 天前   1
    @javalaw2010 这题我会,比如我有一个项目 A ,然后基于这个项目开发了 A1/A2/A3 ,然后 A 有改动,需要同步到 A1/A2/A3
    cmos
        6
    cmos  
    OP
       182 天前
    @litchinn #2
    受到了 git worktree 和 snv 的启发,但是用起来不顺手,就直接自己写了。
    calvinHxx
        7
    calvinHxx  
       182 天前
    emm...这些需求。用类似 fork 的 gitgui 已经可以实现了吧。拉几个分支,缓存几个本地局部文件 stash 就可以了吧。
    sampeng
        8
    sampeng  
       182 天前
    我以前也有这个困扰。后来。。。jetbrains 有本地历史记录。就无所谓了。而且是可视化的。多次救我老命。
    自己撸的不一定比 jetbrains 被无数人用的功能完善和 bug 少。
    javalaw2010
        9
    javalaw2010  
       182 天前
    @isSamle 我们也有这个场景,我的方案是 A 项目导出 patch ,A1/A2/A3 应用这个 patch 就好了,20 分钟前刚刚执行了一次这样的操作。
    cmos
        10
    cmos  
    OP
       182 天前
    @sampeng #8
    看来不止我一个人有类似困扰
    dupenn
        11
    dupenn  
       182 天前   1
    真棒,我去给你加星
    YsHaNg
        12
    YsHaNg  
       182 天前 via iPhone   1
    Rewrite Everything In Rust
    rekulas
        13
    rekulas  
       182 天前   8
    git 完胜
    因为敲 git 只需要 3 下 rustory 需要 7 下
    MacsedProtoss
        14
    MacsedProtoss  
       182 天前 via iPhone
    咱就是说 多分支 worktree 是哪里不好用了
    而且这个玩意用 rust 写真的会更快吗
    codehz
        15
    codehz  
       182 天前
    能像 git 一样记录上次合并的冲突解决方案并自动应用吗
    cmos
        16
    cmos  
    OP
       182 天前
    @codehz #15
    不行,它不是 git 的替代品
    qishua
        17
    qishua  
       182 天前   1
    @rekulas 你真有才
    james122333
        18
    james122333  
       182 天前 via Android
    @javalaw2010

    跟我一样 worktree 与相差无己 都占空间
    类 unix 原生方法好用很多
    Reficul
        19
    Reficul  
       182 天前
    目前在用 worktree 的我表示情绪稳定。
    james122333
        20
    james122333  
       182 天前 via Android
    其实不用原生指令也可以
    cmos
        21
    cmos  
    OP
       182 天前
    @rekulas 13#
    cmos
        22
    cmos  
    OP
       182 天前
    @MacsedProtoss 14
    1. worktree 是个好工具,但是频繁反复跳就很烦,所以才参考着搞了个本地版本快照。
    2. rust 真的很快,非常快。
    ccpp132
        23
    ccpp132  
       182 天前
    @rekulas 那 Mercurial 更胜一筹,只需要输入 hg 两个字符 :)
    hwdq0012
        24
    hwdq0012  
       182 天前
    git log --graph --oneline

    git reset --hard
    just1
        25
    just1  
       182 天前
    Helsing
        26
    Helsing  
       182 天前 via iPhone
    没看出比 worktree 有啥优势,我用 worktree 开多个工程,随便对照,不更香吗
    alechy
        27
    alechy  
       182 天前
    用 git 管理 rustory
    alleluya
        28
    alleluya  
       181 天前
    @maocat #4 一看就不是写 rust 项目的 这样的应该叫 svn-rs
    sleepyfevniv
        29
    sleepyfevniv  
       181 天前
    Git 被 JetBrains 家做可视化 gui 操作,还是挺舒服的。对于不想敲键盘和记忆命令的懒人我来说还是蛮有挑战性的
    Yancheng1116
        30
    Yancheng1116  
       104 天前   1
    感觉更适合的场景是现在用 cursor 等软件编程的时候为了防止代码被误删除会 git commit ;但频繁 commit 会让 git 日志杂乱,需要一个并行版本管理软件来解决
    cmos
        31
    cmos  
    OP
       104 天前
    @Yancheng1116 30#
    感谢提出的新方向,确实有这个问题和需求
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1031 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 87ms UTC 18:30 PVG 02:30 LAX 10:30 JFK 13:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86