จะ "ยกเลิกการลบ" โฟลเดอร์ที่ถูกลบใน Subversion / TortoiseSVN ได้อย่างไร?


97

เราได้ลบโฟลเดอร์ 'แท็ก' โดยไม่ได้ตั้งใจจากที่เก็บการโค่นล้มของเราซึ่งเราตั้งใจจะลบแท็กเฉพาะหนึ่งแท็ก วิธีที่ง่ายที่สุดในการดึงโฟลเดอร์ 'แท็ก' กลับมาคืออะไร?

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

คำตอบ:


117

เพียงคัดลอกโฟลเดอร์ที่ถูกลบกลับจากการแก้ไขก่อนหน้านี้

ใน Repository Browser ให้คลิกปุ่ม HEAD (ที่มุมขวาบน) เพื่อแสดงการแก้ไขที่โฟลเดอร์ของคุณยังคงมีอยู่จากนั้นคลิกขวาที่โฟลเดอร์นั้นแล้วเลือก "Copy to ... " และป้อนเส้นทางที่คุณต้องการ ต้องการสร้างโฟลเดอร์ใหม่ (อาจเป็นเส้นทางเดียวกับที่มีอยู่แล้วในกล่องข้อความ)


4
เคล็ดลับที่ดีขอบคุณ TortoiseSVN หนึ่งตัว - ในกล่องโต้ตอบ "copy to ... " นั้นฉันต้องเปลี่ยนเส้นทางจาก "example.com/svn/tags" เป็น "tags1" จากนั้นย้อนกลับเพื่อให้ปุ่ม OK เปิดใช้งาน
Borek Bernard

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

3
มันเก็บประวัติศาสตร์ แต่ก็ทำเช่นกัน
acdcjunior

ตรวจสอบให้แน่ใจว่าคุณได้ยกเลิกการเลือก "หยุดคัดลอก / เปลี่ยนชื่อ" เมื่อดูบันทึกเพราะไม่เช่นนั้น TortoiseSVN จะไม่แสดงประวัติก่อนที่คุณจะดำเนินการกู้คืน (อย่างชัดเจน) ...
Oli

มันใช้งานได้ทั้งหมด ประหยัดเวลาของฉันได้มาก ขอบคุณ :)
dgupta3091

78

สำหรับผู้ที่ชื่นชอบบรรทัดคำสั่ง:

  • ขั้นแรกให้ค้นหาหมายเลขการแก้ไขที่การลบของคุณเกิดขึ้น:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

บอกว่าคุณพบว่าไดเร็กทอรีถูกลบในการแก้ไข 999 (btw: คุณอาจพบว่าง่ายกว่าในการค้นหาหมายเลขการแก้ไขด้วยเบราว์เซอร์ svn repo)

  • คัดลอกโฟลเดอร์จากการแก้ไขลบ 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

คุณทำเสร็จแล้ว!

ในกรณีของคุณอาจเป็น:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

1
ขอบคุณ.. ประหยัดเวลามาก
Dharani Kumar

แค่นี้ก็ช่วยเบคอนของฉันแล้ว!
สัจพจน์

เพียงแค่ต้องการที่จะยืนยันว่าวิธีการ "svn copy" นั้นเก็บรักษาประวัติทั้งหมดไว้จริงและสำหรับโฟลเดอร์จะดำเนินการแบบวนซ้ำโดยกู้คืนโฟลเดอร์และลูกทั้งหมด
WallStProg

11

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

svn merge -r R1:R2

โดยที่ R1 คือการแก้ไขที่คุณอยู่และ R2 คือการแก้ไขที่มีไฟล์ / โฟลเดอร์ที่ถูกลบ


1
ในการผสานย้อนกลับ R1 ควรเป็นการแก้ไขที่คุณต้องการเปลี่ยนกลับโดย R2 เป็นการแก้ไขก่อนหน้านั้น
arleslie

2
คุณจะไม่สูญเสียใด ๆ svn copyกับประวัติศาสตร์
maxschlepzig

สำหรับพวกเราที่ไม่ใช่ผู้ที่ชื่นชอบบรรทัดคำสั่งโปรดดูที่tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal

2
จะไม่กู้คืนไฟล์ / โฟลเดอร์ที่ถูกลบทั้งหมดหรือไม่? จะใช้งานได้หรือไม่ถ้าฉันต้องการกู้คืนโฟลเดอร์ที่ถูกลบเพียงโฟลเดอร์เดียว แต่ไม่ใช่โฟลเดอร์ที่ถูกลบอื่น ๆ
OJ7

8

คุณจะต้องทำไฟล์ ผสานย้อนกลับ

สำหรับรายละเอียดเกี่ยวกับวิธีการที่จะทำมัน (และอะไรที่สวยมากอื่น ๆ ที่คุณเคยจะต้องการหรือจำเป็นที่จะต้องทำอย่างไรกับ SVN) หนังสืออย่างเป็นทางการใช้ได้ออนไลน์


3

ต่อจากคำตอบของ raudi ซึ่งได้ผลสำหรับฉันหลังจากการแก้ไขนี้

ไคลเอนต์ svn บางตัวอาจต้องการหมายเลขการแก้ไขที่ระบุโดยใช้พารามิเตอร์การแก้ไข -r แทนที่จะใช้ @ หลังโฟลเดอร์ดังนี้:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

หากคุณกำลังกู้คืนจากโฟลเดอร์ที่ยังมีอยู่-r <revision>จะใช้งานได้ @<revision>แต่ถ้าคุณกำลังพยายามที่จะเรียกคืนโฟลเดอร์โดยตรงคุณจะต้องใช้ มิฉะนั้นจะแจ้งให้คุณทราบว่าไม่พบไฟล์
arleslie

2

Goto Repository Browserของคุณrepository, คลิกขวาที่โฟลเดอร์ที่คุณโฟลเดอร์ลบมีอยู่ ตอนนี้Show Logของโฟลเดอร์หลักและเลือกการแก้ไขก่อนหน้านี้ที่คุณยืนยันการดำเนินการลบ คุณจะมีรายการและคลิกขวาที่โฟลเดอร์จากข้อมูลการแก้ไขแล้วเลือกUpdate to this Revisionคุณจะมีรายชื่อและคลิกขวาที่โฟลเดอร์จากข้อมูลการแก้ไขและเลือก

คุณทำเสร็จแล้ว


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

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