Git in Rust. 用 Rust 实现的mini Git. Called mit.
旨在简洁、高效且安全
学习
Git的最好方法就是去实现Git
支持的输入路径(pathspec):文件路径、目录路径(绝对或相对,包括. ./ ../)
支持 mit init, mit add, mit rm, mit commit
init: 初始化(若仓库已存在,则不执行)- idempotentadd: 将变更添加至暂存区(包括新建、修改、删除),可指定文件或目录-A(all) : 暂存工作区中的所有文件(从根目录开始)变更(新建√ 修改√ 删除√)-u(update): 仅对暂存区[index]中已跟踪的文件进行操作(新建× 修改√ 删除√)rm: 将文件从暂存区 &| 工作区移除. --cached : 仅从暂存区移除,取消跟踪-r(recursive): 递归删除目录,删除目录时必须指定该参数commitstatus: 显示工作区、暂存区、HEAD 的状态,(只包含当前目录);分为三部分:HEAD(最后一次Commit::Tree)比较,即上次的暂存区log支持分支 mit branch, mit switch, mit restore
branchswitch
与 checkout 不同,switch 需要指明--detach,才能切换到一个commit,否则只能切换分支。
同时为里简化实现,有任何未提交的修改,都不能切换分支。restore: 回滚文件--source 指定的版本,可指定操作暂存区 &| 工作区--source:可指定Commit Hash HEAD Branch Name--source,且无--staged,则恢复到HEAD版本,否则从暂存区[index]恢复--staged和--worktree均未指定,则默认恢复到--worktree--source中不存在的文件,若已跟踪,则删除;否则忽略支持简单的合并 mit merge (fast-forward)
index or stage,保存下一次commit需要的的文件快照worktree,用户直接操作的文件夹working directory or repository,代码仓库的根目录,即.mit所在的目录HEAD:指向当前commit的指针tracked,指已经在暂存区[index]中的文件(即曾经add过的文件)