10个版本 (5个破坏性版本)
0.7.1 | 2023年7月18日 |
---|---|
0.7.0 | 2023年2月16日 |
0.6.1 | 2022年12月6日 |
0.5.1 | 2022年10月19日 |
0.2.0 | 2021年5月15日 |
#4 in #vcs
7MB
38K SLoC
包含 (ELF exe/lib, 13MB) result/bin/jj
已弃用
《jujutsu》和《jujutsu-lib》crate已被《jj-cli》和《jj-lib》crate取代,分别。
请升级到《jj-cli》/<《jj-lib》》版本0.8+,或者如果您需要编译旧版本,请指定《jujutsu》/<《jujutsu-lib》》版本“=0.7.0”。
jujutsu VCS
免责声明
这不是一个Google产品。这是一个实验性的版本控制系统(VCS)。这是我(Martin von Zweigbergk)编写的,我的电子邮件是[email protected]。这是我的个人爱好项目,也是我在Google的20%项目。这并不代表Google有任何承诺或方向。然而,我在Git Merge 2022的演示中包含了一些关于Google计划的信息。请参阅幻灯片或录音。
简介
柔术是一种与Git兼容的Git兼容 分布式版本控制系统(DVCS)。它结合了Git(数据模型、速度)、Mercurial(匿名分支、简单的命令行免于“索引”、revsets、强大的历史重写功能)和Pijul/Darcs(《第一类冲突》),以及它们中大部分没有的特性(《工作副本作为提交》、《撤销功能》、自动变基、通过rsync
、Dropbox或分布式文件系统安全复制)。
目前,命令行工具称为jj
,因为它易于输入且易于替换(在英语中很少见)。项目名称为“柔术”,因为它与“jj”相匹配。
特性
与Git兼容
柔术有两个后端。其中一个是Git后端(另一个是本地后端[^native-backend])。这使您可以使用柔术作为Git的替代界面。您创建的提交将看起来像常规Git提交。您始终可以切换回Git。Git支持使用libgit2 C库。
[^native-backend]: 目前,实际上没有理由使用本地后端(唯一可能的原因可能是#27)。后端主要存在是为了确保最终能够添加无法轻易添加到Git后端的功能。
工作副本会自动提交
大多数柔术命令会自动提交工作副本。这导致了一个更简单、更强大的界面,因为所有命令在工作副本或任何其他提交上都以相同的方式工作。这也意味着您可以在不首先明确提交工作副本更改的情况下检查出不同的提交(甚至在解决合并冲突时也可以)。
操作首先更新仓库,然后可能更新工作副本
工作副本仅在操作结束时更新,在其他所有更改都已记录之后。这意味着即使工作副本是脏的,您也可以运行任何命令(如jj rebase
)。
整个仓库处于版本控制之下
您在仓库中执行的任何操作都将被记录,以及操作后仓库状态的快照。这意味着您可以轻松地回滚到较早的仓库状态,或者简单地撤销特定操作(这不一定是最新的操作)。
冲突可以记录在提交中
如果操作导致冲突,关于这些冲突的信息将被记录在提交中。操作将成功。然后您可以稍后解决这些冲突。这种设计的一个后果是,不需要继续中断的操作。相反,您将获得一个解决冲突的单个工作流程,无论哪个命令导致冲突。这种设计还使柔术能够正确地变基合并提交(与Git和Mercurial不同)。
基本的冲突解决
处理冲突
自动变基
每当您修改一个提交时,任何旧提交的子提交都将变基到新提交。由于上述冲突设计,即使存在冲突也可以这样做。指向变基提交的分支将更新。如果工作副本指向变基提交,它也将更新。
全面支持历史重写
除了常规的rebase命令外,还有jj describe
用于编辑任意提交的描述(提交信息)。还有jj diffedit
,它允许您在不检出提交的情况下编辑提交中的更改。要将提交拆分为两个,请使用jj split
。您甚至可以使用jj move
将提交中的一部分更改移动到任何其他提交。
状态
该工具功能齐全,但一些重要功能(如git blame
的等效功能)尚不支持。还存在几个性能错误。还可能不支持与核心开发者使用的不同的工作流程和设置。
自从2021年1月初以来,我(马丁·冯·齐格贝格克)几乎只使用jj
来开发项目本身。我几乎不需要从源代码重新克隆(我认为我甚至不需要从备份中恢复)。
在版本1.0.0之前,工作流程将会有所变化,磁盘格式将会有不兼容的更改。即使二进制文件的名称也可能更改(即,不再是jj
)。对于任何格式更改,我们都会尝试实现透明的升级(就像我们最近所做的),或者如果需要,提供升级命令或脚本。
安装
下面是如何从源代码构建的说明。还有适用于Windows、Mac或Linux(musl)的预构建的二进制文件。
如果您是从源代码安装,则需要使用Rust版本1.61或更高版本,否则您将收到类似这样的神秘信息
error: failed to select a version for the requirement `libgit2-sys = "=0.14.0"``
candidate versions found which didn't match: 0.13.2+1.4.2, 0.13.1+1.4.2, 0.13.0+1.4.1, ...
Linux
在大多数发行版上,您需要使用cargo
直接从源代码进行构建。
使用cargo
进行构建
首先确保您已安装了libssl-dev
、openssl
和pkg-config
软件包,方法如下运行类似以下命令的内容
sudo apt-get install libssl-dev openssl pkg-config
现在运行
cargo install --git https://github.com/martinvonz/jj.git --locked --bin jj jujutsu
Nix OS
如果您在Nix OS上,您可以使用此存储库的flake。例如,如果您想从flake运行jj
,请使用
nix run 'github:martinvonz/jj'
您也可以将此flake URL添加到您的系统输入flake中。或者,您可以将flake安装到您的用户配置文件中
nix profile install 'github:martinvonz/jj'
Homebrew
如果您使用linuxbrew,您可以运行
brew install jj
Mac
Homebrew
如果您使用Homebrew,您可以运行
brew install jj
MacPorts
您也可以通过MacPorts(作为jujutsu
端口)安装jj
。
sudo port install jujutsu
(端口页面)
从源代码
您可能需要运行以下命令之一或全部
xcode-select --install
brew install openssl
brew install pkg-config
export PKG_CONFIG_PATH="$(brew --prefix)/opt/openssl@3/lib/pkgconfig"
现在运行
cargo install --git https://github.com/martinvonz/jj.git --locked --bin jj jujutsu
Windows
运行
cargo install --git https://github.com/martinvonz/jj.git --locked --bin jj jujutsu --features vendored-openssl
初始配置
您可能想配置您的姓名和电子邮件地址,以便在您的姓名下进行提交。在~/.jjconfig.toml
中创建一个文件,并使其看起来像这样
$ cat ~/.jjconfig.toml
[user]
name = "Martin von Zweigbergk"
email = "[email protected]"
命令行补全
要设置命令行自动完成,请使用jj debug completion --bash/--zsh/--fish
的输出。如何使用它取决于您的shell。
Bash
source <(jj debug completion) # --bash is the default
Zsh
autoload -U compinit
compinit
source <(jj debug completion --zsh | sed '$d') # remove the last line
compdef _jj jj
Fish
jj debug completion --fish | source
Xonsh
source-bash $(jj debug completion)
入门
开始的最佳方式可能是通过教程。还可以查看Git比较,其中包含jj
与git
命令的表格。
相关工作
有几种工具试图解决与Jujutsu类似的问题。详见相关工作。
依赖项
~27–41MB
~723K SLoC