Mercurial สำหรับผู้เริ่มต้น: คู่มือปฏิบัติขั้นสุดท้าย


237

แรงบันดาลใจจากGit สำหรับผู้เริ่มต้น: คู่มือปฏิบัติที่ชัดเจน

นี่คือการรวบรวมข้อมูลเกี่ยวกับการใช้ Mercurial สำหรับผู้เริ่มต้นเพื่อการใช้งานจริง

ระดับเริ่มต้น - โปรแกรมเมอร์ที่มีการควบคุมแหล่งสัมผัสโดยไม่เข้าใจเป็นอย่างดี

ในทางปฏิบัติ - ครอบคลุมสถานการณ์ที่ผู้ใช้ส่วนใหญ่มักพบเจอ - การสร้างที่เก็บการแยกการผสานการดึง / การผลักจาก / สู่ที่เก็บระยะไกลเป็นต้น

หมายเหตุ :

  • อธิบายวิธีทำบางสิ่งให้สำเร็จแทนที่จะทำบางสิ่ง
  • จัดการกับหนึ่งคำถามต่อคำตอบ
  • ตอบอย่างชัดเจนและรัดกุมที่สุด
  • แก้ไข / ขยายคำตอบที่มีอยู่แทนที่จะสร้างคำตอบใหม่ในหัวข้อเดียวกัน
  • โปรดระบุลิงก์ไปยังMercurial wikiหรือHG Bookสำหรับผู้ที่ต้องการเรียนรู้เพิ่มเติม

คำถาม:

การติดตั้ง / การตั้งค่า

ทำงานกับรหัส

การติดแท็กการแตกแขนงการปล่อยเส้นเขตแดน

อื่น ๆ

การอ้างอิงอื่น ๆ ของ Mercurial

คำตอบ:


16

คุณจะกำหนดค่าให้ละเว้นไฟล์ได้อย่างไร?

ละเว้นถูกกำหนดค่าในไฟล์ข้อความปกติ. hgignore ในรูทของที่เก็บของคุณ เพิ่มเหมือนไฟล์ปกติด้วย:

hg add .hgignore

มีสองตัวเลือกไวยากรณ์สำหรับการจับคู่ไฟล์, glob และ regexp glob คือการขยายชื่อไฟล์เหมือนยูนิกซ์และ regexp คือการแสดงออกปกติ คุณเปิดใช้งานแต่ละรายการโดยเพิ่มsyntax: globหรือsyntax: regexpต่อบรรทัดด้วยตัวเอง บรรทัดทั้งหมดที่ตามมาซึ่งจะใช้ไวยากรณ์นั้นจนกระทั่งเครื่องหมายไวยากรณ์ถัดไป คุณสามารถมีเครื่องหมายไวยากรณ์ได้มากเท่าที่คุณต้องการ ไวยากรณ์เริ่มต้นคือ regexp ดังนั้นหากคุณใช้ regexp เพียงอย่างเดียวคุณไม่จำเป็นต้องมีเครื่องหมายของไวยากรณ์

คุณสามารถเพิ่มความคิดเห็นด้วย #

ตัวอย่าง:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

เพิกเฉยใช้กับไฟล์ที่ไม่มีการจัดการเท่านั้น (เช่นไฟล์ที่ยังไม่ได้เช็คอิน) ในการเพิกเฉยไฟล์ที่อยู่ภายใต้การควบคุมเวอร์ชันคุณสามารถใช้สวิตช์ -I และ -X


7
อาจเป็นประโยชน์ที่จะกล่าวถึงว่าหากคุณhg addเพิกเฉยไฟล์ด้วยตนเองMercurial จะติดตามไฟล์เหล่านั้น ตัวอย่างเช่นถ้าคุณมีพวงของไฟล์เช่นdeploy-test.conf, deploy-production.confฯลฯ และไม่ต้องการที่จะรุ่นพวกเขา (พวกเขาอาจมีรหัสผ่านในพวกเขา) แต่คุณไม่ต้องการที่จะรุ่นdeploy-template.confคุณก็สามารถละเลยและตนเองเพิ่มdeploy* deploy-templace.conf
Steve Losh

7

คุณจะเห็นสิ่งที่ปราศจากข้อผูกมัดหรือสถานะของ codebase ปัจจุบันของคุณได้อย่างไร

หากต้องการดูรายการไฟล์ที่มีการเปลี่ยนแปลง:

$ hg status

สิ่งนี้จะพิมพ์แต่ละไฟล์ที่มีการเปลี่ยนแปลงพร้อมกับสถานะของไฟล์ซึ่งอาจรวมถึง:

  • M- ดัดแปลง ไฟล์มีการเปลี่ยนแปลงและการเปลี่ยนแปลงยังไม่ได้รับการมุ่งมั่น
  • A- เพิ่ม ไฟล์ดังกล่าวไม่ได้ถูกติดตามมาก่อน แต่หากคุณส่ง Mercurial จะเริ่มติดตามมัน
  • R- ลบออกแล้ว ไฟล์ดังกล่าวได้รับการติดตามมาก่อน แต่หากคุณส่งมอบ Mercurial จะหยุดการติดตามในครั้งนี้และในอนาคต
  • ?- ไม่ทราบ ไฟล์นี้ยังไม่ได้รับการติดตามโดย Mercurial การกระทำจะไม่มีผลกับมันจนกว่าคุณhg addจะใช้เพื่อเพิ่ม
  • !- หายไป ไฟล์ถูกติดตาม แต่ Mercurial ไม่พบไฟล์ในสำเนาที่ใช้งานได้

หากต้องการดูการเปลี่ยนแปลงที่ทำกับไฟล์จริง:

$ hg diff

6

คุณจะสร้างโครงการ / พื้นที่เก็บข้อมูลใหม่ได้อย่างไร

$ hg init my-repository

5

ฉันจะติดต่อกับการโค่นล้มได้อย่างไร

มีสามวิธี:


ขยายแปลงจะโคลนพื้นที่เก็บข้อมูลการโค่นล้มที่มีอยู่เป็น Mercurial หนึ่ง มันมาพร้อมกับ Mercurial มันทำงานได้ประมาณนี้

hg convert <Subversion URL or directory> <path to new Mercurial repository>

ตัวอย่างเช่นนี้จะคว้าลำต้นของที่เก็บ memcached SixApart

hg convert http://code.sixapart.com/svn/memcached/trunk

ส่วนขยายสามารถนำการแก้ไขใหม่จากที่เก็บ Subversion ไปยัง Mercurial one (เพิ่มขึ้นเล็กน้อยเช่น pull) อย่างไรก็ตามมันไม่สนับสนุนการแก้ไข Mercurial และส่งพวกเขากลับไปยังการโค่นล้ม (ไม่มีการพุช) [XXX: ถูกต้องนี้ถ้ามันเป็นความผิด]


ขยาย hgsubversion มันมีหลายวิธีการแก้ปัญหาที่ซับซ้อนที่สุดเพราะใช้ Subversion API ในการสื่อสารกับพื้นที่เก็บข้อมูลการโค่นล้ม โดยมีจุดมุ่งหมายที่จะกลายเป็นสะพาน HG-SVN อนุญาตให้มีการแก้ไขแบบเต็มรอบ (โคลนแบบเต็มดึงและดัน) อย่างไรก็ตามในการเขียนนี้[XXX: แก้ไขสิ่งนี้หาก / เมื่อมันไม่ถูกต้อง]ยังอยู่ในการพัฒนาและยังไม่มีการเผยแพร่อย่างเป็นทางการ ดังนั้นมันจึงใช้ได้กับ Mercurial ที่ทันสมัยที่สุดเท่านั้น (1.3 ในข้อเขียนนี้)

  • มันแมปแท็กและสาขา (นำหน้าแท็กทั้งหมดด้วยtags/เพื่อแยกพวกเขาจากสาขาชื่อเท่ากัน)
  • มันยังคงเป็นสาขาพิเศษclosed-branchesสำหรับการปิดสาขาที่ถูกลบในการโค่นล้ม
  • มันต้องการให้วางพื้นที่เก็บข้อมูลการโค่นล้มตามแบบแผนของลำต้น / กิ่ง / แท็ก
  • โดยทั่วไปชุดคำสั่งจะhg svn <subcommand>มีจุดมุ่งหมายที่จะรวมเข้ากับจุดที่คุณไม่ต้องการส่วน 'svn' (เช่นต้องการรักษา subversion clone ให้มากที่สุดเท่าที่จะเป็นไปได้เช่น Mercurial repository อื่น);

มันทำงานได้เช่นนี้:

โคลน:

hg svnclone <Subversion URL> 

หรือ (เฉพาะsvn://URL)

hg clone <svn:// URL>

ดึง:

hg svn pull

ผลักดัน:

hg svn push

ที่เข้ามา:

hg svn incoming

ออก:

hg svn outgoing

การตรวจสอบที่เก็บข้อมูลทั้งหมด:

hg svnclone http://code.sixapart.com/svn/memcached

hgsvnยูทิลิตี้ ( ต้นไม้ bitbucket ) จนถึงเมื่อไม่นานมานี้จะอนุญาตให้คุณโคลนและดึงที่เก็บ Subversion เท่านั้น แต่เนื่องจากhgsvn 0.1.7มันรองรับการพุช [ฉันไม่รู้ว่ามันดันได้ดีแค่ไหน ทุกคนที่มีประสบการณ์มากกว่านี้ควรอัปเดตสิ่งนี้] มันมีคุณสมบัติเด่นดังต่อไปนี้:

  • มันสร้างแท็ก Mercurial สำหรับทุกแท็ก SVN
  • มันทำให้แท็กท้องถิ่นในทุกเซ็ตการแก้ไขเพื่อทำเครื่องหมายการแก้ไข SVN
  • มันทำให้ทุกการแก้ไข Mercurial บนสาขาที่มีชื่อตั้งชื่อตามสาขา SVN ยกตัวอย่างเช่นจะเป็นเช่นbranches/some-feature hg branch some-featureมันทำให้ลำต้นบนtrunk (เช่นไม่มีอะไรอยู่ใน Mercurial branch ที่เป็นค่าเริ่มต้นยกเว้นว่าผู้ใช้สลับไปที่มันอย่างชัดเจน)
  • มันจะพยายามระบุสาขาและแท็กและสร้างมันขึ้นมา แต่ถ้ามันไม่สามารถข้ามได้ สิ่งนี้มีประโยชน์เมื่อที่เก็บข้อมูล Subversion ไม่ได้ติดตามโครงร่าง trunk / branch / tags ทั่วไป

มันทำงานได้เช่นนี้:

โคลน:

hgimportsvn <Subversion URL>

ดึง:

hgpullsvn

ผลักดัน:

hgpushsvn

ที่เข้ามา:

hgpullsvn -n

ออก:

hgpushsvn -n

การตรวจสอบที่เก็บข้อมูลทั้งหมด:

hgimportsvn http://code.sixapart.com/svn/memcached

ตรวจสอบเพียงลำตัว:

hgimportsvn http://code.sixapart.com/svn/memcached/trunk

2
ฉันเพิ่งใช้hg convertและมันใช้เวลานานจริงๆเมื่อคุณมีพื้นที่เก็บข้อมูล svn ที่มีข้อผูกพันมากมาย การตั้งค่าที่เก็บข้อมูลโลคัลด้วยsvnsyncช่วยเร่งความเร็วสิ่งต่าง ๆ โดยเฉพาะอย่างยิ่งเมื่อคุณต้องทำหลาย ๆ ครั้งเนื่องจากคุณมีตัวเลือกที่ไม่ถูกต้องในคำสั่งแปลง
Debilski

ฉันคิดว่าวิธีการเหล่านี้ทั้งหมดจะเร็วขึ้นหากคุณมีสำเนาของที่เก็บ SVN ในเครื่อง แต่คุณไม่สามารถใช้ที่เก็บข้อมูลแบบเต็มได้ใช่ไหม ฉันคิดว่าsvnsyncจำเป็นต้องเข้าถึงไฟล์จริงของที่เก็บไม่ใช่แค่ URL
quark

โปรดทราบว่าตอนนี้ hgsvn อยู่ในโหมดบำรุงรักษาดังนั้นจึงไม่ได้รับการพัฒนาอีกต่อไป พวกเขาแนะนำให้ใช้ hgsubversion แทน
Jon L.

5

คุณจะเปรียบเทียบการแก้ไขสองไฟล์หรือไฟล์ปัจจุบันของคุณกับการแก้ไขก่อนหน้าได้อย่างไร

hg diffการใช้งานทั้ง เมื่อไหร่hg diffมีการใช้การเปลี่ยนแปลงทั้งหมดในสำเนาการทำงานและเคล็ดลับ (การกระทำล่าสุด) จะปรากฏขึ้น

สำหรับ "คุณจะเปรียบเทียบการแก้ไขสองไฟล์ได้อย่างไร"

$ hg diff -r{rev1} -r{rev2} {file.code}

คำสั่งดังกล่าวจะแสดงความแตกต่างระหว่าง rev1 และ rev2 ของ "file.code"

สำหรับ "คุณจะเปรียบเทียบไฟล์ปัจจุบันของคุณกับการแก้ไขก่อนหน้าได้อย่างไร"

$ hg diff {file.code}

คำสั่งดังกล่าวจะแสดงความแตกต่างระหว่าง "file.code" รุ่นปัจจุบันและการแก้ไขครั้งล่าสุด

: D


4

คุณ 'ทำเครื่องหมาย' 'แท็ก' หรือ 'ปล่อย' ชุดการแก้ไขเฉพาะสำหรับไฟล์ชุดใดชุดหนึ่งเพื่อให้คุณสามารถดึงชุดนั้นได้ในภายหลัง?

$ hg tag my-tag

คุณสามารถโคลนที่เก็บของคุณเพื่อสร้างที่เก็บแท็กพิเศษ

$ hg clone working-repository my-tag-repository

3
ทำไมhg tag my-tagล่ะ
Steve Losh

4

คุณจะแตกสาขาได้อย่างไร

$ hg branch สาขาของฉัน

หรือ

$ hg โคลนที่เก็บต้นฉบับ my-branch

แม้ว่ามันควรจะสังเกตว่าสาขาสร้างไดเรกทอรี "เสมือน" (เช่นไฟล์ยังคงเหมือนเดิม แต่ hg ปฏิบัติต่อพวกเขาราวกับว่าพวกเขาแตกต่างกันภายในระบบ) ในขณะที่โคลนสร้างสำเนาจริงที่สมบูรณ์ พูดอย่างเคร่งครัดโคลนไม่ได้แยก


4
นี่เป็นวิธีเฮฟวี่เวทที่คนคอมไพล์สร้างความสนุกให้กับคน Mercurial ในการแนะนำ เบาวิธีที่คุ้นเคยมากขึ้นในการเริ่มต้นจะเป็นhg branch my-branch
สตีฟ Losh

8
คุณต้องทราบว่าสิ่งเหล่านี้เป็นการดำเนินการที่แตกต่างกันสองอย่างโดยสิ้นเชิง
stepancheg

2
ผมพบว่าคำแนะนำนี้ที่อาจจะเป็นประโยชน์สำหรับการแตกแขนงใน Mercurial: stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial
mbillard

สำหรับสาขาที่มีน้ำหนักเบาใน hg ที่ไม่ถาวร (เป็นสาขา hg) ให้ใช้ส่วนขยายบุ๊กมาร์
กูเรชั่น

บทความที่เชื่อมโยงโดย GoodEnough ให้วิธีการอื่นที่มีน้ำหนักเบาโดยใช้ที่คั่นหน้า ดูเหมือนจะค่อนข้างดีสำหรับการเปลี่ยนแปลงที่ไม่สำคัญต่อการได้รับสาขาของตัวเอง
Casebash

4

ปลั๊กอิน GUI / IDE ดีสำหรับ Mercurial เหรอ?

GUI

  • TortoiseHgสำหรับระบบปฏิบัติการใด ๆ รวมถึงการรวม Windows Explorer มันยังใช้งานได้ใน Linux และ OS อื่น ๆ ไม่กี่ตัวรวมถึง Max OS X มันมีอินเตอร์เฟสที่ค่อนข้างน่าเบื่อและค่อนข้างอึดอัดใจที่จะใช้ในตอนแรก แต่มันสมบูรณ์และทรงพลังมาก
  • Murkyทำงานบน Mac OS X 10.5 หรือใหม่กว่า Murky นั้นดีสำหรับการสำรวจพื้นที่เก็บข้อมูลและคำสั่งพื้นฐาน แต่คุณจะต้องรู้วิธีใช้บรรทัดคำสั่งด้วยเช่นกัน
  • MacHgเป็น Mac OS X Gui ที่ดีที่มีฟังก์ชั่นและขัดมากกว่า Murky เล็กน้อย แต่คุณจะต้องใช้บรรทัดคำสั่งด้วยเช่นกัน
  • SourceTreeเป็นไคลเอนต์ Mac โดยเริ่มต้นด้วยรุ่น Windows ที่มีให้ใช้งานเมื่อเร็ว ๆ นี้ UI ที่ดีงาม (อย่างน้อยใน OS X) สนับสนุนคุณสมบัติส่วนใหญ่ของ Hg รวมถึงที่เก็บข้อมูล

ปลั๊กอิน


3

คุณยอมรับการเปลี่ยนแปลงอย่างไร

เรียกใช้คำสั่งนี้จากที่เก็บ * mercurial ในปัจจุบัน

hg commit [OPTION]... [FILE]...

นามแฝง: ci

  • คลังเก็บ Mercurial ในพื้นที่มี. hg ภายในไดเรกทอรีปัจจุบัน

ตัวเลือกสามารถ:

 -A --addremove     mark new/missing files as added/removed before committing
    --close-branch  mark a branch as closed, hiding it from the branch list
 -I --include       include names matching the given patterns
 -X --exclude       exclude names matching the given patterns
 -m --message       use <text> as commit message
 -l --logfile       read commit message from <file>
 -d --date          record datecode as commit date
 -u --user          record user as committer

ตัวอย่างคำสั่งจะเป็น:

hg commit -m "added readme" README

หมายเหตุ :

  • หากละเว้นรายการไฟล์การเปลี่ยนแปลงทั้งหมดที่รายงานโดย "สถานะ hg" จะถูกส่ง
  • หากคุณยอมรับผลลัพธ์ของการผสานอย่าระบุชื่อไฟล์ใด ๆ หรือตัวกรอง -I / -X
  • หากไม่ได้ระบุข้อความคอมมิทตัวแก้ไขที่กำหนดค่าไว้จะเริ่มพร้อมท์ให้คุณรับข้อความ

3

วิธีการตั้งค่า Mercurial

Mercurial เก็บข้อมูลการกำหนดค่าไว้ใน~/.hgrcระบบ * nix และใน%UserProfile%\mercurial.iniระบบ Windows ( %UserProfile%โดยทั่วไปจะใช้"C:\Documents and Settings\[username]\"กับระบบ Windows 2000 หรือ Windows XP และโดยทั่วไปจะใช้C:\Users\[username]\กับระบบ Windows Vista และ Windows 7)

ในฐานะที่เป็นจุดเริ่มต้นคุณควรตั้งชื่อผู้ใช้ Mercurial ของคุณโดยใส่สิ่งต่อไปนี้ใน.hgrcหรือmercurial.ini:

# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <email.address@example.net>

ผู้ใช้ TortoiseHg บนระบบ Windows สามารถรันได้ hgtk userconfig

ดูเพิ่มเติม " การสร้างไฟล์กำหนดค่า Mercurial " ในบทที่ 2ของ " Mercurial: The Definitive Guide "


3

คุณจะรวมสาขาได้อย่างไร

$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary

ในฐานะผู้ใช้ Mercurial ใหม่และในฐานะที่เป็นคนใหม่ในการควบคุมการแก้ไขซอร์สโดยทั่วไปฉันไม่เข้าใจคำตอบนี้จริงๆ คุณช่วยอธิบายและขยายโพสต์ของคุณได้ไหม? ฉันยังไม่เข้าใจวิธีการใช้คำสั่งผสาน
Jamin Gray

3

จะติดตั้ง Mercurial อย่างไร

โปรดแก้ไขอย่างดีหากคุณติดตั้งจากแหล่งบน Linux หรือใช้โปรแกรมติดตั้ง Windows

Mac OS X 10.4 (Tiger), 10.5 (Leopard)

ใช้ easy_install ของ Python (พร้อมSetuptools ):

sudo easy_install mercurial

พบเวอร์ชั่นล่าสุด (1.3.1 ขณะเขียน) และติดตั้งที่:

/Library/Frameworks/Python.framework/Versions/2.6/bin/

ด้วย Python 2.6 สิ่งนี้จะอยู่ในแพ็คเกจการติดตั้ง Mercurial OS X (ที่ 1.2.1 เมื่อวันที่ 26 กรกฎาคม 2009) ซึ่งบ่นว่ามันต้องการ Python 2.5 จากเอกสารประกอบปรากฏว่า Fink และ Macports ติดตั้งเวอร์ชั่น 1.2

ลินุกซ์

แพ็คเกจ Linux ที่ชัดเจนส่วนใหญ่ดูเหมือนจะล้าหลังเวอร์ชั่นปัจจุบันดังนั้นให้ใช้easy_install (ดังกล่าว) หรือดาวน์โหลดMercurial tarballแตกไฟล์เก็บถาวรเปลี่ยนเป็นไดเรกทอรี Mercurial และเรียกใช้:

$ make
$ sudo make install    # do a system-wide install
$ hg debuginstall      # sanity check
$ hg                   # see help

(จากIntroducing Mercurial ระบบควบคุมเวอร์ชันแบบกระจาย )

ของ windows

มีเป็นแพคเกจไบนารีของรุ่นล่าสุดของ Mercurial TortoiseHgเป็นส่วนขยายเชลล์ Windows สำหรับและติดตั้ง Mercurial Cygwinสามารถติดตั้ง Mercurial

อีกวิธีหนึ่ง (คำแนะนำยาวเกินไปเชื่อมโยงที่นี่) คุณสามารถ สร้าง Mercurial รุ่นPython ที่ปรับให้เหมาะสมหรือบริสุทธิ์จากแหล่งที่มา


1
ในการสร้าง Mercurial จากต้นทางเราจะต้องใช้ส่วนหัว Python ติดตั้ง python-dev หรือ python-devel สำหรับผู้ที่ใช้การกระจายแพคเกจ
Nicolas Dumazet

3

คุณจะได้รับรหัสล่าสุดได้อย่างไร

Mercurial จะจดจำตำแหน่งที่เก็บโคลน (ใน. hg / hgrc) ดังนั้นคุณจึงสามารถเรียกใช้:

hg pull

เพื่อดึงรหัสล่าสุดจากแหล่งเก็บข้อมูล (นี่ไม่ได้อัปเดตไดเรกทอรีทำงาน)

hg update

เพื่ออัปเดตไดเรกทอรีทำงาน

hg pull -u

เพื่อดำเนินการทั้งการดึงและการอัปเดตในครั้งเดียว


1
ต้นกำเนิดจะถูกบันทึกไว้.hg/hgrcเมื่อคุณโคลนดังนั้นคุณไม่จำเป็นต้องระบุเมื่อคุณดึง / ดัน คุณสามารถเพิ่มเส้นทางเพิ่มเติมไปยัง[paths]ส่วนใน.hg/hgrcถ้าคุณต้องการ
Martin Geisler

3

คุณจะตรวจสอบรหัสได้อย่างไร

hg clone [OPTION]... SOURCE [DEST]

ตัวเลือกสามารถ:

 -U --noupdate      the clone will only contain a repository (no working copy)
 -r --rev           a changeset you would like to have after cloning
    --pull          use pull protocol to copy metadata
    --uncompressed  use uncompressed transfer (fast over LAN)
 -e --ssh           specify ssh command to use
    --remotecmd     specify hg command to run on the remote side

โดยที่ source คือซอร์สของไฟล์ต้นฉบับที่อยู่ในที่เก็บซึ่งสามารถเป็นรีโมตURLหรือไดเร็กทอรีระบบไฟล์ ตัวอย่างเช่น:

  • http://bitbucket.org/scrum8/django-wmd-editor/
  • / home / ชื่อผู้ใช้ / พื้นที่เก็บข้อมูล / Django-WMD บรรณาธิการ /
  • SSH: //myusername@scrum8.com/~/repository/django-wmd-editor/

และปลายทางคือที่ที่ซอร์สโค้ดจะอยู่ในระบบแฟ้มภายในเครื่องของคุณ



1

คุณจะเห็นการเปลี่ยนแปลงที่จะถูกส่งไปยังที่เก็บอัปสตรีมเมื่อคุณกดได้อย่างไร?

ใช้hg outgoingเพื่อรับรายการของเซ็ตการแก้ไขที่จะตั้งค่าเป็นที่เก็บเริ่มต้น:

$ hg outgoing

หากต้องการรับการเปลี่ยนแปลงรหัสจริงให้ใช้-p( --patch) สิ่งนี้จะแสดงผลแต่ละเซ็ตการแก้ไขทั้งหมด

$ hg outgoing -p

1

คุณจะลบไฟล์ออกจากที่เก็บได้อย่างไร?

หากต้องการลบไฟล์ออกจากที่เก็บและลบทิ้งในคอมมิชชันถัดไป:

$ hg remove {file(s)}

หากต้องการลบไฟล์ออกจากที่เก็บ แต่ไม่ได้ลบทิ้ง

$ hg remove -Af {file(s)}

หรือจาก Mercurial 1.3

$ hg forget {file(s)}

1

คุณจะกลับไปใช้รหัสรุ่นก่อนหน้าได้อย่างไร

จากคำถามนี้

$ hg update [-r REV]

@ วาน: ถ้าคุณยอมรับในภายหลังคุณจะสร้างสาขาใหม่ได้อย่างมีประสิทธิภาพ จากนั้นคุณอาจทำงานในสาขานี้ต่อไปหรือในที่สุดก็รวมสาขาที่มีอยู่เข้าด้วยกัน


1

คุณจะเปลี่ยนเซ็ตการแก้ไขได้อย่างไร

มีสองตัวเลือกให้เลือก

วิธีที่ง่าย (แบ็กเอนด์ชุดการเปลี่ยนแปลงเดียว)

$ hg backout -m 'back out second change' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change

วิธีที่ยาก (แตกต่างกันและนำไปใช้ด้วยตนเอง)

ขั้นตอนที่ 1 : สร้างไฟล์ปะแก้เพื่อยกเลิกสิ่งที่เปลี่ยนแปลงระหว่างการแก้ไข 107 และ 108:

hg diff -r107 -r108 --reverse  > revert-change.patch

(ผลัดกัน hg diff -r108 -r107 โดยไม่มี - กลับจะทำสิ่งเดียวกัน)

ขั้นตอนที่ 2 : ใช้ไฟล์ปะแก้:

patch -p1 < revert-change.patch

ความแตกต่างบางอย่างอาจล้มเหลวในการใช้ตัวอย่างเช่น:

Hunk #3 FAILED at 517.
1 out of 3 hunks FAILED -- saving rejects to file 'foo/bar.c.rej'

ไฟล์. rej จะมีเนื้อหาของ diff ที่ไม่สามารถใช้งานได้คุณจะต้องดู


1
นี่ไม่ใช่สิ่งที่hg backoutมีไว้เพื่อ?
Wim Coenen

ใช่อย่างไรก็ตาม backg hg รองรับ id เซ็ตการแก้ไขเดียวกับ backout เท่านั้น ควรกล่าวถึงอย่างแน่นอนฉันจะอัปเดตตามลำดับ
slf

1

คุณเห็นประวัติของการแก้ไขไฟล์หรือที่เก็บได้อย่างไร

เพื่อแสดงประวัติการแก้ไขของพื้นที่เก็บข้อมูลทั้งหมดหรือไฟล์

$ hg log {file(s)}

หรือ

$ hg history {file(s)}

และเพื่อดูรายการในลำดับย้อนกลับ

$ hg log -r:

1

คุณจะรวมส่วนของสาขาหนึ่งเข้ากับสาขาอื่นได้อย่างไร

เปิดใช้งานส่วนขยาย 'การปลูกถ่าย' ใน. hg / hgrc ของคุณ

[extensions]
transplant=

โหลดสาขาเป้าหมายจากนั้นย้ายการแก้ไขเป้าหมาย
เช่น: ปรับปรุงการเก็บเชอร์รี่ 81 จากสาขา 'foo' ไปยังสาขาปัจจุบัน

$ hg transplant -b foo 81

Mercurial เวอร์ชั่นใหม่กว่าไม่ต้องการส่วนต่อการปลูกถ่าย คุณสามารถใช้graftคำสั่งในตัวเพื่อทำสิ่งเดียวกัน hg help graftสำหรับข้อมูลเพิ่มเติม
DOOManiac

1

คุณจะแตกแพ็ตช์จากเซ็ตการแก้ไขเฉพาะได้อย่างไร?

$ hg export -o patchfile changeset

จากนั้นคุณสามารถนำเข้าสิ่งนี้ไปยังสาขาอื่นด้วย:

$ hg import patchfile
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.