การใช้ TortoiseSVN ฉันจะรวมการเปลี่ยนแปลงจากลำต้นเป็นกิ่งไม้และในทางกลับกันได้อย่างไร?


132

ฉันได้อ่านข้อมูลเกี่ยวกับการแยกสาขา / การรวมกับ Subversion 1.5 โดยใช้Version Control ที่ยอดเยี่ยมและฟรีพร้อมหนังสือSubversion ฉันคิดว่าฉันเข้าใจวิธีใช้ไคลเอนต์บรรทัดคำสั่งการโค่นล้มเพื่อดำเนินการที่ฉันต้องการบ่อยที่สุดซึ่ง ได้แก่ :

อัปเดตสาขาด้วยการเปลี่ยนแปลงจาก Trunk

จากการรันไดเร็กทอรีการทำงานของสาขา:

svn ผสานhttp://svn.myurl.com/proj/trunk

รวมสาขาเป็น Trunk

จากไดเร็กทอรีการทำงานของ trunk:

svn ผสาน - ผสานรวมhttp://svn.myurl.com/proj/branches/mybranch

อย่างไรก็ตามเรากำลังใช้ TortoiseSVN 1.5 เป็นส่วนต่อประสานกับ Subversion ฉันต้องการทราบวิธีที่ดีที่สุดในการดำเนินการกับ TortoiseSVN กล่องโต้ตอบใหม่มีสามตัวเลือกที่แตกต่างกันในเมนูหลัก

  1. รวมการแก้ไขที่หลากหลาย
  2. รวมสาขาอีกครั้ง
  3. รวมต้นไม้สองต้นที่แตกต่างกัน

จากสิ่งที่ฉันรวบรวมได้ TortoiseSVN จะรัน svn ด้วยไวยากรณ์ต่อไปนี้เสมอ

svn ผสาน [--dry-run] --force From_URL @ revN To_URL @ revM PATH

นอกจากนี้การรวมสาขาอีกครั้งมักจะล้มเหลวด้วยข้อความที่ระบุว่าบางเป้าหมายยังไม่ได้รวมเข้าด้วยกันดังนั้นจึงไม่สามารถดำเนินการต่อได้ดังนั้นฉันจึงต้องใช้ตัวเลือก # 3

คำถามของฉันคือ:

  1. ฉันจะใช้ TortoiseSVN 1.5 เพื่อผสานการเปลี่ยนแปลงจากลำต้นเป็นกิ่งไม้ได้อย่างไร
  2. ฉันจะใช้ TortoiseSVN 1.5 เพื่อรวมกิ่งก้านเข้ากับลำต้นได้อย่างไรโดยมีและไม่มีวิธีการรวมใหม่
  3. ฉันควรใช้ตัวเลือกใดข้างต้นสำหรับแต่ละข้อและเพราะเหตุใด

แก้ไข

ผ่านการทดสอบ "dry run" ฉันพบว่าการดำเนินการโค่นล้มบรรทัดคำสั่ง

svn ผสานhttp://svn.myurl.com/proj/trunk

คล้ายกับตัวเลือก # 1 (ผสานช่วงของการแก้ไข) ใน TortoiseSVN ตราบใดที่ฉันปล่อยช่วงการแก้ไขว่างไว้


ไม่พบลิงก์! = /
Leonardo Costa

คำตอบ:


28

ลักษณะการทำงานขึ้นอยู่กับเวอร์ชันที่เก็บข้อมูลของคุณ การโค่นล้ม 1.5 ช่วยให้สามารถผสานได้ 4 ประเภท:

  1. ผสาน sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. ผสานแหล่งที่มา WCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. ผสาน [-c M [, N ... ] | -r N: M ... ] แหล่งที่มา [@REV] [WCPATH]
  4. รวม - รวม SOURCE [@REV] [WCPATH]

การโค่นล้มก่อน 1.5 อนุญาต 2 รูปแบบแรกเท่านั้น

ในทางเทคนิคคุณสามารถทำการผสานทั้งหมดด้วยสองวิธีแรก แต่สองวิธีสุดท้ายเปิดใช้งานการติดตามการผสานของการโค่นล้ม 1.5

ตัวเลือกของ TortoiseSVN จะรวมช่วงหรือการแก้ไขแม็พกับวิธีที่ 3 เมื่อที่เก็บของคุณเป็น 1.5+ หรือวิธีที่หนึ่งเมื่อที่เก็บของคุณเก่ากว่า

เมื่อรวมคุณสมบัติเข้ากับสาขารีลีส / การบำรุงรักษาคุณควรใช้คำสั่ง 'ผสานช่วงของการแก้ไข'

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

และคำสั่งสุดท้าย -Merge two different trees- จะมีประโยชน์ก็ต่อเมื่อคุณต้องการก้าวออกจากพฤติกรรมการแตกแขนงตามปกติ (เช่นการเปรียบเทียบรุ่นต่างๆแล้วรวมความแตกต่างกับอีกสาขาหนึ่ง)


ใครช่วยได้โปรดช่วยฉันด้วยstackoverflow.com/questions/51657636/… . นี่เป็นคำถามที่สำคัญสำหรับทีมของเราเราต้องการความคิดบางอย่าง
ankur

252

ฉันทำตามคำตอบอื่น ๆ ไม่ถูกต้องนี่คือคำแนะนำเพิ่มเติมเกี่ยวกับหุ่น ...

คุณสามารถทำได้ทั้งทางรอบไปหรือtrunk -> branch branch -> trunkฉันมักจะtrunk -> branchแก้ไขข้อขัดแย้งที่นั่นก่อนแล้วจึงรวมเข้าbranch -> trunkด้วยกัน

รวมลำต้นเป็นสาขา / แท็ก

  1. ชำระเงินที่สาขา / แท็ก
  2. คลิกขวาที่รากของสาขา | เต่า SVN | รวม ...
  3. Merge Type:รวมช่วงของการแก้ไข | คลิก 'ถัดไป' ป้อนคำอธิบายภาพที่นี่
  4. ผสานช่วงการแก้ไข:เลือก URL ของไดเร็กทอรี trunk ที่คุณคัดลอกไปยัง branch / tag ป้อนการแก้ไขเพื่อรวมหรือปล่อยฟิลด์ว่างไว้เพื่อรวมการแก้ไขทั้งหมด | คลิก 'ถัดไป' ป้อนคำอธิบายภาพที่นี่
  5. รวมตัวเลือก:ฉันเพิ่งปล่อยให้สิ่งเหล่านี้เป็นค่าเริ่มต้น | คลิก 'ผสาน' ป้อนคำอธิบายภาพที่นี่
  6. การดำเนินการนี้จะรวมการแก้ไขเข้ากับสาขา / แท็กที่เช็คเอาต์
  7. จากนั้นยอมรับการเปลี่ยนแปลงที่ผสานเข้ากับ branch / tag

4
ฉันเว้น "ช่วงการแก้ไขที่จะรวม" และทำการ "ทดสอบการผสาน" มันคือสิ่งที่ฉันต้องการ: ช่วงถูกตั้งค่าโดยอัตโนมัติสำหรับฉัน (ตั้งแต่เมื่อสาขาเสร็จสิ้นไปจนถึงการแก้ไขครั้งสุดท้ายในสาขา)
เหลียน

คำตอบที่ดี - กระชับและง่ายต่อการติดตาม มันใช้ได้ผลสำหรับฉัน แต่เมื่อฉันแค่ต้องการรวมไฟล์คอนฟิกูเรชันเดียวด้วยเหตุผลบางอย่างฉันต้องทำสองครั้ง ตอนนี้ทุกอย่างดีแล้ว Cheers
Winger

@ เหลียนฉันทำสิ่งเดียวกันเพื่อรวมจากลำต้นเป็นกิ่งไม้ เว้นช่วงการแก้ไขว่างไว้หากคุณต้องการให้ไฟล์เวอร์ชันล่าสุดจาก trunk รวมเข้ากับไฟล์ branch
Winger

2
ขณะนี้ Tortoise SVN เวอร์ชันปัจจุบันมีตัวเลือกในการผสานการแก้ไขทั้งหมดแทนที่จะปล่อยให้ช่วงการแก้ไขว่างเปล่าในขั้นตอนที่ 4
The Unknown Dev

1
@Onkar ความขัดแย้งบางอย่างมักจะเกิดขึ้นเกือบตลอดเวลา หากคุณมีสองสาขาเช่นtrunkและbranchจากนั้นให้แน่ใจว่าคุณผสานการเปลี่ยนแปลงใด ๆ จากtrunkการbranchให้เร็วที่สุดเท่าที่เป็นไปได้ความขัดแย้งหลีกเลี่ยงให้มากที่สุดเท่าที่เป็นไปได้ นี้จะหมายถึงว่าเมื่อคุณผสานbranchไปtrunkไม่ควรมีความขัดแย้งใด ๆ
icc97

12

คุณควรใช้ "รวมช่วงของการแก้ไข"

ในการผสานการเปลี่ยนแปลงจากลำต้นไปยังสาขาภายในสำเนาการทำงานของสาขาให้เลือก "รวมช่วงของการแก้ไข" และป้อน URL ของลำต้นและการแก้ไขเริ่มต้นและสิ้นสุดเพื่อผสาน

ในทางตรงกันข้ามกับการรวมกิ่งก้านในลำต้น

เกี่ยวกับการตั้งค่าสถานะ - รวมใหม่ตรวจสอบคู่มือที่นี่: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate


1

ลองดูที่svnmerge.py เป็นบรรทัดคำสั่งไม่สามารถเรียกใช้โดย TortoiseSVN ได้ แต่มีประสิทธิภาพมากกว่า จากคำถามที่พบบ่อย :

การโค่นล้มแบบเดิมจะทำให้คุณสามารถรวมการเปลี่ยนแปลงได้ แต่จะไม่ "จำ" สิ่งที่คุณได้รวมไว้ นอกจากนี้ยังไม่มีวิธีที่สะดวกในการแยกชุดการเปลี่ยนแปลงไม่ให้รวมเข้าด้วยกัน svnmerge.py ทำงานบางอย่างโดยอัตโนมัติและลดความยุ่งยาก Svnmerge ยังสร้างข้อความคอมมิตพร้อมกับข้อความบันทึกจากทุกสิ่งที่รวมเข้าด้วยกัน


6
svnmerge.py ได้รับการพัฒนาบน Subversion 1.4 และรุ่นก่อนหน้า การโค่นล้ม 1.5 แนะนำการติดตามการผสานในผลิตภัณฑ์หลัก
Bert Huijben

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