ต้องการลบการแก้ไขจากที่เก็บ SVN ของฉัน


33

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

แต่ฉันไม่ต้องการเพียงแค่ใช้ 'เปลี่ยนกลับ' ในสำเนาการทำงานของฉัน จริง ๆ แล้วฉันต้องการลบการแก้ไขหัวของฉันและการแก้ไขหลายครั้งก่อนหน้าใน repo ของฉันดังนั้น 'คืนค่า' repo ของฉันเป็นการแก้ไขก่อนหน้านี้ซึ่งจะเป็นการแก้ไขหัว ใครรู้ว่าฉันจะทำเช่นนี้?


1
คุณไม่สามารถลบการแก้ไขแบบเก่าได้สิ่งที่คุณทำได้คือย้อนกลับการเปลี่ยนแปลงและยอมรับสิ่งนั้นตามที่เฟลิกซ์กล่าวถึง sidenote ที่น่าสนใจ Git (เช่นเดียวกับการแก้ปัญหาการควบคุมเวอร์ชันอื่น ๆ ) ไม่จริงช่วยให้คุณสามารถแก้ไขลบอย่างแท้จริง ..
davr

3
ใช่คุณทำได้คุณแค่ต้องเข้าถึงที่เก็บ SVN ด้วย svnadmin ดูคำตอบของฉันด้านล่าง
martin

davr ถูกต้องทางเทคนิค สิ่งที่คุณอธิบายคือการทิ้งการแก้ไขทั้งหมดยกเว้นสิ่งที่ไม่ดีจากนั้นทิ้งสิ่งนี้ไว้บน repo เก่า ในใจของฉันมันไม่เหมือนกับการ 'ลบ' การแก้ไข
Sirex

คำตอบ:


12

ลิงค์นี้อาจช่วยคุณ:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

อ้างถึง:

  1. เปลี่ยนเป็นไดเรกทอรีบนสุดภายในสำเนาการทำงานของคุณ (สมมติว่าคุณต้องการย้อนกลับสำเนาการทำงานทั้งหมด)

  2. เรียกใช้svn revertเพื่อเปลี่ยนไฟล์สำเนาการทำงานของคุณกลับสู่สถานะเดิมเมื่อคุณยืนยัน / เช็คเอาต์ครั้งล่าสุด

  3. เรียกใช้svn status -vเพื่อดูว่าหมายเลขการแก้ไขใดที่สำเนาการทำงานของคุณตรงกับในขณะนี้ (เป็นหมายเลขการแก้ไขสูงสุดในรายการที่svn status -vสร้าง)

  4. รันsvn merge -rXX:YYโดยที่XXเป็นหมายเลขที่คุณได้รับในขั้นตอนก่อนหน้าและYYเป็นหมายเลขของการแก้ไขที่คุณต้องการเปลี่ยนกลับเป็น

  5. ทำ! ข้อยกเว้นที่เป็นไปได้คือไฟล์ในสำเนาการทำงานของคุณที่ไม่ได้มีอยู่เมื่อทำการแก้ไขYYเริ่มต้นจะยังคงอยู่ที่นั่นเพราะโดยค่าเริ่มต้น svn จะไม่ลบสิ่งต่าง ๆ หากคุณต้องการกำจัดพวกเขาให้เรียกใช้svn del [filename]ในแต่ละของพวกเขา

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


1
ใน Windows Os ตัวเลือก # 4 เรียกใช้svn merge -rXX:YY .อย่าลืมใส่จุดที่ท้ายบรรทัดเพื่ออ้างอิงไดเรกทอรีปัจจุบัน และใน TortoiseSVN มีตัวเลือกในการรวมกลับเป็น
Shantha Kumara

3
สิ่งนี้ไม่ได้เปลี่ยนกลับไปเป็น "การแก้ไขก่อนหน้านี้ซึ่งจะกลายเป็นการแก้ไขครั้งใหญ่" มันไม่ได้ทำให้การแก้ไข HEAD ที่เก่ากว่า ค่อนข้างจะสร้างหัวใหม่ ดูคำตอบของมาร์ติน
Matthew Flaschen

ฉันแก้ไขคำตอบเพื่อรวมคำพูดของ Shantha เกี่ยวกับช่วงท้าย นี่เป็นเหมือน * nix เช่นกัน
Mike Kormendy

72

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

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1 คุณเป็นคนเดียวที่เข้าใจคำถามและให้คำตอบเฉพาะ
Matthew Flaschen

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

1
รวดเร็วและง่ายและตรงประเด็นและจริง ๆ แล้วสิ่งที่ผู้ขอถาม
unc0nnected

7
ตราบใดที่คุณแน่ใจว่าได้คัดลอกที่เก็บ UUID ไปยัง repo ใหม่ (ดูที่ "svnadmin setuuid" การคัดลอกจาก UUID ใน "svn ข้อมูล" ใน repo เก่า) เฉพาะการชำระเงินที่ปรับปรุงเพื่อแก้ไขที่คุณตัดออกจะ ถูกทำให้เป็นโมฆะ
ไบรอันจิ๊บจ๊อย

1
ใน repos ใหม่คุณอาจจำเป็นต้องแก้ไขสิทธิ์ของไฟล์หรือคัดลอกไฟล์ในไดเร็กทอรี hooks / conf
AdamS

5

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันเพิ่งพบวิธีการทำกับ Windows / TortoiseSVN

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

  1. เช็กเอาต์ HEAD ของที่เก็บสำหรับไดเร็กทอรีที่คุณต้องการเปลี่ยนกลับการแก้ไข
  2. โหลดมุมมอง "แสดงบันทึก" ใน TortoiseSVN สำหรับไดเรกทอรีระดับสูงสุดที่คุณต้องการเปลี่ยนกลับ (เช่น "Trunk")
  3. คลิกขวาที่การแก้ไขที่คุณต้องการลบหมายเหตุ: นี่เป็นการแก้ไขที่คุณต้องการลบไม่ใช่สิ่งที่คุณต้องการเปลี่ยนกลับ
  4. เลือก "ย้อนกลับการเปลี่ยนแปลงจากการแก้ไขนี้"
  5. คลิก "ใช่" ที่พร้อมท์
  6. อัปเดตการเช็คเอาต์ตามปกติ แต่เป็น "HEAD"
  7. กระทำมันกลับ

จากนั้นคุณจะไปที่คนอื่น ๆ ที่ได้ทำการตรวจสอบแล้วและทำการอัปเดตและตรวจสอบให้แน่ใจว่าได้ลบไฟล์ใหม่แล้ว

นอกจากนี้คุณจะต้องตรวจสอบให้แน่ใจว่าทุกคนรู้ว่าการแก้ไขนั้นคืออะไรและอาจปรับปรุงคำอธิบาย


วิธีนี้แตกต่างจากขั้นตอน "เปลี่ยนกลับ" ปกติอย่างไร
Tomer W

ย้อนกลับเพียงแค่เปลี่ยนสำเนาการทำงานของคุณเป็นสิ่งที่อยู่ใน repo ... นี่คือวิธีที่จะทำให้ HEAD ของรายงานสะท้อนถึงสถานะของการกระทำก่อนหน้านี้
มาร์ติ

1
ขอบคุณสำหรับสิ่งนี้ - การทำเช่นนี้วิธี SVN ของเต่าเป็นเพียงสิ่งที่ฉันต้องการเพื่อย้อนกลับการกระทำที่ผิดพลาด :)
ดร. Andrew Burnett-Thompson

นอกจากนี้ยังมีรายการเมนูบริบท " เปลี่ยนกลับเป็นการแก้ไขนี้ " ในหน้าต่างบันทึก
Uwe Keim

4

คุณสามารถใช้การถ่ายโอนข้อมูล / โหลดเพื่อวัตถุประสงค์นี้

คุณสามารถใช้ svnsync เพื่อทำการสำรองข้อมูลเพื่อแก้ไขบางส่วน

หากคุณมีพื้นที่เก็บข้อมูลขนาดใหญ่มันต้องใช้เวลา


3

สำหรับฉัน (VisualSVN, 30-HEAD) ใช้งานได้:

  เดล C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  ลบ C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  ลบ C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  เดล C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  เดล C: \ Repositories \ MyRepo \ revprops \ 0 \ 29
  ลบ C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


ดีกว่าคำตอบอื่น ๆ อย่างไร
โตโต้

มันเร็วกว่ามาก
Anton Golikhoff

0

ไปที่เทอร์มินัลและไปที่ svn repsitory: ตอนนี้พิมพ์

svn update -r "หมายเลขการแก้ไขที่คุณต้องการเปลี่ยนกลับ"


2
ยินดีต้อนรับสู่ Super User! โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง คำตอบของคุณไม่ตอบคำถามเดิม OP กล่าวว่า "ฉันไม่ต้องการเพียงแค่ใช้ 'เปลี่ยนกลับ' ในสำเนาการทำงานของฉัน"
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.