วิธีแก้ไขข้อความ“ การแก้ไขในตัวเครื่อง, การลบขาเข้าเมื่ออัพเดต”


293

เมื่อฉันทำsvn status .ฉันได้รับสิ่งนี้:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

โดยทั่วไปไฟล์เหล่านี้ไม่ควรอยู่ในที่เก็บ ผู้พัฒนาได้ลบออกแล้ว จากนั้นฉันคิดว่าฉันทำผิดsvn rm ...หลังจากจริง (ควรทำsvn update .แทน)

ดังนั้นเมื่อฉันทำsvn status .ฉันจะได้รับข้อความขัดแย้งต้นไม้

ฉันพบเอกสารที่นี่แต่ไม่แน่ใจว่าจะ "รวม" เอกสารตามเอกสารได้อย่างไร

วิธีการกำจัดพวกเขา?

ฉันคิดว่าสำเนาการทำงานของฉันซิงค์กับที่เก็บ ไม่ทราบสาเหตุที่ข้อความเหล่านี้แสดง ไฟล์เหล่านี้ควรถูกลบและถูกลบเท่าที่ฉันรู้ทุกที่ ฉันพยายามsvn update .และแต่ฉันยังคงได้รับข้อความนี้เมื่อฉันทำsvn revert .svn status .


1
คำตอบของเลสมาใช้ได้กับข้อความด้วย"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzee

คำตอบ:


434

เวอร์ชั่นสั้น:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

หากความขัดแย้งเป็นเรื่องเกี่ยวกับไดเรกทอรีแทนไฟล์แล้วแทนที่touchด้วยmkdirและมีrmrm -r


หมายเหตุ: กระบวนการเดียวกันยังทำงานได้ในสถานการณ์ต่อไปนี้:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

รุ่นยาว:

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

svn resolveไม่ควรทำงานไม่ว่าด้วยเหตุผลใดคุณสามารถทำสิ่งต่อไปนี้:

สถานการณ์เริ่มต้น: ไฟล์ในเครื่องหายไปการอัพเดทจะขัดแย้งกัน

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

สร้างไฟล์ที่ขัดแย้งกันใหม่:

$ touch foo bar

หากความขัดแย้งเป็นเรื่องเกี่ยวกับไดเรกทอรีแล้วแทนที่ด้วยtouchmkdir

สถานการณ์ใหม่: ไฟล์โลคัลที่จะเพิ่มลงในที่เก็บ (ใช่ถูกต้อง, svn, ไม่ว่าคุณจะพูดอะไร) อัพเดตยังคงขัดแย้งกัน

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

แปลงไฟล์กลับเป็นสถานะ svn กดไลค์ (นั่นหมายถึงลบไปแล้ว):

$ svn revert foo bar

สถานการณ์ใหม่: svn ไม่รู้จักไฟล์ในเครื่องอัปเดตไม่ขัดแย้งกันอีกต่อไป

$ svn st
?       foo
?       bar

ตอนนี้เราสามารถลบไฟล์:

$ rm foo bar

หากความขัดแย้งเป็นเรื่องเกี่ยวกับไดเรกทอรีแล้วแทนที่ด้วยrmrm -r

svn ไม่บ่นอีกต่อไป:

$ svn st

เสร็จสิ้น


8
สิ่งนี้ยังใช้งานได้เมื่อความขัดแย้งสำหรับไดเรกทอรี แทนที่จะบาร์ foo สัมผัสทำmkdir fooและmkdir บาร์ ทุกอย่างอื่นเหมือนกัน
Vipin Johney

คุณสามารถใช้svn st | grep ! | cut -f 7 -d' ' | xargs touchเป็นซับในสำหรับการสัมผัสไฟล์ที่หายไปทั้งหมด
Tibor Blenessy

จำไว้ว่าสำหรับไดเรกทอรียังทำrm -r foo bar(หรือrmdir foo barบน Windows หรือถ้าคุณชอบ Windows)
trysis

คำตอบนี้ช่วยให้สติของฉันดีขึ้น ขอบคุณ.
Sam

159

พยายามแก้ไขข้อขัดแย้งโดยใช้

svn resolve --accept=working PATH

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

1
มันไม่ทำงานสำหรับฉันในตอนแรกดังนั้นฉันจึงตรวจสอบสำเนาของ svn อีกสาขาในโฟลเดอร์ชั่วคราว จากนั้นฉันลบ PATH ทำให้เกิดข้อขัดแย้งและยืนยันการเปลี่ยนแปลง หลังจากนั้นฉันกลับไปที่สำเนาต้นฉบับและรันคำสั่งนี้ มันใช้งานได้กับข้อความ "การแก้ไขสถานะความขัดแย้งของ PATH" ใช้งานได้ดีขอบคุณ :)
Durin

ความเข้าใจของฉันคือว่ามันจะไม่ได้มีความสำคัญถ้าต้นฉบับถูกลบหรือไม่ได้อยู่ในพื้นที่เก็บข้อมูลเพราะ "แก้ไข" ทำงานได้เฉพาะในสำเนาการทำงาน
govi

โซลูชั่นที่สมบูรณ์แบบสำหรับฉัน
Sergio Álvarez

20

ฉันเพิ่งได้รับปัญหาเดียวกันนี้และฉันพบว่า

$ svn revert foo bar

แก้ไขปัญหา

แก้ไข svn ไม่ทำงานสำหรับฉัน:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working
svn: Try 'svn help' for more info
svn: Not enough arguments provided

$ svn resolve --accept working .

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working foo
Resolved conflicted state of 'foo'

$ svn st
!  +    foo
!  +  C bar
      >   local edit, incoming delete upon update

2

หากคุณไม่ได้ทำการเปลี่ยนแปลงใด ๆ ภายในไดเรกทอรีขัดแย้งคุณยังสามารถแล้วrm -rf conflicts_in_here/ svn upสิ่งนี้ใช้ได้ผลกับฉันเป็นอย่างน้อย


1

คุณสามารถบังคับให้เปลี่ยนไดเรกทอรีภายในเครื่องของคุณเป็น svn

 svn revert -R your_local_path

ขอบคุณยังช่วยฉันแก้ปัญหาA + C path/to/dirและ> local dir edit, incoming dir delete or move upon update
RAM237

0

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


0

ปัญหานี้มักเกิดขึ้นเมื่อเราพยายามรวมการเปลี่ยนแปลงสาขาอื่นจากไดเรกทอรีที่ไม่ถูกต้อง

Ex:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

ความขัดแย้งที่เกิดขึ้นกับการดำเนินการคือ:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

และเมื่อคุณเลือกqเพื่อออกจากการแก้ปัญหาคุณจะได้รับสถานะเป็น:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

ซึ่งหมายความว่าการผสานมีการเปลี่ยนแปลงที่เกี่ยวข้องกับBranch1_SubDirและBranch1_AnotherSubDirและไม่พบโฟลเดอร์เหล่านี้ภายในBranch1_SubDir(แน่นอนไดเรกทอรีไม่สามารถอยู่ภายในตัวเอง)

วิธีหลีกเลี่ยงปัญหานี้ตั้งแต่แรก:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

การแก้ไขที่ง่ายที่สุดสำหรับปัญหานี้ที่ใช้งานได้สำหรับฉัน:

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