学习使用Pijul

做了一个小project, 第一次用 Git 以外的version control,想写一写 Pijul 记录一下。

Pijul 是什么?

Pijul 是一个分布式的版本控制系统, 区别于 Git,Pijul 没有 'commits' 的概念,也不会储存备份每一个文件变化版本,而是使用 'patch',把文件的变化内容作为版本控制的主旨。除此以外,Pijul 给每一份变化的内容 (patch) 生成一个独一无二的 hash ID。

Pijul 和 Git 这两者最主要的不同是: Pijul 只针对前后变化的内容, Git 操作基于 snapshots (文件的版本)。

什么是 patch? 

"A patch consists of a source file, a target file, and a function from one to the other that has certain additional properties." -- jneem

简单来说,patch 是两个文件之间的不同。比较一个文件前后变化,patch 必须是对应某一个文件经过前后变化而言的。 

那如果有两个 patch 呢?使用加法结合率,先加A, 后加B,组合的结果是C.

例如,有备忘录 o ,只写着 “穿鞋 “。 现在我们在穿鞋之前加一条 ”穿袜子“叫做 p,经过 p 得到备忘录 A。然后我们希望增加 “倒垃圾” (q) 这一项使不包含这一项的备忘录 A 经过 q 变成备忘录 B: 穿鞋 + 穿袜子 + 倒垃圾。 

组合 patches:

         A (穿袜子 + 穿鞋)       

p    /        \  r

o                  B     (穿袜子 + 穿鞋  + 倒垃圾)

 q  \          / s

           M (穿鞋 + 倒垃圾)

我: 穿袜子 +  穿鞋

妈妈: 穿鞋 + 倒垃圾

最终的备忘录文件:  穿袜子 +  穿鞋 + 倒垃圾

Pijul 如何完成 merge?

 把每一个文件可以看成一个图。每一行都是一个 node,跟下一行有个 edge。pijul 使用 patch 的好处是用户看不到 merge conflict, 但当两个人同时编辑同一行内容或一方删除同一段信息,Pijul 会产生merge conflict.

你可能感兴趣的:(学习使用Pijul)