SVN ยกเลิกการลบก่อนกระทำ


135

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

แก้ไข: ฉันต้องการโซลูชันที่ทำงานในการโค่นล้ม 1.4.4


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

คำตอบ:


145

svn revert deletedDirectory

นี่คือเอกสารสำหรับsvn revertคำสั่ง


แก้ไข

หากdeletedDirectoryถูกลบโดยใช้ แต่rmdirไม่ใช่svn rmคุณจะต้องทำ

svn update deletedDirectory

แทน.


3
ต้องเป็นของใหม่ไม่สามารถใช้งานได้ใน SVN 1.4.4 (เป็นสิ่งแรกที่ฉันลอง)
LaC

4
นี่คือสิ่งที่ 1.4.4 กล่าวว่า btw: $ svn ช่วยเปลี่ยนกลับ: กู้คืนไฟล์สำเนาที่ใช้งานได้จริง (เลิกทำการแก้ไขในเครื่องส่วนใหญ่) การใช้งาน: ย้อนกลับ PATH ... หมายเหตุ: คำสั่งย่อยนี้ไม่ต้องการการเข้าถึงเครือข่ายและแก้ไขสถานะที่ขัดแย้งกัน อย่างไรก็ตามจะไม่คืนค่าไดเรกทอรีที่ถูกลบ
LaC

1
1.6.6 มีข้อความเหมือนกันในวิธีใช้ แต่ใช้ได้กับฉันเมื่อฉันทดสอบ โปรดทราบว่าถ้าคุณไม่ได้ใช้svn deleteในการลบไดเรกทอรี แต่แทนที่จะถูกลบโดยใช้rmdirคุณจะต้องsvn update deletedDirectoryแทน
Michael Hackner

ฉันได้ลบหนึ่งไฟล์ (svn del) จากไดเร็กทอรี svn-ed ในเครื่อง การอัปเดต svn ไม่ทำงาน แต่ svn revert ใช้งานได้ ฉันใช้ SynchroSVN สำหรับ Mac อย่างไรก็ตามขอบคุณสำหรับเคล็ดลับ
karim

5
ตามลิงค์ให้ใช้ svn -R revert เพื่อยกเลิกการลบไดเร็กทอรีทั้งหมดที่มีเนื้อหาทั้งหมดซึ่งอาจเป็นสิ่งที่คุณต้องการ svn เปลี่ยนกลับโดยไม่มี -R เพียงแค่กู้คืนไดเร็กทอรีไม่ใช่เนื้อหา
13

156

1) ทำ

svn revert . --recursive

2) แยกวิเคราะห์ผลลัพธ์สำหรับข้อผิดพลาดเช่น

"Failed to revert 'dir1/dir2' -- try updating instead."

3) เรียก svn ขึ้นสำหรับไดเรกทอรีข้อผิดพลาดแต่ละรายการ:

svn up dir1/dir2

12
นี่เป็นคำตอบที่ถูกต้องที่สุดขอบคุณมากคุณช่วยฉันได้มาก
greenoldman

1
ยกเว้นว่าจะย้อนกลับทุกอย่าง? คุณอาจไม่ต้องการทำเช่นนั้น
13

1
สิ่งนี้เหมาะสมที่สุดหากคุณมีทั้งโฟลเดอร์ที่ SVN คิดว่าถูกลบไป ฉันมีสิ่งนั้นขณะตรวจสอบสำเนาที่ใช้งานได้ มีโฟลเดอร์หนึ่งอยู่แล้วดังนั้นจึงถูกทำให้ขัดแย้งกันและไม่ได้เช็คเอาต์ มันเป็นลิงค์ไปยังโฟลเดอร์อื่น ฉันเปลี่ยนชื่อมันและพยายามsvn upทำให้มันตรวจสอบตระหนักถึงความขัดแย้งทำsvn resolved fooและsvn statusบอกว่าฉันมีไฟล์ประมาณ 10,000 ไฟล์ที่ทำเครื่องหมายเป็นD. svn upและsvn revertไม่ได้รับคืน แต่วิธีนี้ช่วยแก้ปัญหาได้
simbabque

6
+1 --recursiveซึ่งช่วยในการกู้คืนเนื้อหาของไดเรกทอรีที่ถูกลบ
Melebius

1
โอ้พระเจ้าคุณช่วยฉันตอนเย็น!
ArturOlszak

32

สิ่งที่ได้ผลสำหรับฉันคือ

svn revert --depth infinity deletedDir

สิ่งนี้ใช้งานได้ดีสำหรับฉัน (svn 1.7.10) โดยที่svn revert ถูกลบไปแล้ว Dirล้มเหลวในการทำงาน คำตอบที่ยอดเยี่ยม
rtome

4

ทำการยกเลิกการดำเนินการ (เรียกซ้ำ) จากระดับเหนือไดเร็กทอรีที่คุณลบไป


1
สิ่งนี้จะลบล้างการเปลี่ยนแปลงมากเกินความจำเป็น WAY
Michael Hackner

นั่นใช้ไม่ได้กับ Subversion 1.4.4 (ฉันเพิ่งลองใช้) svn ช่วยย้อนกลับด้วยซ้ำว่า "คำสั่งย่อยนี้ไม่ต้องการการเข้าถึงเครือข่ายและแก้ไขสถานะที่ขัดแย้งใด ๆ อย่างไรก็ตามจะไม่คืนค่าไดเรกทอรีที่ถูกลบออก" ฉันขอโทษฉันควรระบุเวอร์ชันแล้ว 1.4.4 คือสิ่งที่มาพร้อมกับ Mac OS X 10.5
LaC

4

หากต้องการทำให้เป็นซับเดียวคุณสามารถลองทำสิ่งต่างๆเช่น:

svn status | cut -d ' ' -f 8 | xargs svn revert

ฉันสร้างไดเร็กทอรีที่มีช่องว่างในชื่อได้ มันอาจทำลาย AFAIK ที่ 'ตัด'
Denis Barmenkov

1

วิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันพบคือลบไดเร็กทอรีพาเรนต์ออกจากสำเนาที่ใช้งานได้ (ด้วย rm -rf ไม่ใช่ svn delete) จากนั้นเรียกใช้การอัปเดต svn ในปู่ย่าตายาย เช่นถ้าคุณลบ a / b / c, rm -rf a / b, cd a, svn up นั่นทำให้ทุกอย่างกลับมา แน่นอนว่านี่เป็นเพียงทางออกที่ดีหากคุณไม่มีการเปลี่ยนแปลงอื่น ๆ ที่ไม่ได้ผูกมัดในไดเร็กทอรีหลักที่คุณต้องการเก็บไว้

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


นั่นคือสมมติว่าไม่มีไดเร็กทอรีย่อยในพาเรนต์ที่มีการเปลี่ยนแปลงที่รอดำเนินการ
Russell

0

คุณสามารถลบโฟลเดอร์และอัพเดตไดเร็กทอรีหลักก่อนที่จะคอมมิต:

rm -r some_dir

svn update some_dir_parent

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