Open3

Pijul メモ

zenwerkzenwerk

インストール

まず Rust を入れる。以下のサイトに従って curl を叩くなりDLしたりする。

https://rustup.rs/

$ echo 'source $HOME/.cargo/env' >> .zshrc`
$ rustup default stable

以下のページを参照し

https://pijul.org/manual/installing.html

依存関係のインストール後

$ cargo install pijul --version "~1.0.0-alpha"`
$ pijul -V
pijul 1.0.0-alpha.38
zenwerkzenwerk

概要

https://pijul.org/manual/why_pijul.html

Pijulの変更AとBは以下の関係のいずれか

  • A と B は任意順番に適用可能(commuteと表現されている)
    • A と B は独立していて、たがいに依存していない
  • A は B に依存
  • B は A に依存

変更は「履歴」のグラフではなく「変更(パッチ)」単位で行うので、いわゆる git rebase 的な(commuteな変更なら)操作が常に行える。
よって他のブランチからの git cherrypick 的な操作が簡単。

コミットは可換

コミット(パッチ)A,B,Ccommute なとき変更適用順は可換。

  • A+(BC)(AB)+C
    • つまりコミットの順番(履歴)は無関係 → git とは違う箇所


A + (BC) というコミット履歴

A + B + C というコミット履歴

上記の二つは結果的にはA + B + Cとして扱われる。

Git との違い

以下のテキストファイルを二人が編集したとき

A
B

アリスは

+ A
+ B
+ G
A
B

ボブは

A
+ X
B

これをマージするとき
Git

コンフリクトは発生しないが、Gitはスナップショット(バージョン)を追跡するので Aが重複する

Pijul

コンフリクトは発生しないが、パッチを追跡するので A が重複していない

これらは採用するdiffのアルゴリズムによる違い(?)


参考: