Jujutsu–与Git兼容的DVC,既简单又强大

2022-02-20 10:08:06

这不是谷歌的产品。这是一个实验版本控制系统(VCS)。这是我,马丁·冯·茨威格伯格(Martin von Zweigbergk)写的([email protected])这是我的个人爱好项目,也是我在谷歌的20%项目。它没有表明谷歌的任何承诺或方向。

Jujutsu是与Git兼容的DVC。它结合了Git(数据模型、速度)、Mercurial(匿名分支、无索引的简单CLI、Revset、强大的历史重写)和Pijul/Darcs(一流冲突)的功能,具有eitherof中找不到的功能(即提交即复制、撤消功能、自动重设基础、通过rsync、Dropbox或分布式文件系统进行安全复制)。

命令行工具现在被称为jj,因为它';It’很容易打字,也很容易替换(英语中很少见)。该项目名为";朱珠";因为它符合";jj";。

Jujutsu有两个后端。其中一个是Git后端(另一个是nativeone)。这使您可以使用Jujutsu作为Git的替代接口。您创建的提交看起来像是常规的Git提交。你可以随时切换回它。

大多数Jujutsu命令会自动提交工作副本。这将导致一个更简单、更强大的界面,因为所有命令在工作副本或任何其他提交上都以相同的方式工作。这还意味着您可以始终签出不同的提交,而无需先显式提交工作副本更改(甚至可以在解决合并冲突时签出不同的提交)。

工作副本仅在操作结束时,在记录了所有其他更改后更新。这意味着您可以运行任何命令(例如jj rebase),即使工作副本是脏的。

记录您在回购中执行的所有操作,以及操作后回购状态的快照。这意味着您可以轻松地恢复到早期回购状态,或者只需撤销特定操作(不一定是最近的操作)。

如果操作导致冲突,有关这些冲突的信息将记录在提交中。手术会成功的。然后,您可以稍后解决冲突。这种设计的一个结果是';没有必要继续中断的操作。相反,无论是哪个命令导致冲突,您都可以使用单个工作流来解决冲突。这种设计还允许Jujutsu rebase merge正确提交(与Git和Mercurial不同)。

无论何时修改提交,旧提交的任何子代都将重新设置为新提交。多亏了上面描述的冲突设计,即使存在冲突,这也可以成为一个问题。指向重定基址提交的分支将被更新。如果工作副本指向一个重定基址的提交,它也会这样做。

除了通常的rebase命令,还有';s jj用于编辑任意提交的描述(提交消息)。那里';s也是jj edit,它允许您在提交中编辑更改,而无需签出。要将提交一分为二,请使用jj split。您甚至可以使用jjmove将acommit中的部分更改移动到任何其他commit。

该工具的功能非常完整,但是一些重要的功能,比如git Gurn和git log<;路径>;尚未得到支持。还有几个性能缺陷。它';与我个人使用的不同的工作流和设置也可能没有得到很好的支持。例如,拉取请求工作流当前需要太多手动步骤。

早在2021年初,我就几乎完全使用JJ开发这个项目。我没有';我不需要从源代码重新克隆(我甚至不认为我需要从备份中恢复)。

在版本1.0.0之前,将对工作流进行更改,并对on-disk格式进行向后不兼容的更改。甚至二进制';s的名字可能会改变(即离开jj)。对于任何格式更改,I';我会尝试实现透明升级(就像我对最近的更改所做的那样),或者在需要时提供升级命令或脚本。

#我们需要";每晚";生锈的工具链。此命令将在不更改默认设置的情况下安装它。$Rustop install nightly$cargo+nightly install--githttps://github.com/martinvonz/jj.git

要设置命令行完成,请获取jj debug completion--bash/--zsh/--fish的输出。例如,如果使用Bash:

您可能还需要配置您的姓名和电子邮件,以便以您的姓名进行提交。创建一个~/。jjconfig文件,并使其看起来像这样:

开始学习的最好方法可能是阅读教程。另请参见Git比较,其中包括一个jj与Git命令表。

有几种工具试图解决与Jujutsu类似的问题。详见相关工作。