来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247486206&idx=1&sn=0016ac200b6512fa698f73d9549dbc27&chksm=f95c9179ce2b186ff86187d7b52d80233759390cfff8933eb2be9ee1011394d7851b29f8d998#rd
rgit
一个用 Rust 从零实现的最小可用 Git,支持基本的版本控制操作和远程推送功能。
特性
✅ 完整的本地 Git 操作:init、add、commit、status、log
✅ 分支管理:branch、checkout
✅ 远程仓库:remote add、push
✅ 兼容标准 Git 对象格式(blob/tree/commit)
✅ 使用 zlib 压缩和 SHA-1 哈希
✅ 支持 SSH 和 HTTPS 协议推送
安装
确保已安装 Rust 工具链(≥1.75),然后克隆并编译:
git clone
cd rgit
cargo build –release
编译后的二进制文件位于 target/release/rgit。
使用方法
初始化仓库
rgit init
添加文件到暂存区
rgit add <文件路径>文件路径>
提交更改
rgit commit -m ”提交信息”
查看状态
rgit status
查看提交历史
rgit log
分支操作
创建新分支
rgit branch <分支名>分支名>
切换分支
rgit checkout <分支名>分支名>
远程操作
添加远程仓库
rgit remote add <远程名>
推送到远程
rgit push <远程名> <分支名>分支名>远程名>
完整示例
初始化仓库
rgit init
添加文件
echo”Hello, rgit!” > README.txt
rgit add README.txt
提交
rgit commit -m ”Initial commit”
添加远程仓库
rgit remote add origin git@github.com:username/repo.git
推送到远程
rgit push origin main
技术实现
核心模块
repo.rs
- 仓库初始化、配置管理
objects.rs
- Git 对象(blob/tree/commit)的编码/解码
index.rs
- 最小暂存区实现
refs.rs
- 引用(HEAD、分支)管理
pack.rs
- 打包对象处理
push.rs
- 远程推送实现
pktline.rs
- Git 协议行处理
依赖库
clap
- 命令行参数解析
anyhow
- 错误处理
tracing
- 日志记录
flate2
- zlib 压缩
sha1
- SHA-1 哈希
walkdir
- 目录遍历
chrono
- 时间处理
对象存储
所有 Git 对象遵循标准格式:
<类型> <长度>\0<内容> 使用 zlib 压缩后存储在 .git/objects/xx/yyyy... 路径下。 远程推送 支持通过 SSH 和 HTTPS 协议推送: SSH - 使用本机 ssh-agent 或私钥文件(~/.ssh/id_rsa、~/.ssh/id_ed25519) HTTPS - 支持 token 或密码认证 调试模式 使用 --verbose 标志启用详细日志: rgit --verbose commit -m "详细日志模式" 限制与假设 采用最小暂存区实现,不支持完整的 Git index 二进制格式 推送操作针对当前分支,不支持复杂的 rebase/merge 场景 不支持交互式认证,需预先配置 SSH 密钥或环境变量 使用 SHA-1 哈希算法(与标准 Git 兼容) 后续计划 [ ] 完整的 index 二进制格式支持 [ ] 支持 merge 和 rebase 操作 [ ] 实现自定义协议层(pkt-line/packfile) [ ] 支持 SHA-256 模式 [ ] 性能优化与增量传输 [ ] 更丰富的进度显示 许可证 本项目采用 MIT 许可证 - 详见 LICENSE 文件。 贡献 欢迎提交 Issue 和 Pull Request! 致谢 本项目是一个教育性质的 Git 实现,旨在深入理解 Git 内部机制。 https://github.com/build-your-own-x-with-ai/rust_git  内容>长度>类型>