Closed3
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のアルゴリズムによる違い(?)
参考:
このスクラップは2025/01/03にクローズされました