จะรวมสองโครงการใน Mercurial ได้อย่างไร?


84

ฉันมีที่เก็บปรอทสองแห่งแยกกัน ณ จุดนี้ทำให้รู้สึกว่าพวกเขา "รวมเป็นหนึ่ง" เพราะฉันต้องการทำงานสองโปรเจ็กต์ไปพร้อม ๆ กัน

ฉันอยากให้ทั้งสองโปรเจ็กต์เป็นไดเร็กทอรีย่อยในที่เก็บใหม่

  1. ฉันจะรวมสองโครงการได้อย่างไร
  2. นี่เป็นความคิดที่ดีหรือฉันควรแยกมันออกจากกัน

ดูเหมือนว่าฉันควรจะสามารถผลักดันจากที่เก็บหนึ่งไปยังอีกที่เก็บหนึ่ง ... อาจจะตรงไปตรงมาจริงๆ?

คำตอบ:


69

ฉันสามารถรวมสองที่เก็บของฉันด้วยวิธีนี้:

  1. ใช้hg clone first_repositoryเพื่อโคลนหนึ่งในที่เก็บ
  2. ใช้hg pull -f other_repositoryเพื่อดึงโค้ดจากที่เก็บอื่น

-f(แรง) ธงดึงเป็นกุญแจสำคัญ - มันบอกว่าจะไม่สนใจความจริงที่ว่าทั้งสองที่เก็บไม่ได้มาจากแหล่งเดียวกัน

นี่คือเอกสารสำหรับคุณลักษณะนี้


1
สิ่งนี้รักษาคีย์แฮชของคอมมิตจาก repo ที่สองด้วยหรือไม่ (ฉันเดาว่าไม่ แต่มันอาจจะโอเคจนกว่าคุณจะทำการรวม)
Macke

6
วิธีนี้ได้ผล แต่คุณจะต้องวิ่งhg mergeเพื่อให้ทุกอย่างทำงานได้ในที่สุด
Factor Mystic

7
@Marcus Lindblom:การดึงชุดการเปลี่ยนแปลงจะไม่เคยเปลี่ยนแฮชของมัน หากคุณดูhg glogหลังจากทำสิ่งนี้คุณจะเห็นว่าคุณมีชุดการเปลี่ยนแปลงสองบรรทัดที่ไม่เกี่ยวข้องกัน ชุดการเปลี่ยนแปลงแรกในแต่ละบรรทัดไม่มีพาเรนต์ แต่นั่นไม่ใช่ปัญหาสำหรับ Mercurial เมื่อคุณดึงคุณจะต้องสร้างชุดการเปลี่ยนแปลงใหม่สำหรับแต่ละบรรทัดซึ่งคุณhg mvทุกอย่างลงในโฟลเดอร์ย่อยที่เหมาะสมจากนั้นคุณจะรวมบรรทัดและคุณก็พร้อม
Steve Losh

1
จะเกิดอะไรขึ้นถ้าทั้งสองที่เก็บมีรหัสเหมือนกันสำหรับทั้งสองที่เก็บ การผสานจะถูกจัดการโดยอัตโนมัติหรือไม่ และสำหรับการผสานเราสามารถพูดว่า $ hg merge?
kamal

2
เพื่อวัตถุประสงค์ในการอ้างอิงนี่คือเอกสารสำหรับกระบวนการนี้mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent

7

hg เริ่มมีsubrepoตั้งแต่ 1.3 (2009-07-01) เวอร์ชันแรก ๆ ยังไม่สมบูรณ์และสั่นไหว แต่ตอนนี้ใช้งานได้สวย


2
ฉันพบว่า subrepos เป็นความเจ็บปวดในการทำงานด้วย พวกเขาทำงานได้ แต่คุณต้องกระโดดผ่านห่วงเพื่อให้พวกเขาประพฤติตัวและอาจเป็นสาเหตุของอาการปวดหัวได้หากคุณไม่ระวัง
Pete Duncanson

4
อาจเป็นที่น่าสังเกตว่าองค์ประกอบย่อยเป็นคุณสมบัติอย่างเป็นทางการของทางเลือกสุดท้าย: mercurial.selenic.com/wiki/Subrepository (ณ 2013.11.12)
jtpereyda

3

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

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

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