SVN วิธีแก้ไขข้อขัดแย้งของทรีใหม่เมื่อเพิ่มไฟล์ในสองสาขา


95

เมื่อรวมสองสาขา (โดยใช้ SVN 1.6.1) ซึ่งมีการเพิ่มไฟล์ในทั้งสองสาขา (และจากนั้นทำงานในสาขาที่แยกจากกันเหล่านั้น) ฉันได้รับข้อขัดแย้งของทรีใหม่:

      C foo.txt
  >   local obstruction, incoming add upon merge

ฉันต้องการการเปลี่ยนแปลงจากทั้งสองสาขา แต่ความขัดแย้งของต้นไม้ไม่ได้ให้ไฟล์ .working, .merge-left & .merge-right ตามปกติซึ่งเข้าใจได้เนื่องจากลักษณะของความขัดแย้ง มีข้อขัดแย้งเหล่านี้ค่อนข้างน้อยและข้อขัดแย้งที่เกิดการลบไฟล์เดียวกันในแต่ละสาขา แต่แก้ไขได้ง่าย

ฉันจะแก้ไขปัญหานี้ได้อย่างไร หนังสือ SVN redbean (สำหรับ 1.6) ไม่ครอบคลุมสถานการณ์นี้

คำตอบ:


40

ดังที่ได้กล่าวไว้ในเอกสารการออกแบบ "Tree Conflict"เวอร์ชันเก่ากว่า (2009) :

XFAIL ขัดแย้งจากการรวมของ add over versioned file

การทดสอบนี้จะผสานซึ่งนำนอกจากนี้ไฟล์ที่ไม่มีประวัติลงบนไฟล์ versioned ที่มีอยู่
นี่ควรเป็นความขัดแย้งของต้นไม้ในไฟล์ของlocal obstruction, incoming add upon mergeความหลากหลาย '' ความคาดหวังคงที่ใน r35341

(เรียกอีกอย่างว่า "ฝาแฝดชั่วร้าย" ใน ClearCase):
ไฟล์ถูกสร้างขึ้นสองครั้ง (ที่นี่ "เพิ่ม" สองครั้ง) ในสองสาขาที่แตกต่างกันสร้างประวัติที่แตกต่างกันสององค์ประกอบที่แตกต่างกัน แต่มีชื่อเดียวกัน

วิธีแก้ปัญหาตามทฤษฎีคือการรวมไฟล์เหล่านั้นด้วยตนเอง (ด้วยเครื่องมือ diff ภายนอก) ในสาขาปลายทาง ' B2'

หากคุณยังคงทำงานในสาขาต้นทางสถานการณ์ที่ดีที่สุดคือการลบไฟล์นั้นออกจากสาขาต้นทางB1รวมกลับจากB2ไปที่B1เพื่อให้ไฟล์นั้นมองเห็นได้B1(จากนั้นคุณจะทำงานกับองค์ประกอบเดียวกัน)
หากการผสานกลับไม่สามารถทำได้เนื่องจากการผสานเกิดขึ้นจากB1ถึงB2เท่านั้นดังนั้นการผสานด้วยตนเองจะเป็นสิ่งที่จำเป็นสำหรับการB1->B2ผสานแต่ละครั้ง


2
เอกสารการออกแบบ "ความขัดแย้งของต้นไม้" คือลิงก์ที่ผุ :(
whitey04

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

1
@SantiBailors ตลกมากตอนนี้ฉันกำลังจะตาย ตายเพื่อคอมไพล์เก่าของฉัน ...
ฤดูหนาว

164

ฉันพบโพสต์แนะนำวิธีแก้ปัญหาดังกล่าว กำลังจะทำงาน:

svn resolve --accept working <YourPath>

ซึ่งจะอ้างสิทธิ์ไฟล์เวอร์ชันภายในเครื่องเป็น OK
คุณสามารถเรียกใช้สำหรับไฟล์เดียวหรือทั้งโครงการแค็ตตาล็อก


2
ขอบคุณสิ่งนี้ยังช่วยแก้: C foo.txt> การเพิ่มในเครื่องการเพิ่มที่เข้ามาเมื่ออัปเดต
lazysoundsystem

5
ขอบคุณที่ใช้งานได้สำหรับฉันเช่นกัน แต่ฉันต้องทำสิ่งนี้: แก้ไข svn
ยอมรับ

5
ใช่คุณต้องมีชื่อไฟล์ มันยอมรับ '.' (ไดเร็กทอรีปัจจุบัน) ฉันต้องทำสิ่งนี้ซ้ำ ๆ ด้วยเช่นกัน: "svn แก้ไข - ยอมรับการทำงาน - บันทึกซ้ำ" แก้ไขทุกสิ่งที่เป็นประโยชน์ต่อสำเนาการทำงานของคุณ (อันตราย! คุณอาจเป่าการเปลี่ยนแปลงของคนอื่นเมื่อคุณทำเช่นนี้เช่นเคยเมื่อแก้ไขความขัดแย้ง)
Harry Wood

ฉันใช้นามแฝงที่ฉันสร้างขึ้นเพื่อแสดงรายการไฟล์ที่ขัดแย้งกับต้นไม้ทั้งหมด: alias mtc='stat | awk "BEGIN { FS=\" \" } /^.{6}C/ { print \$NF }"' จากนั้นฉันสามารถใช้สิ่งนี้เป็นอาร์กิวเมนต์ของคำสั่งแก้ไขได้ดังนี้: svn resolve --accept working $(mtc)
Earl Jenkins

1
ในความเป็นจริงคุณต้องระบุทรัพยากรเช่น: svn resolve --accept working path/index.html
Tomasz Kuter

9

จะเกิดอะไรขึ้นถ้าการเปลี่ยนแปลงที่เข้ามาเป็นสิ่งที่คุณต้องการ? ฉันไม่สามารถเรียกใช้การแก้ปัญหา svn - ยอมรับว่าเต็ม

svn แก้ไข - ฐานยอมรับ


4
ฉันคิดว่าฉันเข้าใจผิดคำถาม 'base' นั้นเทียบเท่ากับ 'their-full' เมื่อใช้ 'svn fix' แต่มันไม่ได้ช่วยแก้ปัญหา สิ่งที่ฉันทำแทนคือการแบ่งออกเป็นสองส่วน: 1) ลบไดเร็กทอรี (หรือไฟล์) ที่ขัดแย้งกันในเครื่องของฉัน 2) ผสาน สิ่งนี้ควรทำงานโดยไม่มีข้อขัดแย้งและเนื่องจาก 'การเปลี่ยนแปลงที่เข้ามาเป็นสิ่งที่คุณต้องการ' ฉันจึงไม่สนใจเกี่ยวกับรายการที่ถูกลบ
Gabriel FT Gomes

3

ฉันเพิ่งจัดการตัวเองได้อย่างละเอียดโดยพยายามทำตามคำแนะนำของ user619330 ด้านบน สถานการณ์คือ: (1): ฉันได้เพิ่มไฟล์บางไฟล์ในขณะที่ทำงานกับสาขาแรกของฉัน branch1; (2) ฉันสร้างสาขาใหม่ branch2 เพื่อการพัฒนาต่อไปโดยแยกมันออกจากลำต้นแล้วรวมเข้ากับการเปลี่ยนแปลงของฉันจาก branch1 (3) เพื่อนร่วมงานคนหนึ่งได้คัดลอกม็อดของฉันจาก branch1 ไปยังสาขาของเขาเองเพิ่มม็อดเพิ่มเติม แล้วรวมกลับไปที่ลำต้น (4) ตอนนี้ฉันต้องการรวมการเปลี่ยนแปลงล่าสุดจาก trunk เข้ากับสาขาการทำงานปัจจุบันของฉัน branch2 นี่คือ svn 1.6.17

การผสานมีต้นไม้ขัดแย้งกับไฟล์ใหม่และฉันต้องการเวอร์ชันใหม่จากลำต้นที่แตกต่างกันดังนั้นจากสำเนาที่สมบูรณ์ของ branch2 ฉันจึงทำการลบไฟล์ที่ขัดแย้งกัน svn ทำการเปลี่ยนแปลง branch2 เหล่านี้ (ดังนั้นการสร้างชั่วคราว เวอร์ชันของ branch2 ที่ไม่มีไฟล์ที่เป็นปัญหา) จากนั้นทำการรวมของฉันจากลำต้น ฉันทำสิ่งนี้เพราะฉันต้องการให้ประวัติตรงกับเวอร์ชันลำตัวเพื่อที่ฉันจะได้ไม่เกิดปัญหาอีกในภายหลังเมื่อพยายามรวมกลับไปที่ trunk การผสานเป็นไปด้วยดีฉันได้ไฟล์เวอร์ชันลำตัวแล้ว svn st แสดงให้เห็นว่าตกลงทั้งหมดแล้วฉันก็พบข้อขัดแย้งของต้นไม้มากขึ้นในขณะที่พยายามทำการเปลี่ยนแปลงระหว่างการลบที่ฉันได้ทำไปก่อนหน้านี้และการเพิ่มจากการผสาน แก้ไข svn ของข้อขัดแย้งที่สนับสนุนสำเนาที่ใช้งานของฉัน (ซึ่งตอนนี้มีไฟล์เวอร์ชัน trunk) และทำให้เกิดข้อผิดพลาด

ดีไม่ การอัปเดตสำเนาของ branch2 อื่นทำให้เกิดไฟล์เวอร์ชันเก่า (pre-trunk merge) ตอนนี้ฉันมีสำเนาการทำงานที่แตกต่างกันสองชุดของ branch2 ซึ่งคาดว่าจะได้รับการอัปเดตเป็นเวอร์ชันเดียวกันโดยมีไฟล์สองเวอร์ชันที่แตกต่างกันและทั้งคู่ยืนยันว่าเป็นเวอร์ชันล่าสุด! การตรวจสอบสำเนาทั้งหมดของ branch2 ทำให้เกิดไฟล์เวอร์ชันเก่า (pre-trunk) ฉันอัปเดตสิ่งเหล่านี้เป็นเวอร์ชัน trunk ด้วยตนเองและยอมรับการเปลี่ยนแปลงกลับไปที่สำเนาการทำงานแรกของฉัน (จากที่ฉันได้ส่งการเปลี่ยนแปลงลำต้นไปแล้ว) ลองอัปเดตและตอนนี้ได้รับข้อผิดพลาดการตรวจสอบไฟล์ที่มีปัญหา ระเบิดไดเร็กทอรีที่มีปัญหารับเวอร์ชันใหม่ผ่านการอัปเดตและในที่สุดฉันก็มีเวอร์ชันที่ดีของ branch2 ที่มีการเปลี่ยนแปลงของ trunk ฉันหวังว่า. นักพัฒนา Caveat

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