Projection:用于拆分公共与私有文件的 JJ 工作流
本文介绍了一种名为 "Projection" 的 JJ 工作流,用于在版本控制中有效拆分公共文件(需要共享给外部协作者的部分)和私有文件(包含敏感信息或仅供内部使用的部分)。该工作流通过智能文件过滤和分支管理,确保公共仓库仅包含公开内容,同时私有仓库保留全部文件,从而在协作开发中兼顾安全性与效率。
背景速读
- 这篇博客讨论的是 **JJ (Jujutsu)**,一个较新的版本控制工具,被视为 Git 的潜在替代品。它借鉴了 Git 和 Mercurial 的设计,但内置了 "working-copy-as-a-commit" 等特性。
- 核心场景:开发者常常要把同一个项目同时推送到**公开仓库**(如 GitHub 开源版)和**私有仓库**(含 API 密钥、环境配置、未公开的代码等)。传统方案是用 Git 子模块或手动分离,容易出错。
- 作者提出的 "Projection" 工作流:利用 JJ 的 "匿名分支"、"变更跟踪" 和 "squashing" 能力,在同一仓库中用不同变更集(changesets)分别管理公开与私有文件,然后在推送时只选择公开的变更集。
- 关键词解读:**working copy**(工作副本)在 JJ 中本身就是一次 commit;**squash** 相当于 Git 的 rebase 合并;**anonymous branch** 是未命名的提交链,适合临时实验。
- 需要 JJ 0.25+ 版本,作者假设读者已经熟悉基础命令(`jj log`, `jj new`, `jj describe`, `jj branch set` 等)。