103次发布

1.0.0-beta.92024年2月7日
1.0.0-beta.82023年12月15日
1.0.0-beta.72023年10月27日
1.0.0-beta.62023年6月28日
0.1.0 2016年2月2日

110异步

Download history 52/week @ 2024-04-20 41/week @ 2024-04-27 30/week @ 2024-05-04 36/week @ 2024-05-11 88/week @ 2024-05-18 81/week @ 2024-05-25 82/week @ 2024-06-01 52/week @ 2024-06-08 72/week @ 2024-06-15 49/week @ 2024-06-22 28/week @ 2024-06-29 447/week @ 2024-07-06 87/week @ 2024-07-13 31/week @ 2024-07-20 50/week @ 2024-07-27 24/week @ 2024-08-03

216 每月下载量

GPL-2.0-or-later

495KB
12K SLoC

Pijul

这是 Pijul 的仓库,Pijul 是一个基于异步工作数学理论的可靠且快速的分布式版本控制系统。

许可证

许可证为 GPL-2.0。

文档

虽然我们正在编写文档,但以下是一些有用的命令:

创建仓库

$ pijul init

添加文件

如果您想跟踪文件夹中的所有文件并记录更改,请执行以下操作:

$ pijul rec that_folder

如果您想添加要跟踪的文件:

$ pijul add these_files

进行更改

Pijul 基于更改,因此最重要的命令是创建更改的命令

$ pijul rec

您将看到一个更改草案,您可以批准或编辑它,通过删除部分,其中部分由一个数字(形式为 1.)后跟操作名称(例如:File addition: "my_file" in "/" 420)引入。

当然,您可以尝试其他编辑,但它们不一定有效。

协作

远程 是对另一个仓库的引用,例如 pijul@ssh.pijul.com:manual 用于 manual 仓库,或 me@ssh.pijul.com:pijul/manualhttps://nest.pijul.com/pijul/manual,或本地路径 /path/to/my/repository

remote 命令允许您查看保存的远程仓库,并可能删除它们。

pushpull 命令与远程仓库交换更改。

克隆仓库目前需要一个目标目录,或者默认使用当前目录作为目标

$ pijul clone https://nest.pijul.com/pijul/pijul

提示:通过 SSH 克隆通常更快。

回到过去

如果您想将文件重置到最后一次记录的版本,只需执行以下操作:

$ pijul reset

如果您想从历史中移除一些更改

$ pijul unrecord PREFIX_OF_CHANGE_HASH

其中 PREFIX_OF_CHANGE_HASH 是更改哈希的一个唯一前缀,可以通过执行 pijul log 来找到。

导入 Git 仓库

如果您使用 --features git 编译了 Pijul,则 git 命令允许您从 Git 仓库导入更改。这是通过重放仓库历史记录实现的,并且没有特别优化,因此在大型仓库上可能需要很长时间。

目前 Git 的一个缺失特性是符号链接,该命令将其视为普通文件(即可能会导入多次)。

关于通道

通道是一种在同一个地方维护仓库的两个相关版本的方式(有点像 Git 中的分支)。

形式上,通道是指向一组更改的指针(通道的 状态 是一组更改)。

但是,通道与 Git 分支不同,且不服务于相同的目的。在 Pijul 中,独立更改可以交换,这意味着在许多 Git 中使用分支的场合,在 Pijul 中没有必要创建通道。

与 Git 分支的主要区别包括

  • 更改的身份不依赖于它所在的分支,换句话说,rebase 和 merge 在 Pijul 中是相同的操作。

  • 这意味着在解决冲突后,冲突不会神秘地再次出现(这正是 git rerere 的用途)。

  • 此外,冲突是在更改之间,因此在一个通道上解决冲突可以解决所有其他通道中的相同冲突。

贡献

我们欢迎所有贡献。此外,由于这个项目旨在使与其他人协作更容易(我们正在接近实现这一点),我们显然将相互尊重和包容性放在首位。

此外,由于这是一个 Rust 项目,我们要求贡献者在记录更改之前在其代码上运行 cargo fmt。这可以通过将以下行添加到仓库的 .pijul/config 来自动完成。

[hooks]
record = [ "cargo fmt" ]

依赖项

~51–69MB
~1M SLoC