-
อิงตามทฤษฎีแพตช์ แต่ยังคงทำงานได้รวดเร็วและขยายต่อได้
-
Commutation
→ การเปลี่ยนแปลงแต่ละรายการสามารถนำไปใช้ได้โดยไม่ขึ้นกับลำดับ และไม่เปลี่ยน version id
→ เวิร์กโฟลว์เรียบง่ายกว่า git rebase หรือ hg transplant มาก
→ มีฟีเจอร์ channels ที่คล้ายกับ branch แต่ไม่ใช่สิ่งสำคัญเหมือนในระบบอื่น ตัวอย่างเช่น feature branch ใน Pijul เป็นเพียงการเปลี่ยนแปลงอย่างหนึ่งเท่านั้น
→ การรักษา history ให้สะอาดเป็นค่าตั้งต้น
- Merge correctness
→ Pijul รับประกันบางอย่างในระหว่างการ merge
→ สิ่งที่สำคัญที่สุดคือจะรักษาลำดับของบรรทัดไว้เสมอ ต่างจาก 3-way merge ที่บางครั้งบรรทัดอาจสลับปะปนกัน
→ หากไม่สามารถระบุลำดับได้ (เช่น กรณีแก้ไขพร้อมกัน) จะถือเป็น Conflict ซึ่งต่างจากระบบที่มองว่าเป็น "Automatic" หรือ "No Conflict"
- First-class conflicts
→ ใน Pijul, Conflict ไม่ได้ถูกมองว่าเป็น "merge ล้มเหลว" แต่ถูกทำเป็นแบบจำลองให้เป็นกรณีมาตรฐาน
→ โดยเฉพาะ Conflict ที่เกิดขึ้นระหว่างการเปลี่ยนแปลงสองรายการ จะถูกแก้ไขด้วยการเปลี่ยนแปลงหนึ่งรายการ
- Partial Clones
→ เมื่อใช้ Commutation จะสามารถโคลนเฉพาะส่วนย่อยเล็ก ๆ ของ repository ได้ และในทางปฏิบัติก็สามารถนำไปใช้เฉพาะการเปลี่ยนแปลงของส่วนย่อยนั้นได้ด้วย
→ งานที่เกี่ยวกับ Partial Clone จะสร้าง Changes ที่สามารถส่งเข้าไปยัง repository ขนาดใหญ่ได้อย่างง่ายดาย
3 ความคิดเห็น
พูดตรงๆ ว่าแม้ Git จะเป็นมาตรฐานที่ใช้กันในงานจริง แต่ก็ใช้งานลำบากมาก T_T ถึงเวลาค่อยๆ ย้ายไปใช้ Pijul ที่พัฒนาด้วย Rust แล้ว
ความแตกต่างที่ใหญ่ที่สุดระหว่าง svn กับ git (ถ้าไม่นับเรื่องที่เป็น distributed repository) คือ svn จัดการ
diffในขณะที่ git จัดการ snapshot แต่พอเห็นว่าเป็น patch theory ก็เลยรู้สึกว่ามันน่าจะเป็นแนวที่จัดการdiffมากกว่านะครับทฤษฎีแพตช์ (Theory of Patches) ดูได้จาก Darcs ซึ่งเป็นระบบจัดการเวอร์ชันแบบกระจาย
เวลาเปรียบเทียบ Darcs กับ Git มักอธิบายแบบนี้
A set of changes that you record in Git is called a “commit”, while in Darcs it is called a “patch”.