V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imes
V2EX  ›  程序员

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

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

    实验性代码的快照保存!

    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  
       78 天前   ❤️ 1
    感觉出发点有点奇怪

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

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

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

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

    git reset --hard
    Helsing
        26
    Helsing  
       78 天前 via iPhone
    没看出比 worktree 有啥优势,我用 worktree 开多个工程,随便对照,不更香吗
    alechy
        27
    alechy  
       78 天前
    用 git 管理 rustory
    alleluya
        28
    alleluya  
       77 天前
    @maocat #4 一看就不是写 rust 项目的 这样的应该叫 svn-rs
    sleepybear1113
        29
    sleepybear1113  
       77 天前
    Git 被 JetBrains 家做可视化 gui 操作,还是挺舒服的。对于不想敲键盘和记忆命令的懒人我来说还是蛮有挑战性的
    Yancheng1116
        30
    Yancheng1116  
       19 小时 17 分钟前   ❤️ 1
    感觉更适合的场景是现在用 cursor 等软件编程的时候为了防止代码被误删除会 git commit ;但频繁 commit 会让 git 日志杂乱,需要一个并行版本管理软件来解决
    imes
        31
    imes  
    OP
       19 小时 15 分钟前
    @Yancheng1116 30#
    感谢提出的新方向,确实有这个问题和需求
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:24 · PVG 05:24 · LAX 14:24 · JFK 17:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.