สามารถใช้การผสานรวมใหม่ได้ก็ต่อเมื่อการแก้ไข X ถึง Y ก่อนหน้านี้รวมจาก <URL> เพื่อรวมแหล่งที่มาอีกครั้ง แต่นี่ไม่ใช่กรณี


127

เคยใช้สาขา SVN กับ Tortoise 1.6 ฉันได้ทำการรวมลำต้นเข้ากับกิ่งไม้เป็นระยะเพื่อให้มันทันสมัยอยู่เสมอ

วันนี้ฉันคิดว่าจะรวมสาขาอีกครั้ง ฉันเลือก "รวมสาขาอีกครั้ง" จาก Tortoise และได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

สามารถใช้การผสานรวมใหม่ได้ก็ต่อเมื่อการแก้ไข 4709 ถึง 5019 ก่อนหน้านี้ถูกรวมจากhttp://subversion/svn/saxdev/trunkไปยังแหล่งที่มาที่รวมใหม่ แต่ไม่ได้เป็นเช่นนั้น

จากนั้นจะแสดงรายการไฟล์ประมาณ 50 ไฟล์พร้อมคำอธิบายเช่นนี้:

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.java:4709-5018

การแก้ไข 5019 เป็นการแก้ไขส่วนหัว การแก้ไข 4737 เป็นการแก้ไขเมื่อฉันสร้างสาขา

ฉันมีสิ่งนี้จากบันทึกสำหรับการแก้ไข 4737

การดำเนินการ: เพิ่มเส้นทาง: / สาขา / qst คัดลอกจากเส้นทาง: / trunk

สำหรับฉันข้อความแสดงข้อผิดพลาดนั้นบอกว่ากิ่งก้านไม่ได้มาจากลำต้นซึ่งไม่เป็นความจริง

ความคิดใด ๆ ?


1
ตกลง. ฉันไม่ได้ใช้การโค่นล้มอีกต่อไปแล้ว แต่จะใช้คำพูดของคุณ!
colinjwebb

1
ขอบคุณครับ. เราว่าหน้ามันดีกว่าสำหรับมัน
สีเทา

คำตอบ:


138

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

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

ฉันเคยเห็นวิธีแก้ปัญหาหลายอย่างใน Google แต่มันทำให้ฉันกังวลในฐานะ 'แฮ็ก' เพื่อจัดการกับเรื่องนี้ฉันตัดสินใจที่จะทำในสิ่งที่การโค่นล้มเป็นนัยในข้อความ ฉันกลับไปที่สาขาของฉันและรวมการแก้ไขที่ระบุไว้อย่างชัดเจน:

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.

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

ฉันหวังว่านี่จะช่วยได้


16
ดี! "ทำในสิ่งที่บ่งบอกถึงการโค่นล้มในข้อความ" :)
Adam

7
ฉันเห็นด้วยคำตอบที่ได้รับความนิยมมากกว่านั้นน่าดึงดูด แต่น่าจะดีกว่าที่จะแก้ไขให้ถูกต้อง ฉันต้องไปที่ไฟล์ที่มีปัญหาเฉพาะและsvn mergeจากท้ายรถ
Steve Kehlet

1
สิ่งนี้ได้ผลดีสำหรับฉัน เคล็ดลับหลักคือเต่าไม่ได้บอกฉันถึงการแก้ไขปัญหา หลังจากอัปเกรดไคลเอนต์ svn บรรทัดคำสั่งของฉันฉันสามารถรับมันเพื่อส่งข้อความอย่างที่คุณมีจากนั้นก็สามารถรวมการแก้ไขปัญหาและกลับไปที่ลำต้น
user12861

7
สิ่งนี้ไม่ได้ผลสำหรับฉันเนื่องจากการผสาน "ที่ขาดหายไป" ในรายการได้ดำเนินการไปแล้วในสาขา (รวมแหล่งที่มาอีกครั้ง)
Sam

6
แม้ว่าคำตอบนี้จะฟังดูสมเหตุสมผล แต่ก็ไม่ได้ผลสำหรับฉัน ฉันยังคงได้รับข้อความแสดงข้อผิดพลาดเดิม ๆ สิ่งที่ช่วยได้คือการลบคุณสมบัติ svn: mergeinfo ออกจากไฟล์ในรายการเช่นเดียวกับคำตอบที่ยอมรับคือแนะนำ
Jenny O'Reilly

85

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

วิธีแก้ปัญหาสำหรับฉันคือการลบsvn:mergeinfoคุณสมบัติใด ๆที่แนบมากับไฟล์แต่ละไฟล์ในลำดับชั้น

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk 
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/java/com/foo/furniture.java
Missing ranges: /trunk/proj/src/main/java/com/foo/furniture.java:18765-18920

หากต้องการค้นหาไฟล์ที่มีข้อมูล mergeinfo คุณสามารถทำได้:

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .

จากนั้นคุณสามารถลบคุณสมบัติ mergeinfo:

svn propdel svn:mergeinfo proj/src/main/java/com/foo/furniture.java ...
svn commit -m 'removed mergeinfo' proj/src/main/java/com/foo/furniture.java ...

หลังจากที่ฉันทำสิ่งนี้เสร็จแล้วการผสานของฉันก็ทำได้ดี


2
สิ่งนี้ช่วยฉันแก้ปัญหาได้จริง ๆ แต่ของฉันเกิดจากการรวมการแก้ไขจากโฟลเดอร์ลูกแทนที่จะทำสิ่งนี้ในโฟลเดอร์รูท ปัญหาของฉันคือ - ฉันทำการผสาน แต่โฟลเดอร์รูทไม่ได้รับรู้ว่ามีการผสานเกิดขึ้นซึ่งหมายความว่าฉันต้องอัปเดต mergeinfo prop ด้วยตนเองด้วยหมายเลขการแก้ไขที่หายไป หมายเหตุฉันทำได้เพียงเพราะไม่มีการเปลี่ยนแปลงไฟล์อื่น ๆ สำหรับการแก้ไขและจะทำให้เกิดพฤติกรรมที่ไม่คาดคิดหากจำเป็นต้องรวมไฟล์อื่น - คุณจะต้องรวมการแก้ไขอีกครั้งหากเป็นกรณีนี้
ExecutionOrder

5
ใน TortoiseSVN คุณสามารถคลิกขวาที่ไฟล์เลือก "TortoiseSVN" -> "Properties" และลบคุณสมบัติ svn: mergeinfo
StarCub

3
@StephenKennedy คุณอาจประสบปัญหาในการนำสาขากลับมาใช้ใหม่ที่รวมเข้าด้วยกันแล้ว หากเป็นเช่นนั้นโปรดดูส่วนสุดท้ายของsvnbook.red-bean.com/en/1.7/…โดยเริ่มต้นด้วย "เมื่อการผสานรวมใหม่เสร็จสิ้นจากกิ่งหนึ่งไปอีกกิ่งหนึ่งกิ่งก้านจะไม่สามารถใช้งานได้อีกต่อไป"
AlexMA

6
+1 คุณไม่จำเป็นต้องลบ mergeinfos ทั้งหมด เฉพาะช่วงที่ขาดหายไป ดูคำตอบของฉันสำหรับวิธีลบเฉพาะปัญหา mergeinfos โดยการกรองผลลัพธ์ข้อผิดพลาด TortoiseSVN
Iain Samuel McLean Elder

4
-1 คุณไม่ควรลบคุณสมบัติ mergeinfo เว้นแต่คุณจะแน่ใจจริงๆเกี่ยวกับสิ่งที่คุณกำลังทำอยู่ ผู้คนจำนวนมากอาจอ่านสิ่งนี้ลบคุณสมบัติเหล่านี้และแนะนำปัญหาอื่น ๆ โดยไม่ได้ตั้งใจ Paul Whipp มีคำตอบที่ดีกว่า
Bizmarck

15

หากคุณพยายามรวมกิ่งก้านของคุณเป็นลำต้นและพบข้อผิดพลาดเช่นนี้จาก TortoiseSVN:

การรวมการทดสอบการรวมซ้ำล้มเหลวเท่านั้น!: "สามารถใช้การรวมซ้ำได้ก็ต่อเมื่อก่อนหน้านี้มีการรวมการแก้ไขบางส่วนจาก trunk แต่ไม่เป็นเช่นนั้น"

คลิกที่ข้อความแสดงข้อผิดพลาดแล้วกดCTRL+ A, CTRL+ Cเพื่อคัดลอกข้อความทั้งหมด

วางข้อความลงในสตริงที่นี่ของสคริปต์ PowerShell นี้:

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk  
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously  
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to  
Error:  the reintegrate source, but this is not the case:  
Error:    
Error:  branches/myproject/userdata/usermanagementservice  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/usermanagementservice:18365,18404  
Error:    
Error:  branches/myproject/userdata/auto_create_db.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/auto_create_db.sql:18406  
Error:   
Error:    
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406  
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }

สคริปต์จะแยกพา ธ สัมพัทธ์ของไฟล์ที่มีปัญหา mergeinfo และแสดงรายการคำสั่งเพื่อแก้ไขแต่ละคำสั่ง

คุณอาจต้องเปลี่ยน'userdata'ค่าเพื่อให้เหมาะกับโครงสร้างที่เก็บของคุณ

ดำเนินการสคริปต์เพื่อส่งออกคำสั่งที่คุณต้องการเพื่อลบปัญหา mergeinfos

ในตัวอย่างนี้สคริปต์จะสร้างผลลัพธ์นี้:

svn propdel svn:mergeinfo userdata/usermanagementservice  
svn propdel svn:mergeinfo userdata/auto_create_db.sql  
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql  

ที่พรอมต์คำสั่งคุณสามารถไปที่ฐานสาขา (myproject) และดำเนินการคำสั่งเพื่อลบปัญหา mergeinfos

คุณควรเห็นผลลัพธ์ดังนี้:

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.

เช่นเดียวกับคำตอบของ Greyตอนนี้คุณควรยอมรับการเปลี่ยนแปลงกับสาขาและลองรวมตัวใหม่อีกครั้ง คราวนี้น่าจะได้ผล!


1
นานก่อนที่จะรวมตัวใหม่ฉันได้รวม (ไม่รวมกันใหม่) การเปลี่ยนแปลงบางอย่างในลำต้นจากกิ่งก้านของฉันเพราะฉันตั้งใจไปที่สาขาของฉันโดยบังเอิญเมื่อฉันตั้งใจจะผูกมัดกับลำต้น อาจเป็นสาเหตุที่อยู่เบื้องหลังข้อผิดพลาดในการรวมตัวใหม่
Iain Samuel McLean Elder

นั่นคือสิ่งที่ดูเหมือนว่าจะทำให้เกิดปัญหานี้ในกรณีของฉัน ขอบคุณที่สละเวลาเขียนบท!
แซม

@ แซมดีใจที่คุณพบว่ามีประโยชน์ คุณจำเป็นต้องแทนที่ช่องว่างตามตัวอักษรด้วย a \s+เพื่อให้มันเหมาะกับคุณหรือไม่?
Iain Samuel McLean Elder

เรียงจาก; มันเป็นสิ่ง+ที่จำเป็นสำหรับฉันในการทำงาน ในกรณีของฉันบางบรรทัดมีสองช่องว่างและอื่น ๆ มีสามช่องดังนั้นจึงจำเป็นต้องมีการรองรับจำนวนช่องว่างที่หลากหลาย ฉันไม่แน่ใจว่าทำไมฉันถึงเปลี่ยนช่องว่างเป็น\s; ที่อาจไม่จำเป็นต้องขออภัยในส่วนนั้น!
แซม

@ แซมไม่ต้องกังวล แต่ตอนนี้ฉันจะเปลี่ยนกลับเป็นช่องว่างตามตัวอักษรจนกว่า TortoiseSVN จะเริ่มผสมกับแท็บหรืออะไรก็ตาม :-) ฉันทิ้งไว้+เพราะมันมีประโยชน์สำหรับคุณ
Iain Samuel McLean Elder

11

อันที่จริงฉันแก้ไขโดยใช้ตัวเลือก "รวมสองสาขาที่แตกต่างกัน" เพื่อรวมลำต้นและกิ่งก้านลงในสำเนาการทำงานของฉัน จากนั้นฉันก็ตกลงที่ลำต้น

มหัศจรรย์


4
คำตอบนี้ไม่ได้อธิบายสิ่งที่คุณทำอย่างแท้จริง ไม่มีตัวอย่างแม้แต่ลิงก์ไปยังส่วนที่จำเป็นของคู่มือ
zigg

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

ตัวอย่าง: svn merge ^ / tags / wx ^ / tags / yz ข้อผิดพลาดในการผสานรวมใหม่ปรากฏขึ้นสำหรับฉันเมื่อใช้ 1.8 และรวมเข้ากับลำตัวซึ่งแหล่งที่มาของการผสานมีการแก้ไขเฉพาะที่รวมไว้ก่อนหน้านี้จากลำต้น 1.8 ดูเหมือนจะตัดสินใจว่ากำลังพยายามรวมการรวมกลับเข้ามาใหม่ซึ่งไม่ใช่ การผสานแบบ dry-run กับ 1.6 จะใช้งานได้ดี แต่การผสาน URL ทั้งสองเข้าด้วยกัน
นิค

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

ฉันควรอ่านคำตอบนี้ก่อนใช้เวลา 3 วันเพื่อทำความเข้าใจว่าเกิดอะไรขึ้น ฉันยังไม่เข้าใจว่าทำไมฉันถึงมีปัญหานี้ แต่สงสัยว่าความคิดเห็นจาก @Nick คือเหตุผล - และตอนนี้สิ่งต่าง ๆ กำลังทำงานฉันจะไม่มองต่อไป ...
Dave Richardson

6

สิ่งที่ใช้ได้ผลสำหรับฉันในเต่า SVN: แทนที่จะรวมการแก้ไขทั้งหมดจากสาขาให้เลือกช่วงที่ระบุและเลือกการแก้ไขทั้งหมดของคุณด้วยตนเองจากสาขา


1
ขอบคุณสำหรับแนวคิดพื้นฐานดังกล่าว จากคำตอบทั้งหมดนี่ไม่เพียง แต่ซับซ้อนน้อยที่สุด แต่เป็นคำตอบเดียวที่เหมาะกับฉัน
redman

3

เพียงทำตามที่ SVN กำลังบอกคุณ

  1. ผสานสาขาจากการย้อนกลับที่ SVN กำลังบอกคุณ
  2. รวมตัวใหม่จากสาขาสู่ลำต้น

2
ไม่ได้ผลสำหรับฉัน การเปลี่ยนแปลงมีอยู่แล้วในสาขา คำแนะนำของคุณดูเหมือนว่าจะใช้ได้ในบางกรณี แต่ดูเหมือนว่าจะเป็นไปตามสมมติฐานดังนั้นจึงดูไม่เป็นสากล
แซม

1

ดูคำตอบของฉันที่นี่สำหรับประสบการณ์ของฉันในกรณีที่คล้ายกัน ฉันไม่แน่ใจว่านี่เป็นที่มาของปัญหาของคุณหรือไม่ แต่ดูเหมือนว่า Subversion 1.8 จะมีปัญหากับการผสานข้อมูลเมื่อการเปลี่ยนแปลงสองรายการยกเลิกซึ่งกันและกัน


0

ฉันพบปัญหานี้ ฉันทำการบันทึก SVN ในสาขาของฉันเพื่อค้นหาว่าฉันได้รวมลำต้นเข้ากับสาขาของฉันแล้ว

ฉันสังเกตการแก้ไขทั้งหมด

จากนั้นฉันก็ทำการรวมสาขาของฉันกับลำต้นโดยระบุการแก้ไขด้วยตนเอง ฉันระบุทุกช่วงเพื่อไม่รวมการแก้ไขคือฉันรวมลำต้น ฉันจัดการเพื่อรวมสาขาของฉัน

ฉันต้องเปลี่ยนกลับใน mergeinfo แต่ฉันได้รับรหัสของฉันรวม

ฉันลบสาขาของฉันทันที


0

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


0

มีปัญหานี้เมื่อ

  • TortoiseSVN 1.9.7, Build 27907 - 64 บิต, 2017/08/08 19:34:38
  • การโค่นล้ม 1.9.7, - ปล่อย
  • เม.ย. 1.5.2
  • apr-util 1.5.4
  • ข้าแผ่นดิน 1.3.9
  • OpenSSL 1.0.2l 25 พฤษภาคม 2560
  • zlib 1.2.8
  • SQLite 3.14.1

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

ป้อนคำอธิบายภาพที่นี่

การเพิ่มสิ่งนี้ที่นี่เพื่อช่วยเหลือผู้ที่ใช้ Tortoise SVN


-1

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

ฉันคลิกขวาที่ไฟล์ที่มีปัญหา: TortoiseSVN> Properties และพบว่าไฟล์นั้นมีสอง svn: mergeinfo และหนึ่งในนั้นไม่ได้รับการสืบทอดมาจากข้อมูล ฉันจึงลบ mergeinfo นั้นออก

ฉันใช้ TortoiseSVN 1.12.2, Build 28653 - 64 Bit

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