Differences between revisions 5 and 6
Revision 5 as of 2008-11-21 09:40:48
Size: 12718
Comment: Put into Thai category
Revision 6 as of 2009-05-19 19:30:56
Size: 12735
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
''(บทนี้เป็นบทที่ 3 จาก 9 บทของ [:ThaiTutorial:บทเรียนการใช้งาน Mercurial] บทก่อนหน้าคือ [:ThaiTutorialClone:ทำสำเนา repository ที่มีอยู่], บทถัดไปคือ [:ThaiTutorialFirstChange:ทำการแก้ไขแรกของคุณ])'' ''(บทนี้เป็นบทที่ 3 จาก 9 บทของ [[ThaiTutorial|บทเรียนการใช้งาน Mercurial]] บทก่อนหน้าคือ [[ThaiTutorialClone|ทำสำเนา repository ที่มีอยู่]], บทถัดไปคือ [[ThaiTutorialFirstChange|ทำการแก้ไขแรกของคุณ]])''
Line 5: Line 5:
หลังจากที่เราได้ทำตามขั้นตอนในบท [:ThaiTutorialClone:ทำสำเนา repository ที่มีอยู่] เราก็จะมีสำเนาของ repository ในเครื่องตัวเองชื่อ {{{my-hello}}} หลังจากที่เราได้ทำตามขั้นตอนในบท [[ThaiTutorialClone|ทำสำเนา repository ที่มีอยู่]] เราก็จะมีสำเนาของ repository ในเครื่องตัวเองชื่อ {{{my-hello}}}
Line 7: Line 7:
ลองมาดูกันว่า [:Repository:repository] นี้มีประวัติการแก้ไขอะไรบ้างกัน เราสามารถดูประวัติได้โดยใช้คำสั่ง {{{log}}} ซึ่งจะพิมพ์สรุปการแก้ไขทุกครั้งที่เกิดขึ้นใน repository โดยเริ่มแสดงจากการแก้ไขครั้งล่าสุดไปจนถึงการแก้ไขครั้งแรก ลองมาดูกันว่า [[Repository|repository]] นี้มีประวัติการแก้ไขอะไรบ้างกัน เราสามารถดูประวัติได้โดยใช้คำสั่ง {{{log}}} ซึ่งจะพิมพ์สรุปการแก้ไขทุกครั้งที่เกิดขึ้นใน repository โดยเริ่มแสดงจากการแก้ไขครั้งล่าสุดไปจนถึงการแก้ไขครั้งแรก
Line 26: Line 26:
 * ย่อหน้าแต่ละย่อหน้าในผลลัพธ์อธิบายเกี่ยวกับ[:ChangeSet:เซ็ตการแก้ไข]แต่ละเซ็ต เซ็ตการแก้ไขก็คือการจัดกลุ่มไฟล์ต่างๆที่ถูกแก้ไขให้เป็นกลุ่มเดียวเวลาคอมมิท  * ย่อหน้าแต่ละย่อหน้าในผลลัพธ์อธิบายเกี่ยวกับ[[ChangeSet|เซ็ตการแก้ไข]]แต่ละเซ็ต เซ็ตการแก้ไขก็คือการจัดกลุ่มไฟล์ต่างๆที่ถูกแก้ไขให้เป็นกลุ่มเดียวเวลาคอมมิท
Line 29: Line 29:
   * ตัวเลขตัวแรกก่อนเครื่องหมาย : คือ[:RevisionNumber:ครั้งที่แก้ไข] เป็นตัวเลขสั้นๆที่ใช้ระบุเซ็ตการแก้ไขใดๆ ตัวเลขนี้จะมีความหมายเฉพาะสำหรับ repository นี้เท่านั้น
   * ตัวเลขฐาน 16 หลังเครื่องหมาย : เป็นรูปแบบย่อ (short-form) ของ[:ChangeSetID:รหัสประจำเซ็ตการแก้ไข]; ตัวเลขนี้ใช้เพื่อระบุเซ็ตการแก้ไขนี้ใน repository ใดก็ตามที่มีเซ็ตการแก้ไขนี้อยู่ ถ้าคุณต้องพูดถึงเซ็ตการแก้ไขกับคนอื่นๆให้ใช้รหัสประจำเซ็ตการแก้ไขแทนที่จะใช้ตัวเลขครั้งที่แก้ไข
 * {{{tag}}} คือ[:Tag:ป้ายกำกับ]ซึ่งเป็นชื่อที่มีความหมายของเซ็ตการแก้ไข
   * ตัวเลขตัวแรกก่อนเครื่องหมาย : คือ[[RevisionNumber|ครั้งที่แก้ไข]] เป็นตัวเลขสั้นๆที่ใช้ระบุเซ็ตการแก้ไขใดๆ ตัวเลขนี้จะมีความหมายเฉพาะสำหรับ repository นี้เท่านั้น
   * ตัวเลขฐาน 16 หลังเครื่องหมาย : เป็นรูปแบบย่อ (short-form) ของ[[ChangeSetID|รหัสประจำเซ็ตการแก้ไข]]; ตัวเลขนี้ใช้เพื่อระบุเซ็ตการแก้ไขนี้ใน repository ใดก็ตามที่มีเซ็ตการแก้ไขนี้อยู่ ถ้าคุณต้องพูดถึงเซ็ตการแก้ไขกับคนอื่นๆให้ใช้รหัสประจำเซ็ตการแก้ไขแทนที่จะใช้ตัวเลขครั้งที่แก้ไข
 * {{{tag}}} คือ[[Tag|ป้ายกำกับ]]ซึ่งเป็นชื่อที่มีความหมายของเซ็ตการแก้ไข
Line 33: Line 33:
   * ป้ายกำกับพิเศษที่ชื่อ {{{tip}}} เป็นป้ายที่ระบุ[:Tip:ส่วนปลาย]ของ repository (ที่เป็นเซ็ตการแก้ไขล่าสุดใน repository เสมอ) ถ้าคุณสร้างเซ็ตการแก้ไขใหม่ (ซึ่งเรากำลังจะทำในอีกแป๊ปเดียว) ป้ายกำกับ {{{tip}}} จะถูกลบออกจากเซ็ตการแก้ไขล่าสุดและถูกเพิ่มที่เซ็ตการแก้ไขใหม่ที่เราเพิ่งสร้างแทน    * ป้ายกำกับพิเศษที่ชื่อ {{{tip}}} เป็นป้ายที่ระบุ[[Tip|ส่วนปลาย]]ของ repository (ที่เป็นเซ็ตการแก้ไขล่าสุดใน repository เสมอ) ถ้าคุณสร้างเซ็ตการแก้ไขใหม่ (ซึ่งเรากำลังจะทำในอีกแป๊ปเดียว) ป้ายกำกับ {{{tip}}} จะถูกลบออกจากเซ็ตการแก้ไขล่าสุดและถูกเพิ่มที่เซ็ตการแก้ไขใหม่ที่เราเพิ่งสร้างแทน
Line 36: Line 36:
 * {{{summary}}} เป็นบรรทัดแรกของคำอธิบายของเซ็ตการแก้ไข คำอธิบายนี้จะถูกใส่โดยผู้สร้างเซ็ตการแก้ไขตอนคอมมิทเพื่อบอกคนอื่นว่าเค้าได้แก้ไขอะไรไปบ้าง และแก้ไขเพราะอะไร (ลองดู ["ChangeSetComments"])
 * {{{parent}}} บอกว่าเซ็ตการแก้ไขไหนเป็น[:Parent:บรรพบุรุษ]ของเซ็ตการแก้ไขนี้ ถ้ามีบรรพบุรุษมากกว่าหนึ่งนั่นก็หมายความว่าเซ็ตการแก้ไขนี้ถูก[:Merge:รวม]จากส่วนยอดของ repository มากกว่าหนึ่งอัน
 * {{{summary}}} เป็นบรรทัดแรกของคำอธิบายของเซ็ตการแก้ไข คำอธิบายนี้จะถูกใส่โดยผู้สร้างเซ็ตการแก้ไขตอนคอมมิทเพื่อบอกคนอื่นว่าเค้าได้แก้ไขอะไรไปบ้าง และแก้ไขเพราะอะไร (ลองดู [[ChangeSetComments]])
 * {{{parent}}} บอกว่าเซ็ตการแก้ไขไหนเป็น[[Parent|บรรพบุรุษ]]ของเซ็ตการแก้ไขนี้ ถ้ามีบรรพบุรุษมากกว่าหนึ่งนั่นก็หมายความว่าเซ็ตการแก้ไขนี้ถูก[[Merge|รวม]]จากส่วนยอดของ repository มากกว่าหนึ่งอัน
Line 77: Line 77:
ผลลัพธ์จากตัวเลือก `--debug` จะแสดงฟิลด์เหล่านี้เพิ่ม (ลองดู [:DebuggingFeatures]): ผลลัพธ์จากตัวเลือก `--debug` จะแสดงฟิลด์เหล่านี้เพิ่ม (ลองดู [[DebuggingFeatures]]):
Line 81: Line 81:
 * {{{manifest}}} แสดง[:Manifest:รหัส manifest] สำหรับเซ็ตการแก้ไขนี้  * {{{manifest}}} แสดง[[Manifest|รหัส manifest]] สำหรับเซ็ตการแก้ไขนี้
Line 97: Line 97:
<!> ตัวเลือก {{{-r}}} สนับสนุน syntax มากมายสำหรับเลือกช่วงของเซ็ตการแก้ไขที่เราต้องการดู แต่เนื่องจากเรามีการแก้ไขแค่ 2 ครั้งในตัวอย่างเราจึงไม่สามารถแสดงวิธีการใช้ตัวเลือกต่างๆได้มากนัก ลองอ่าน [http://www.selenic.com/mercurial/hg.1.html#log manpage] เพิ่มเติมดู <!> ตัวเลือก {{{-r}}} สนับสนุน syntax มากมายสำหรับเลือกช่วงของเซ็ตการแก้ไขที่เราต้องการดู แต่เนื่องจากเรามีการแก้ไขแค่ 2 ครั้งในตัวอย่างเราจึงไม่สามารถแสดงวิธีการใช้ตัวเลือกต่างๆได้มากนัก ลองอ่าน [[http://www.selenic.com/mercurial/hg.1.html#log|manpage]] เพิ่มเติมดู
Line 134: Line 134:
ตอนนี้เราพอจะมีไอเดียบ้างแล้วว่า repository มีความเป็นมายังไง ถึงเวลาที่จะ[:ThaiTutorialFirstChange:ทำการแก้ไขแรก]แล้ว! ตอนนี้เราพอจะมีไอเดียบ้างแล้วว่า repository มีความเป็นมายังไง ถึงเวลาที่จะ[[ThaiTutorialFirstChange|ทำการแก้ไขแรก]]แล้ว!

บทเรียน - ดูประวัติการแก้ไขใน repository

(บทนี้เป็นบทที่ 3 จาก 9 บทของ บทเรียนการใช้งาน Mercurial บทก่อนหน้าคือ ทำสำเนา repository ที่มีอยู่, บทถัดไปคือ ทำการแก้ไขแรกของคุณ)

หลังจากที่เราได้ทำตามขั้นตอนในบท ทำสำเนา repository ที่มีอยู่ เราก็จะมีสำเนาของ repository ในเครื่องตัวเองชื่อ my-hello

ลองมาดูกันว่า repository นี้มีประวัติการแก้ไขอะไรบ้างกัน เราสามารถดูประวัติได้โดยใช้คำสั่ง log ซึ่งจะพิมพ์สรุปการแก้ไขทุกครั้งที่เกิดขึ้นใน repository โดยเริ่มแสดงจากการแก้ไขครั้งล่าสุดไปจนถึงการแก้ไขครั้งแรก

$ cd my-hello
$ hg log
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
summary:     Create a makefile

changeset:   0:0a04b987be5a
user:        mpm@selenic.com
date:        Fri Aug 26 01:20:50 2005 -0700
summary:     Create a standard "hello, world" program

เราลองมาทำความเข้าใจความหมายของแต่ละบรรทัดกัน

  • ย่อหน้าแต่ละย่อหน้าในผลลัพธ์อธิบายเกี่ยวกับเซ็ตการแก้ไขแต่ละเซ็ต เซ็ตการแก้ไขก็คือการจัดกลุ่มไฟล์ต่างๆที่ถูกแก้ไขให้เป็นกลุ่มเดียวเวลาคอมมิท

    • ในตัวอย่างด้านบน repository มีประวัติการแก้ไขสองครั้ง (สองเซ็ตการแก้ไข)
  • changeset เป็นเลขที่หรือรหัสที่ใช้เพื่อระบุเซ็ตการแก้ไขนั้นๆ

    • ตัวเลขตัวแรกก่อนเครื่องหมาย : คือครั้งที่แก้ไข เป็นตัวเลขสั้นๆที่ใช้ระบุเซ็ตการแก้ไขใดๆ ตัวเลขนี้จะมีความหมายเฉพาะสำหรับ repository นี้เท่านั้น

    • ตัวเลขฐาน 16 หลังเครื่องหมาย : เป็นรูปแบบย่อ (short-form) ของรหัสประจำเซ็ตการแก้ไข; ตัวเลขนี้ใช้เพื่อระบุเซ็ตการแก้ไขนี้ใน repository ใดก็ตามที่มีเซ็ตการแก้ไขนี้อยู่ ถ้าคุณต้องพูดถึงเซ็ตการแก้ไขกับคนอื่นๆให้ใช้รหัสประจำเซ็ตการแก้ไขแทนที่จะใช้ตัวเลขครั้งที่แก้ไข

  • tag คือป้ายกำกับซึ่งเป็นชื่อที่มีความหมายของเซ็ตการแก้ไข

    • เราสามารถสร้างป้ายกำกับได้มากกว่าหนึ่งป้ายสำหรับเซ็ตการแก้ไข จริงๆแล้วคงมีไม่กี่เซ็ตที่มีป้ายกำกับติดตัวเพราะฉะนั้นคุณคงไม่ค่อยเห็นบรรทัด tag นี้บ่อยนัก

    • ป้ายกำกับพิเศษที่ชื่อ tip เป็นป้ายที่ระบุส่วนปลายของ repository (ที่เป็นเซ็ตการแก้ไขล่าสุดใน repository เสมอ) ถ้าคุณสร้างเซ็ตการแก้ไขใหม่ (ซึ่งเรากำลังจะทำในอีกแป๊ปเดียว) ป้ายกำกับ tip จะถูกลบออกจากเซ็ตการแก้ไขล่าสุดและถูกเพิ่มที่เซ็ตการแก้ไขใหม่ที่เราเพิ่งสร้างแทน

  • user บอกว่าใครเป็นคนสร้างเซ็ตการแก้ไขนี้ ค่านี้ไม่มีรูปแบบตายตัว แต่โดยปกติจะเป็นอีเมล์และบางครั้งก็มีชื่อผู้สร้างด้วย

  • date บอกว่าเซ็ตการแก้ไขนี้ถูกสร้างเมื่อไร Mercurial จะพิมพ์วันที่โดยใช้เขตเวลาที่ผู้สร้างเซ็ตการแก้ไขอยู่

  • summary เป็นบรรทัดแรกของคำอธิบายของเซ็ตการแก้ไข คำอธิบายนี้จะถูกใส่โดยผู้สร้างเซ็ตการแก้ไขตอนคอมมิทเพื่อบอกคนอื่นว่าเค้าได้แก้ไขอะไรไปบ้าง และแก้ไขเพราะอะไร (ลองดู ChangeSetComments)

  • parent บอกว่าเซ็ตการแก้ไขไหนเป็นบรรพบุรุษของเซ็ตการแก้ไขนี้ ถ้ามีบรรพบุรุษมากกว่าหนึ่งนั่นก็หมายความว่าเซ็ตการแก้ไขนี้ถูกรวมจากส่วนยอดของ repository มากกว่าหนึ่งอัน

    • โดยปกติแล้วเซ็ตการแก้ไขจะมีบรรพบุรุษแค่อันเดียวนั้นก็คือเซ็ตการแก้ไขก่อนหน้า อย่างที่เห็นได้ในตัวอย่างด้านบน

เราสามารถดูรายละเอียดเพิ่มเติมได้โดยขอให้ Mercurial พิมพ์ผลลัพธ์มากหน่อยผ่านตัวเลือก -v หรือจะใช้ตัวเลือก --debug ที่มีผลในระดับ global กับทุกๆคำสั่งก็ได้:

$ hg log -v
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
files:       Makefile
description:
Create a makefile

(...)

$ hg log --debug
changeset:   1:82e55d328c8ca4ee16520036c0aaace03a5beb65
tag:         tip
parent:      0:0a04b987be5ae354b710cefeba0e2d9de7ad41a9
parent:      -1:0000000000000000000000000000000000000000
manifest:    1:0c7c1d435e6703e03ac6634a7c32da3a082d1600
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
files+:      Makefile
extra:       branch=default
description:
Create a makefile

(...)

ผลลัพธ์จากตัวเลือก -v มีฟิลด์เพิ่มขึ้นมาอีกสองสามอัน

  • files บอกว่าไฟล์ไหนถูกแก้ไขบ้างในเซ็ตการแก้ไขนี้

  • description แสดงคำอธิบายทั้งหมด (ไม่ใช่แค่บรรทัดแรก)

    • ในตัวอย่างด้านบน เนื่องจากว่าคำอธิบายยาวแค่บรรทัดเดียวเราจะไม่เห็นความแตกต่างเวลาใช้ตัวเลือกนี้

ผลลัพธ์จากตัวเลือก --debug จะแสดงฟิลด์เหล่านี้เพิ่ม (ลองดู DebuggingFeatures):

  • changeset จะแสดงรหัสประจำเซ็ตการแก้ไขแบบเต็ม

  • ฟิลด์ parent สองอันสำหรับระบุรหัสประจำเซ็ตการแก้ไขของบรรพบุรุษทั้งสองของเซ็ตการแก้ไขนี้ รหัส -1:0000000000000000000000000000000000000000 จะแทนค่ากรณีที่ไม่มีบรรพบุรุษ

  • manifest แสดงรหัส manifest สำหรับเซ็ตการแก้ไขนี้

  • file+ แสดงไฟล์ที่ถูกเพิ่มใหม่ในเซ็ตการแก้ไขนี้

  • file- แสดงไฟล์ที่ถูกลบออกในเซ็ตการแก้ไขนี้

คำสั่ง log มาพร้อมกับตัวเลือก -r สำหรับดูรายละเอียดของเซ็ตการแก้ไขโดยเจาะจง

$ hg log -r1
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
summary:     Create a makefile

<!> ตัวเลือก -r สนับสนุน syntax มากมายสำหรับเลือกช่วงของเซ็ตการแก้ไขที่เราต้องการดู แต่เนื่องจากเรามีการแก้ไขแค่ 2 ครั้งในตัวอย่างเราจึงไม่สามารถแสดงวิธีการใช้ตัวเลือกต่างๆได้มากนัก ลองอ่าน manpage เพิ่มเติมดู

นอกจากนั้นก็ยังมีตัวเลือก -p ที่มาพร้อมกับคำสั่ง log สำหรับแสดง patch ของเซ็ตการแก้ไข:

$ hg log -r1 -p
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
summary:     Create a makefile

diff -r 0a04b987be5a -r 82e55d328c8c Makefile
--- /dev/null   Fri Aug 26 01:20:50 2005 -0700
+++ b/Makefile  Fri Aug 26 01:21:28 2005 -0700
@@ -0,0 +1,1 @@
+all: hello

เราสามารถใช้คำสั่ง tip เพื่อแสดงรายละเอียดของส่วนปลายของ repository คิดซะว่าคำสั่ง tip เป็นทางลัดสำหรับคำสั่ง log -r tip ก็ได้

$ hg tip
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
summary:     Create a makefile

$ hg log -r tip
changeset:   1:82e55d328c8c
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:21:28 2005 -0700
summary:     Create a makefile

ตอนนี้เราพอจะมีไอเดียบ้างแล้วว่า repository มีความเป็นมายังไง ถึงเวลาที่จะทำการแก้ไขแรกแล้ว!


CategoryTutorial CategoryThai

ThaiTutorialHistory (last edited 2009-05-19 19:30:56 by localhost)