Hasty Briefsbeta

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适配层。