== บทเรียน - ดูประวัติการแก้ไขใน repository == ''(บทนี้เป็นบทที่ 3 จาก 9 บทของ [[ThaiTutorial|บทเรียนการใช้งาน Mercurial]] บทก่อนหน้าคือ [[ThaiTutorialClone|ทำสำเนา repository ที่มีอยู่]], บทถัดไปคือ [[ThaiTutorialFirstChange|ทำการแก้ไขแรกของคุณ]])'' หลังจากที่เราได้ทำตามขั้นตอนในบท [[ThaiTutorialClone|ทำสำเนา repository ที่มีอยู่]] เราก็จะมีสำเนาของ repository ในเครื่องตัวเองชื่อ {{{my-hello}}} ลองมาดูกันว่า [[Repository|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 }}} เราลองมาทำความเข้าใจความหมายของแต่ละบรรทัดกัน * ย่อหน้าแต่ละย่อหน้าในผลลัพธ์อธิบายเกี่ยวกับ[[ChangeSet|เซ็ตการแก้ไข]]แต่ละเซ็ต เซ็ตการแก้ไขก็คือการจัดกลุ่มไฟล์ต่างๆที่ถูกแก้ไขให้เป็นกลุ่มเดียวเวลาคอมมิท * ในตัวอย่างด้านบน repository มีประวัติการแก้ไขสองครั้ง (สองเซ็ตการแก้ไข) * {{{changeset}}} เป็นเลขที่หรือรหัสที่ใช้เพื่อระบุเซ็ตการแก้ไขนั้นๆ * ตัวเลขตัวแรกก่อนเครื่องหมาย : คือ[[RevisionNumber|ครั้งที่แก้ไข]] เป็นตัวเลขสั้นๆที่ใช้ระบุเซ็ตการแก้ไขใดๆ ตัวเลขนี้จะมีความหมายเฉพาะสำหรับ repository นี้เท่านั้น * ตัวเลขฐาน 16 หลังเครื่องหมาย : เป็นรูปแบบย่อ (short-form) ของ[[ChangeSetID|รหัสประจำเซ็ตการแก้ไข]]; ตัวเลขนี้ใช้เพื่อระบุเซ็ตการแก้ไขนี้ใน repository ใดก็ตามที่มีเซ็ตการแก้ไขนี้อยู่ ถ้าคุณต้องพูดถึงเซ็ตการแก้ไขกับคนอื่นๆให้ใช้รหัสประจำเซ็ตการแก้ไขแทนที่จะใช้ตัวเลขครั้งที่แก้ไข * {{{tag}}} คือ[[Tag|ป้ายกำกับ]]ซึ่งเป็นชื่อที่มีความหมายของเซ็ตการแก้ไข * เราสามารถสร้างป้ายกำกับได้มากกว่าหนึ่งป้ายสำหรับเซ็ตการแก้ไข จริงๆแล้วคงมีไม่กี่เซ็ตที่มีป้ายกำกับติดตัวเพราะฉะนั้นคุณคงไม่ค่อยเห็นบรรทัด {{{tag}}} นี้บ่อยนัก * ป้ายกำกับพิเศษที่ชื่อ {{{tip}}} เป็นป้ายที่ระบุ[[Tip|ส่วนปลาย]]ของ repository (ที่เป็นเซ็ตการแก้ไขล่าสุดใน repository เสมอ) ถ้าคุณสร้างเซ็ตการแก้ไขใหม่ (ซึ่งเรากำลังจะทำในอีกแป๊ปเดียว) ป้ายกำกับ {{{tip}}} จะถูกลบออกจากเซ็ตการแก้ไขล่าสุดและถูกเพิ่มที่เซ็ตการแก้ไขใหม่ที่เราเพิ่งสร้างแทน * {{{user}}} บอกว่าใครเป็นคนสร้างเซ็ตการแก้ไขนี้ ค่านี้ไม่มีรูปแบบตายตัว แต่โดยปกติจะเป็นอีเมล์และบางครั้งก็มีชื่อผู้สร้างด้วย * {{{date}}} บอกว่าเซ็ตการแก้ไขนี้ถูกสร้างเมื่อไร Mercurial จะพิมพ์วันที่โดยใช้เขตเวลาที่ผู้สร้างเซ็ตการแก้ไขอยู่ * {{{summary}}} เป็นบรรทัดแรกของคำอธิบายของเซ็ตการแก้ไข คำอธิบายนี้จะถูกใส่โดยผู้สร้างเซ็ตการแก้ไขตอนคอมมิทเพื่อบอกคนอื่นว่าเค้าได้แก้ไขอะไรไปบ้าง และแก้ไขเพราะอะไร (ลองดู [[ChangeSetComments]]) * {{{parent}}} บอกว่าเซ็ตการแก้ไขไหนเป็น[[Parent|บรรพบุรุษ]]ของเซ็ตการแก้ไขนี้ ถ้ามีบรรพบุรุษมากกว่าหนึ่งนั่นก็หมายความว่าเซ็ตการแก้ไขนี้ถูก[[Merge|รวม]]จากส่วนยอดของ 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|รหัส 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 ครั้งในตัวอย่างเราจึงไม่สามารถแสดงวิธีการใช้ตัวเลือกต่างๆได้มากนัก ลองอ่าน [[http://www.selenic.com/mercurial/hg.1.html#log|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 มีความเป็นมายังไง ถึงเวลาที่จะ[[ThaiTutorialFirstChange|ทำการแก้ไขแรก]]แล้ว! ---- CategoryTutorial CategoryThai