Open3
Pijul メモ
インストール
まず Rust を入れる。以下のサイトに従って curl
を叩くなりDLしたりする。
$ echo 'source $HOME/.cargo/env' >> .zshrc`
$ rustup default stable
以下のページを参照し
依存関係のインストール後
$ cargo install pijul --version "~1.0.0-alpha"`
$ pijul -V
pijul 1.0.0-alpha.38
概要
Pijulの変更AとBは以下の関係のいずれか
- A と B は任意順番に適用可能(
commute
と表現されている)- A と B は独立していて、たがいに依存していない
- A は B に依存
- B は A に依存
変更は「履歴」のグラフではなく「変更(パッチ)」単位で行うので、いわゆる git rebase
的な(commute
な変更なら)操作が常に行える。
よって他のブランチからの git cherrypick
的な操作が簡単。
コミットは可換
コミット(パッチ)A
,B
,C
が commute
なとき変更適用順は可換。
-
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
のアルゴリズムによる違い(?)
参考: