好用的git替代品:Jujutsu——版本控制系统

360影视 动漫周边 2025-09-01 16:06 1

摘要:Jujutsu 是一款功能强大的软件项目版本控制系统 。您可以使用它来获取代码副本、跟踪代码更改,并最终发布这些更改供其他人查看和使用。开源项目地址:https://github.com/jj-vcs/jj

Jujutsu 是一款功能强大的软件项目版本控制系统 。您可以使用它来获取代码副本、跟踪代码更改,并最终发布这些更改供其他人查看和使用。开源项目地址:https://github.com/jj-vcs/jj

Jujutsu 与大多数其他系统不同,因为它在内部将用户界面和版本控制算法从用于提供内容的存储系统中抽象出来。这使得它可以作为一个 VCS,拥有许多可能的物理后端,这些后端可能拥有自己的数据或网络模型——例如Mercurial或 Breezy,也可能是像 Google 基于云设计的Piper/CitC这样的混合系统。

Jujutsu使用 Git 仓库作为存储层来服务和跟踪内容,使其能够与常用的众多基于 Git 的工具兼容!

Jujutsu将其他版本控制系统的许多独特设计选择和概念融入到单个工具中。其中一些灵感来源包括:

Git:致力于追求极致速度——拥有流畅的用户体验、高效的算法、精准的数据结构以及对细节一如既往的关注。默认存储后端使用 Git 存储库作为“物理存储”,以实现广泛的互操作性和便捷的上手体验。Mercurial 和 Sapling:有许多受 Mercurial 启发的功能,例如用于选择提交的revset语言。它没有显式的索引 或暂存区。分支与 Mercurial 一样是“匿名”的,因此您无需为每个小更改命名。用于重写历史记录的原语强大而简单。格式化输出由用户可配置的强大模板语言完成。Darcs :Jujutsu 在其模型中将冲突作为一等对象进行跟踪;它们与提交一样,属于一等公民,而 Git 等方案则只是将冲突视为文本差异。虽然不如 Darcs 等系统(基于形式化的补丁理论,而非快照)那么严谨,但其效果是可以自动执行和传播多种形式的冲突解决方式。

它还增加了几个创新且实用的功能:

工作副本即提交:文件的更改会自动记录 为常规提交,并在每次后续更改时进行修正。这种“快照”设计简化了面向用户的数据模型(提交是唯一可见的对象),简化了内部算法,并完全兼容 Git 的存储区或索引/暂存区等功能。操作日志和撤销:Jujutsu 记录对仓库执行的每一个操作,从提交、拉取到推送。这使得调试诸如“刚才发生了什么?”或“我怎么会跳到这里?”之类的问题变得更容易,尤其是在你帮助同事解答关于他们仓库的问题时!而且,由于所有操作都被记录下来,你可以轻松撤销刚刚犯下的错误。版本控制终于进入了20 世纪 60 年代!自动变基和冲突解决:当修改提交时,所有后代都会自动变基到新修改的提交之上。这使得“基于补丁”的工作流程变得轻而易举。如果解决了提交中的冲突,该冲突的解决方案也会传播到后代。实际上,这是一个完全透明的版本,由设计支持。git rebase --update-refsgit rerere

jj因为它易于输入且易于替换。该项目名为“Jujutsu”。

随着越来越熟悉,以下命令可能会有所帮助:

命令jj help(例如jj help rebase)。命令jj help -k (例如jj help -k config)。用于jj help --help 查看可用的关键字。

Jujutsu 的设计使得底层数据和存储模型是抽象的。目前,只有 Git 后端可用于生产环境。Git 后端使用了 gitoxide Rust 库。

Git 后端功能齐全且维护良好,您可以将 Jujutsu 与任何 Git 远程仓库配合使用。您创建的提交看起来与常规 Git 提交一样。您可以从常规 Git 远程仓库获取分支,并将分支推送到该远程仓库。您可以随时切换回 Git。

以下是如何使用 探索 GitHub 存储库的方法jj。

甚至可以拥有一个“同地”本地存储库 ,在其中互换使用jj和git命令。

Jujutsu 使用真实的提交来表示工作副本。检出提交会在目标提交之上生成一个新的工作副本提交。几乎所有命令都会自动修改工作副本提交。

工作副本本身就是一个提交,这意味着命令永远不会因为工作副本本身存在问题而失败(不会出现“错误:您对以下文件的本地更改...”),也无需git stash。此外,由于工作副本本身就是一个提交,因此命令在工作副本提交上的工作方式与在任何其他提交上的工作方式相同,因此您可以在完成更改之前设置提交消息。

在 Jujutsu 中,工作副本的作用比 Git 要小。命令会在启动前对工作副本进行快照,然后更新仓库,最后更新工作副本(如果工作副本提交被修改)。几乎所有命令(甚至包括 checkout!)都对仓库中的提交进行操作,将快照和更新工作副本的常见功能留给了集中式代码。例如,jj restore(类似于git restore)可以从任何提交恢复到任何提交,并且jj describe可以设置任何提交的提交消息(默认为工作副本提交)。

代码库中执行的所有操作都会被记录下来,并会生成操作后代码库状态的快照。这意味着可以轻松恢复到先前的代码库状态,逐个撤消操作,甚至可以还原特定操作(不必是最新操作)。

如果操作导致 冲突,则有关这些冲突的信息将记录在提交中。操作将成功。您可以稍后解决冲突。这种设计的一个结果是无需继续中断的操作。相反,您将获得一个用于解决冲突的单一工作流程,无论哪个命令导致了冲突。这种设计还允许 Jujutsu 正确地变基合并提交(与 Git 和 Mercurial 不同)。

基本冲突解决:

处理冲突:

每当您修改一个提交时,旧提交的任何后代都将被重新基于新提交。得益于上述冲突设计,即使存在冲突,也可以执行此操作。指向已重新基于提交的书签将被更新。如果工作副本指向已重新基于提交,则工作副本也会更新。

除了常用的 rebase 命令外,还有一个jj describe用于编辑任意提交描述(提交信息)的命令。此外,还有一个jj diffedit,它允许您在不签出提交的情况下编辑提交中的更改。要将一个提交拆分为两个,请使用jj split。您甚至可以使用 将一个提交中的部分更改移动到任何其他提交jj squash -i --from X --into Y。

来源:走进科技生活

相关推荐