Friday, October 26, 2007

cherry-picking

ช่วงนี้กระแส git กำลังมาแรง
เวลาอ่าน feed ก็จะได้เห็นเรื่องเกี่ยวกับ dvcs เยอะหน่อย
อย่างวันนี้เจอศัพท์ว่า “cherry-picking”

cherry-picking เป็น feature หนึ่งของ darcs
ความหมายก็คือ เวลาเรา push(หรือ pull) patch ไปอีก repository หนึ่ง
เจ้าโปรแกรม darcs มันจะค่อยๆนำเสนอ patch ทั้งหมดที่เกิดขึ้นใน local repository ของเรา
จากนั้นก็ให้เราเลือกตัดสินใจว่า จะ push patch นั้นหรือไม่
@pann[~/projects/javascript/test]$ darcs push ../dojo-grid/

Fri Oct 26 11:07:32 ICT 2007 pphetraATgmail.com
* remove unused css
Shall I record this patch? (1/?) [ynWsfqadjkc], or ? for help: ?
How to use record...
y: record this patch
n: don't record it
w: wait and decide later, defaulting to no

s: don't record the rest of the changes to this file
f: record the rest of the changes to this file

d: record selected patches, skipping all the remaining patches
a: record all the remaining patches
q: cancel record

j: skip to next patch
k: back up to previous patch
c: calculate number of patches

Shall I push this patch? (1/1) [ynWvpxqadjk], or ? for help: y
Finished applying...


เกร็ด: เวลาศึกษา darcs แล้วจะงงนิดหน่อย
เพราะเรามักจะคุ้นกับ concept "versions"
เช่น checkout revision 3172, ทำ tag release 0.1
แต่ใน darcs, concept ของมันจะวางอยู่บนคำว่า "patchs"
คนเขียน darcs ก็คือ David Roundy ซึ่งเป็น physics professor ที่ Berkeley
เขาเขียนโดยอิงกับ “theory of patches” (พึ่งเคยได้ยินเหมือนกัน)

ข้อดีอย่างหนึ่งของการวาง concept อยู่บน patch
ก็คือ มันบังคับให้ developer ต้องเขียนคำอธิบาย patch ดีๆ
ไม่เหมือนกับพวก commit message ของ cvs, svn ที่ developer เขียนส่งเดชอย่างไรก็ได้
เพราะถ้าคำอธิบายไม่ดีแล้ว รับรองว่าการ sync ระหว่างกัน
มันจะมั่วและสับสนมาก

Note: git ก็มี cherry-picking เหมือนกัน
แต่มันใช้ concept คนละอย่างกับ darcs
(ซึ่งส่งผลให้แนวการจัดการแตกต่างกัน)
อ่านเพิ่มเติมเรื่องนี้ Link

อืมม์ งาน codefest คราวนี้จะใช้ git หรือว่า darcs หรือ hg ดีหว่า

Related link from Roti