主要观点:git 虽有改进但仍有粗糙之处,新的版本控制系统入门有障碍,jj 是兼容 git 的版本控制系统,能带来更好体验且已试用两月,分享使用心得。
关键信息:
- 作者 2007 年接触 SVN,后因 Git 在 Windows 上难运行忽略,后因 Mercurial 更易安装和使用迁移到 Hg,2014 年左右迁移到 Git,2020 年 Bitbucket 关闭 Hg 托管支持。
- 有三种版本控制系统使用场景:工作、开源、个人项目。
- Sapling 是新一波 VCS 的代表,Facebook 对 Mercurial 的分支,有一些改进但缺 SSH 签名功能。
- jj 有原生和 git 后端,围绕 changesets 而非 commits,主要分支方法是匿名分支,力图简化概念,CLI 更一致,有更好的 rerere 功能等。
- jj 的优点:处理重复合并冲突好,可同时 rebasing 所有分支,简化 mental model,
jj squash
工作流易适应等,revset 语言更合理。 - jj 的缺点:仍在开发,部分功能缺失或不确定,有大量变动,如重命名
branch
为bookmark
,SSH 支持有问题,CLI 存在混淆,有两种模式导致与 Nix 交互不佳等。
重要细节: - 作者工作的公司有不同类型的 repo,开源库偶尔有第三方贡献,个人项目有时需分支工作。
- 在 jj 中,工作副本就是一个 commit,如
jj split
和jj squash
工作流。 jj log
命令比git log
更智能,能显示相关 commit 的缩写树。- Nix 与 jj 的隐藏
.git
文件夹模式交互不佳,需注意。 - 作者打算后续尝试 Sapling 或在个人项目中使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。