Repository
(สำหรับคำแนะนำสั้นๆเกี่ยวกับหลักการทำงานของ Mercurial ลองอ่าน ทำความเข้าใจ Mercurial)
ถ้าจะพูดกันให้ถูกแล้วคำว่า repository นั้นหมายถึงไดเร็คทอรี่ชื่อ .hg (จุด hg) ในไดเร็คทอรี่รากของ repository มากกว่า ไดเร็คทอรี่รากก็คือไดเร็คทอรี่ที่เป็นบรรพบุรุษของไดเร็คทอรี่ .hg Mercurial เก็บโครงสร้างข้อมูลต่างๆ – หรือที่เรียกว่าเมตาดาต้า – ภายในไดเร็คทอรี่ .hg นี้
เราเรียกไฟล์และไดเร็คทอรี่ทั้งหมดที่อยู่ในไดเร็คทอรี่เดียวกับ .hg ว่าอยู่ในไดเร็คทอรี่สำหรับใช้ทำงาน
วิธีง่ายๆสำหรับจำก็คือ ให้จำว่า repository คือที่ๆเก็บประวัติของโปรเจค ส่วนไดเร็คทอรี่สำหรับใช้ทำงานคือเนื้อหา ณ เวลาใดเวลาหนึ่งในประวัติของโปรเจค
คุณสามารถระบุที่อยู่ repository ในเครื่องของคุณโดยใช้ path ของไดเร็คทอรี่รากของ repository (ใช้กับตัวเลือก -R ในคำสั่งต่างๆ)
บางครั้งผู้ใช้และผู้พัฒนา Mercurial ใช้คำว่า "repository" เวลาพูดถึงไดเร็คทอรี่ราก แต่จริงๆแล้วไดเร็คทอรี่ .hg ต่างหากที่เป็น repository "ตัวจริง"
Contents
การสร้าง repository
การทำสำเนาของ repository ด้วยคำสั่ง hg clone เป็นวิธีนึงในการสร้าง repository ใหม่จาก repository ที่มีอยู่
นอกจากนั้นคุณยังสามารถแปลงไดเร็คทอรี่ที่มีอยู่แล้วแต่ไม่ถูกเก็บประวัติเป็น repository ด้วยคำสั่ง hg init ซึ่งจะสร้างไดเร็คทอรี่ย่อย .hg ให้พร้อมใช้งาน
การเริ่มเก็บประวัติไฟล์
ถ้าคุณต้องการเริ่มเก็บประวัติของไฟล์ที่อยู่ในไดเร็คทอรี่สำหรับใช้ทำงาน คุณจะต้องเพิ่มไฟล์เหล่านั้นเข้าไปใน Mercurial โดยใช้คำสั่ง hg add จากนั้นคุณสามารถคอมมิทการแก้ไขบนเครื่องที่เกิดขึ้นกับไฟล์ที่ถูกเก็บประวัติโดยใช้คำสั่ง hg commit ซึ่งจะทำการสร้างเซ็ตการแก้ไขใน repository ในไดเร็คทอรี่ .hg
คุณสามารถย้อนเนื้อหาในไดเร็คทอรี่สำหรับใช้ทำงานกลับไปเป็นเซ็ตการแก้ไขที่ถูกคอมมิทไปแล้วเวอร์ชั่นใดก็ได้โดยใช้คำสั่ง hg update พร้อมกับระบุ รหัสประจำเซ็ตการแก้ไข ใช้คำสั่ง hg parents เพื่อดูเวอร์ชั่นของไฟล์ที่อยู่ในไดเร็คทอรี่สำหรับใช้งาน (ดู บรรพบุรุษ)
คุณสามารถยกเลิกคอมมิทครั้งสุดท้ายใน repository ได้ด้วยคำสั่ง hg rollback (ดู ThaiRollback)
การถ่ายโอนประวัติการแก้ไข
คุณสามารถถ่ายโอนเซ็ตการแก้ไขจาก repository หนึ่งไปสู่อีก repository ได้โดยใช้คำสั่ง hg pull, hg push, hg export และ hg import (ดู การดึงประวัติการแก้ไข, การผลักประวัติการแก้ไข, การส่งออกประวัติการแก้ไข, การนำเข้าประวัติการแก้ไข, ThaiCommunicatingChanges)
การตรวจสอบความสมบูรณ์
คุณสามารถตรวจสอบสภาพของ repository ว่าเนื้อหาของไดเร็คทอรี่ .hg มีความสมบูรณ์ถูกต้องหรือไม่โดยใช้คำสั่ง hg verify
โครงสร้าง
ไดเร็คทอรี่ .hg ประกอบไปด้วย (ในที่นี่ระบุรายละเอียดเพียงบางส่วนเท่านั้น):
มานิเฟสต์ — ประกอบไปด้วยไฟล์ .hg/store/00manifest.i และ .hg/store/00manifest.d
ซึ่งทำหน้าที่ระบุเนื้อหาของไฟล์ใน repository ในแต่ละเซ็ตการแก้ไขว่าประกอบไปด้วยอะไรบ้าง ไฟล์มานิเฟสต์ถูกเก็บในรูปแบบ revlog
บันทึกการแก้ไข — ประกอบไปด้วยไฟล์ .hg/store/00changelog.i และ .hg/store/00changelog.d
- ซึ่งเก็บเซ็ตการแก้ไขทั้งหมด บันทึกการแก้ไขถูกเก็บในรูปแบบ revlog เช่นกัน
หนึ่ง revlog ต่อไฟล์ที่ถูกเก็บประวัติ — สำหรับแต่ละไฟล์ที่ถูกเก็บประวัติจะประกอบไปด้วยไฟล์ .hg/store/data/<encoded path>.i และ .hg/store/data/<encoded path>.d
<encoded path> คือ path ของไฟล์ที่ถูกเก็บประวัติในไดเร็คทอรี่สำหรับใช้ทำงาน ซึ่งถูกเข้ารหัสตาม ThaiCaseFoldingPlan
ไฟล์ dirstate — ประกอบไปด้วยไฟล์ .hg/dirstate
- มีหน้าที่เก็บข้อมูลต่างๆเกี่ยวกับไดเร็คทอรี่สำหรับใช้ทำงาน
สำหรับ revlog ที่มีขนาดเล็กไฟล์ข้อมูลของ revlog (revlog data file) ซึ่งมีนามสกุล (*.d) อาจจะไม่มีอยู่ เพราะว่าเนื้อหาทั้งหมดของไฟล์อาจแทรกอยู่ในไฟล์ดัชนี้ (index file) ซึ่งมีนามสกุล (*.i) อยู่แล้ว (ลองดู RevlogNG)
การทำสำรอง
การทำสำรอง repository นั้นสามารถทำได้โดยการผลัก/ดึง/ทำสำเนา repository ต้นฉบับ สำหรับ repository ที่ไม่ค่อยถูกแก้ไขบ่อยๆ (โดยโปรเซสอื่นๆที่ทำงานอยู่บนเครื่องเดียวกัน) คุณสามารถทำสำรองได้โดยใช้วิธีทำสำรองไดเร็คทอรี่/ไฟล์ปกติ (เช่น tar, zip, ฯลฯ) ไดเร็คทอรี่ .hg นั้นมีคุณสมบัติทนต่อ case folding ซึ่งหมายความว่าคุณสามารถคัดลอกไดเร็คทอรี่นี้ไปที่ระบบไฟล์แบบ FAT ได้ (ลองดู ThaiBackUp, ThaiCaseFoldingPlan)