Mount Git repo to view commits and branches as files
a day ago
- #fuse
- #filesystem
- #git
- GitSnapFS将Git仓库快照作为只读文件系统公开,用于检查、审计和工具集成。
- 通过`/commits/<提交ID>`、`/branches/`、`/tags/`和指向提交的`/HEAD`符号链接提供访问。
- 使用基于Git对象ID的合成inode,确保跨视图的稳定链接。
- 只读的惰性加载文件系统,无需预扫描底层仓库即可更新。
- 通过跨`exec`复制FUSE文件描述符支持热升级。
- 通过零消息的open/opendir路径优化性能(`NO_OPEN_SUPPORT`、`NO_OPENDIR_SUPPORT`)。
- 需要Linux系统及FUSE内核支持(`EXPORT_SUPPORT`、`ZERO_MESSAGE_OPEN`、`ZERO_MESSAGE_OPENDIR`)。
- 依赖`fusermount`/`fusermount3`和Rust工具链(nightly或stable版本)。
- 挂载命令:`cargo run -- --repo path/to/.git --mountpoint /tmp/gitfs`。
- 卸载方式:`fusermount -u /tmp/gitfs`或终止进程。
- 设计文档见`codex_spec.md`;通过`cargo fmt`和`cargo clippy`强制执行代码格式化/静态检查。
- 采用`gix`处理Git访问,使用`fuse-backend-rs`实现FUSE,避免libfuse/libgit2适配层。