Skip to content
SteveYu000Public

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

BlockGit

Git for Minecraft Builds 面向 Minecraft 建筑协作的分布式版本控制系统。

BlockGit 希望让 Minecraft 建筑像软件源码一样被 stage、commit、branch、diff、merge、push 和 review。

项目首选使用 Gitea 承担仓库托管、组织权限、Pull Request、Review、Issue 和受保护分支,不再从零开发一套通用 Git 协作平台。BlockGit 只补充 Minecraft 特有的语义检查、文本报告、游戏身份桥接和游戏内 3D 交互;BlockHub 保留为可选的预配置发行方案,由 Gitea、BlockGit Gitea Bridge 与 BlockGit Identity 组合而成。

Important

BlockGit 目前处于设计与技术验证阶段,尚无可供日常使用的正式版本。当前工作的重点是验证世界数据往返、Git/JGit 对象格式、多人变更归属、暂存模型和安全检出。

完整产品与技术设计请阅读 开发文档。

寻找共同开发者

我正在寻找愿意共同设计和实现 BlockGit 的开发者、设计者、测试者与 Minecraft 创作者。

项目的核心方向已经形成,但大量细节仍需要原型、实验和讨论来验证。欢迎你提出不同方案、指出设计问题,或者从自己的建筑团队、服务器和 Mod 开发经验出发,重新审视当前设想。参与项目不要求完全赞同现有文档,也不要求一开始就提交代码。

特别欢迎具备以下任一经验的参与者:

  • Minecraft Java Edition、Fabric、NeoForge、Forge 或 Paper 开发;
  • Java/Kotlin、JGit、Git Object、Pack 与远程协议;
  • Anvil/NBT、Registry、Chunk、Block Entity 和世界存档格式;
  • WorldEdit、建筑工具、服务端事件追踪或 Mod/插件兼容;
  • Git 合并算法、三方 diff、内容寻址存储或大规模数据性能优化;
  • Gitea API、Webhook、Actions、Commit Status、OIDC 与 Git 托管集成;
  • 身份认证、应用安全、服务端运维或自托管平台;
  • 游戏内 UI、原生渲染、3D overlay 和冲突交互;
  • 大型建筑、校园还原、地图制作或多人创作项目管理;
  • 测试、文档、交互设计、翻译或社区维护。

如果你只有一个使用场景、一份测试世界、一个反例或一条意见,也非常有价值。

为什么需要 BlockGit

大型 Minecraft 建筑项目通常依赖世界备份、.litematic、WorldEdit schematic、操作日志和人工分工。这些工具可以保存或恢复内容,但很难完整解决长期多人开发中的问题:

  • 一个建筑需要同时维护多个方案和版本;
  • 不清楚某次提交具体修改了哪些坐标、方块和 NBT;
  • 多名玩家共享同一个世界,修改容易被错误归入他人的提交;
  • 只能提交整个选区,难以只选择某位玩家或某组事务的变化;
  • 两个分支修改同一位置时,文件级 Git 无法理解 Minecraft 冲突;
  • 缺少受保护分支、Pull Request、审查、权限和贡献统计;
  • 世界文件体积大、变化频繁,普通二进制备份难以增量存储和合并。

BlockGit 的目标不是简单地把整个世界压缩后提交到 Git,而是在 Minecraft 世界与 Git 之间建立稳定、可逆、可比较的语义数据层。

目标工作流

Minecraft World / Workspace
            │
            ▼
     status · diff · stage
            │
            ▼
   Git commit · branch · merge
            │
            ▼
       Gitea / compatible Git Remote
             │
             ▼
 Gitea PR · BlockGit Check · Review

三维空间相关操作保留在游戏内:

Minecraft Client
├─ 3D status overlay
├─ 3D diff
├─ staged / unstaged / other actor
└─ conflict resolver

当前设计共识

项目 当前决定
项目名称 BlockGit
首选 Web 协作底座 Gitea
BlockHub 定位 Gitea + BlockGit Gitea Bridge + BlockGit Identity 的可选预配置发行方案
首发游戏版本 Minecraft Java Edition 1.21.8
首发加载器 Fabric
后续适配顺序 NeoForge → Forge → Paper
首版追踪范围 Build Profile
版本库基础 Git/JGit,兼容标准 Git 远程
Gitea 集成方式 API、Webhook、Actions、Commit Status 与 OIDC;MVP 不 Fork Gitea
Web 差异展示 类似 GitHub 的结构化文本 diff
3D 差异展示 只在 Minecraft 客户端内提供
默认用户身份 游戏认证身份与 Java UUID 绑定
开源许可证 GPL-3.0-or-later

这些决定用于收敛首个原型,不代表后续设计不能通过数据和实践调整。

核心设计

1. Git 兼容的 Minecraft 语义快照

BlockGit 使用 JGit 管理标准 Git Commit、Tree、Blob、Ref 和远程传输。Minecraft 世界会先被规范化为稳定的语义结构,再写入 Git Tree,而不是直接提交不断变化的原始世界文件。

Git Commit
└─ Semantic Tree
   ├─ blockgit.toml
   └─ world/
      └─ dimensions/
         └─ regions/
            └─ chunks/
               └─ sections/
                  ├─ Block States
                  ├─ Block Entities / NBT
                  └─ Build Profile Entities

仓库可以推送到 Gitea、GitHub 或其他标准 Git 服务。Gitea 是首个重点支持的协作宿主,负责 Git 对象、分支、PR、Review 和权限;BlockGit Checker 或 Gitea Bridge 负责生成 Minecraft 语义 diff、兼容性检查与合并检查。Core 通过 GitHostAdapter 保持平台无关,不能把仓库格式绑定到 Gitea。

2. Workspace

普通 Git 中,每位开发者拥有独立 Working Tree;Minecraft 多人服务器中的玩家却经常同时修改同一个世界。

BlockGit 将 Workspace 作为一级概念:

Workspace
├─ repository / branch
├─ world / dimension / origin
├─ tracked area
├─ owner / writers / readers
├─ lock mode
└─ dirty state

同一坐标默认只能属于一个可写 Workspace,从源头减少权限、归属和暂存歧义。需要并行方案时,可以把相同仓库检出到不同位置、世界或维度。

3. ChangeTransaction 与变更归属

系统记录的是“谁引发了哪一次变化”,而不是“某个方块永久属于谁”。

ChangeTransaction
├─ direct actor
├─ initiator
├─ source / cause
├─ attribution confidence
└─ semantic changes[]

BlockGit 会尽量识别玩家、命令、WorldEdit 和其他扩展引发的变化。无法可靠解释的变化必须标记为 SYSTEM、UNKNOWN 或低置信度来源,不能静默归给最近操作的玩家。

4. Minecraft Staging Area

BlockGit 计划实现真正的 HEAD → Index → Working Tree 三态模型,并支持:

  • 按玩家暂存;
  • 按空间范围暂存;
  • 按完整事务暂存;
  • 逐项暂存与取消暂存;
  • 提交后保留其他玩家尚未暂存的变化。

5. 语义 Diff、Merge 与冲突

合并以 Base、Ours、Theirs 为输入:

  • 只有一侧修改时自动采用修改侧;
  • 两侧修改不同坐标时尝试自动合并;
  • 同一坐标产生不同结果时形成 Minecraft 语义冲突;
  • Block Entity 尝试进行 NBT 字段级合并;
  • 无法证明安全的情况默认产生冲突,而不是覆盖数据。

Gitea 使用原生文本 diff 和 BlockGit 生成的 PR 报告展示坐标、BlockState、NBT 路径和 Before/After;Minecraft 客户端负责把相同结构化 diff 渲染成 3D overlay,并提供空间化冲突解决。

6. 身份与 Gitea 登录

用户默认通过游戏已经认证的 Java UUID 建立 BlockGit 身份。在可信游戏会话中,玩家可以发起一次性账户绑定,在 HTTPS 页面设置 BlockGit Identity 登录凭据。

绑定完成后,在已接入 BlockGit Identity 的自托管 Gitea/BlockHub 实例中,用户无需启动 Minecraft,即可通过 OIDC 登录 Gitea。无实例管理权的第三方 Gitea 继续使用原有登录方式,再通过 OAuth2 与 BlockGit User 建立一次性账户关联。BlockGit 密码不会同步给 Gitea,也不会通过 Minecraft 聊天、命令参数或服务端日志明文传输。

游戏认证只负责确认身份,不自动授予仓库权限;组织、仓库、分支和 Workspace 仍分别执行授权检查。

BlockGit 与 Gitea 的边界

能力 Minecraft / BlockGit Gitea Web
世界读取与写入 是 否
status / stage / commit 是 查看状态与提交记录
3D diff 与投影 是 否
三维冲突解决 是 否
文本 diff 生成结构化 diff 原生 diff + BlockGit 文本报告
语义完整性与合并检查 BlockGit Core 通过 Actions/Bridge 回写状态
Pull Request、Issue 与审批 可发起/同步 Gitea 原生提供
组织、团队与分支权限 执行 Workspace 权限 Gitea 为仓库授权事实来源

Web 端不计划实现 WebGL 世界查看器。需要理解空间关系时,用户可以从 Commit 或 PR 获取标识,并在 Minecraft 中打开对应的 3D diff。BlockHub 不是一套重新开发的 GitHub/Gitea,而是由 Gitea 和 BlockGit 扩展组件组成的官方一体化部署方案。

当前开发路线

P0:技术验证

  • 冻结第一版 Git Semantic Tree 和 blockgit.toml 草案;
  • 完成 Fabric 1.21.8 Build 数据的读入、规范化和安全写回;
  • 使用 JGit 创建可被标准 Git CLI 和远程识别的 Commit;
  • 建立原版、Mod 方块、Block Entity 和自定义维度测试语料;
  • 验证玩家、命令、WorldEdit 和系统变化的基础归属;
  • 证明 Snapshot、Change Log、Index 与当前世界可以可靠对账。

P1:本地 Alpha

  • init、status、stage、diff、commit、log 和 branch;
  • 游戏内 3D diff 与状态投影;
  • 在线 checkout / restore 的锁、写前日志和崩溃恢复;
  • 标准 Git remote 的 clone/fetch/push。

P2:多人协作 Alpha

  • Server Companion、Workspace、ACL、Lock/Freeze;
  • 多人 ChangeTransaction 与按操作者暂存;
  • 游戏 UUID 绑定、BlockGit Identity 凭据、受管 Gitea OIDC 登录和第三方 Gitea OAuth2 AccountLink;
  • 独立副本间的远程同步和非冲突合并。

P3:Gitea 集成 Beta

  • 可复用的 Gitea Actions 语义检查工作流;
  • 必要时提供 Gitea Bridge,用于统一 Webhook、幂等任务和 Commit Status 回写;
  • PR 的结构化文本摘要、完整报告链接和“在 Minecraft 中打开”标识;
  • Gitea 受保护分支强制 BlockGit Check;
  • BlockGit Identity 与 Gitea OIDC 账户关联。

详细退出条件和后续阶段见 开发文档。

欢迎讨论的问题

当前文档中的方案都欢迎被检验。尤其希望听到大家对以下问题的看法:

  • Semantic Tree 应该使用 Chunk、Section,还是更细的空间粒度?
  • 如何在 Git 对象数量、Pack 大小、diff 性能和局部复用之间取舍?
  • WorldEdit、命令和异步 Mod 应怎样传播可靠的 actor/transaction context?
  • Build Profile 默认应该追踪哪些装饰实体和 Block Entity 字段?
  • 在线 checkout/merge 应怎样控制玩家安全、区块更新和崩溃恢复?
  • 游戏内 3D diff 在大型建筑上应如何降级并保持流畅?
  • Gitea 原生 diff、PR Markdown 摘要和独立完整报告应如何分工?
  • Gitea PR 与 BlockGit 语义合并应该如何衔接并强制检查?
  • 自托管 Minecraft 服务器、BlockGit Identity 和 Gitea 实例之间应如何建立信任?
  • 如何在不 Fork Gitea 的前提下提供足够清晰的大型建筑文本审查?
  • 哪些设计会妨碍真实建筑团队使用?

不必给出完整解决方案。真实使用场景、失败案例和对当前方向的质疑同样欢迎。

如何参与

  1. 阅读本 README 和 开发文档。
  2. 选择你关心的使用场景或技术问题。
  3. 创建 Issue,描述问题、方案、替代方案或实验结果。
  4. 对影响仓库格式、协议、合并语义或身份安全的改动,先讨论简短 RFC。
  5. 小型修正、测试语料、文档和可独立验证的原型可以直接提交 Pull Request。

提出设计意见时,如果方便,可以包含:

  • 真实场景:谁在什么环境中遇到了什么问题;
  • 期望行为:用户最终希望完成什么;
  • 建议方案:数据结构、流程或交互可以怎样设计;
  • 代价与风险:性能、兼容性、安全性或复杂度影响;
  • 验证方法:怎样通过测试世界、基准或原型判断方案是否有效。

贡献原则

  • 世界数据安全优先,不允许静默丢失、替换或错误归属。
  • 重要结论尽量由测试世界、基准数据或可复现原型支持。
  • 仓库格式、协议和兼容性变化需要显式版本化。
  • 优先完成小而完整的纵向闭环,再逐步扩展加载器和平台。
  • 欢迎建设性的不同意见,讨论针对设计与证据,不针对参与者。

设计参考

BlockGit 的设计受到 Gitmatica、MCGit 和 Reden RVC 等项目的启发:

  • Gitmatica 展示了 Semantic Storage、tracked mask 和方块级三方合并的价值;
  • MCGit 提供了贴近 Git Working Tree、Stage、Commit 和 relative origin 的思路;
  • Reden RVC 展示了红石结构、运行状态、Region 和模块化方向的可能性。

BlockGit 希望在这些探索之上,进一步解决多人共享 Working Tree、玩家变更归属、Workspace 权限、选择性暂存和 Web 协作问题。欢迎熟悉这些项目的开发者纠正理解或补充经验。

项目状态与许可证

  • 当前状态:早期设计 / P0 技术验证准备阶段;
  • 首个目标:Minecraft Java Edition 1.21.8 + Fabric + Build Profile;
  • 许可证:GPL-3.0-or-later;
  • 开发文档:docs/DEVELOPMENT.md。

如果你对“Minecraft 的 Git”感兴趣,欢迎留下你的想法,也欢迎一起把它真正做出来。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors