“ unadd” ไฟล์ไปยัง svn ก่อนคอมมิท


200

ฉันอยู่ระหว่างการเพิ่ม / เรียกคืน svn แบบเรียกซ้ำและโฟลเดอร์ที่ไม่มีคุณสมบัติการเพิกเฉยที่เหมาะสมก็รวมอยู่ด้วย ตอนนี้ฉันมีไฟล์ไบนารีที่อัปโหลดประมาณ 100 ไฟล์แล้ว แต่ฉันยังไม่ได้ยืนยัน

วิธีที่ง่ายที่สุดในการ 'เลิกทำ' สิ่งนี้โดยไม่ลบเอกสารทั้งหมดคืออะไร?

คำตอบ:


244

ใช้ svn revert --recursive folder_name


คำเตือน

svn revertเป็นอันตรายโดยเนื้อแท้เนื่องจากจุดประสงค์ทั้งหมดของมันคือการทิ้งข้อมูล - นั่นคือการเปลี่ยนแปลงที่คุณไม่คาดคิด เมื่อคุณย้อนกลับการโค่นล้มไม่สามารถคืนการเปลี่ยนแปลงที่ปราศจากข้อผูกมัดได้

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
หากต้องการขยายสิ่งนี้ - revertโดยไม่ต้องมีการแก้ไขให้ยกเลิกการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นนับตั้งแต่เช็คเอาต์ครั้งล่าสุดรวมถึงการเพิ่ม / ลบการเปลี่ยนแปลงการกำหนดตารางเวลาสำหรับไฟล์ที่ระบุ
เหลืองอำพัน

โดยที่ folder_name เป็นโฟลเดอร์พาเรนต์ของโฟลเดอร์ที่คุณใช้คำสั่ง "Add"
MacGyver

28
คำตอบนี้ไม่ถูกต้องมีอันตราย - มันจะไม่เปลี่ยนแปลงการเปลี่ยนแปลงของคุณโดยการลบสำเนาในไฟล์ภาพยนตร์ของคุณ คำตอบของ Brian Lacy ด้านล่างดีกว่ามาก
Henry Henrinson

6
พวกนี้ตอบคำถามเดิม: ไฟล์หรือโฟลเดอร์ที่ถูกเพิ่มแล้วเปลี่ยนกลับไปกลับไปเป็นรุ่นที่ไม่ใช่โดยไม่ถูกลบ นั่นคือสิ่งที่คำถามถาม หากคุณใช้ไฟล์นี้กับไฟล์ที่ถูกดัดแปลงแน่นอนมันจะย้อนกลับ แต่นั่นไม่ใช่คำถาม นั่นเป็นแม้แต่กรณีการใช้งานที่เฉพาะเจาะจงมากที่แสดงบนหน้าลิงค์
Julien Lebosquain

2
@JulienLebosquain ตกลงฉันเดาว่าคุณและฉันเข้าใจวลีนี้แตกต่างกัน: โดยไม่ต้องลบเอกสารทั้งหมด น่าเสียดายที่svn revertยังไม่ลบการเปลี่ยนแปลงที่เพิ่มเข้ามาใหม่ในสำเนาทำงานโดยการคืนค่าHEADเวอร์ชันล่าสุด ฉันลบ downvote ของฉันแล้ว แต่ฉันยังรู้สึกว่าคำเตือนเป็นสิ่งสำคัญ
jpaugh

145

svn rm --keep-local folder_name

หมายเหตุ: ใน svn 1.5.4 svn rm ลบไฟล์ที่ไม่มีการยกเลิกแม้ในขณะที่ระบุ --keep-local ดูhttp://svn.haxx.se/users/archive-2009-11/0058.shtmlสำหรับข้อมูลเพิ่มเติม


9
นี่เป็นการดีที่จะรู้ว่ามันช่วยให้คุณสามารถยกเลิก "svn เพิ่ม" โดยไม่สูญเสียการเปลี่ยนแปลง!
Ryan H.

1
คุณแน่ใจหรือไม่ว่า SVN 1.5.4 ลบไฟล์ที่ไม่มีเวอร์ชันใด ๆ รายงานไม่สามารถทำซ้ำได้และไม่มีอีเมลอื่นเกี่ยวกับเรื่องนี้
Quentin Pradet

4
นี่เป็นคำตอบที่ดีกว่าหากคุณต้องการ "คลาย" ไฟล์ แต่ยังคงเก็บไว้ หลังจากคำสั่งนี้ไฟล์จะยังคงอยู่กับ? สถานะ.
Robin Zimmermann

32

ลองsvn revert filenameทุกไฟล์ที่คุณไม่ต้องการและยังไม่ได้ยืนยัน หรือทำอีกวิธีหนึ่งsvn revert -R folderสำหรับโฟลเดอร์ที่มีปัญหาแล้วทำการดำเนินการอีกครั้งด้วยการเพิกเฉยการกำหนดค่าที่ถูกต้อง

จากเอกสาร:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
No! การย้อนกลับไม่ปลอดภัยเนื่องจาก
สูญเสีย

@jpaugh - นี่คือสิ่งที่ฉันเขียนในคำตอบใช่ไหม?
bobah

1
สิ่งที่ OP ขอ (และสิ่งที่ฉันคาดหวัง) คือคำสั่งให้ยกเลิกการเพิ่มโดยไม่สูญเสียการเปลี่ยนแปลงในระบบ svn revert. ไม่มีคำตอบใด ๆ ที่นี่พูดถึงความจริงที่ว่าการเปลี่ยนแปลงในท้องถิ่นจะหายไปโดยการเปลี่ยนกลับ
jpaugh

3

กระบวนการทั้งหมด (Unix svn package):

ตรวจสอบไฟล์ไม่ได้อยู่ใน SVN:

> svn st -u folder 
? folder

เพิ่มทั้งหมด (รวมถึงไฟล์ที่ถูกละเว้น):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

ลบ "เพิ่ม" ตั้งค่าสถานะเป็นไฟล์ * ละเว้นทั้งหมด:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

แก้ไข svn ละเว้นบนโฟลเดอร์

svn propedit svn:ignore .

เพิ่มสองซิงเกิ้ลไลน์ด้วยเพียงแค่ต่อไปนี้:

folderToIgnore
fileToIgnore2.txt

ตรวจสอบว่าจะอัพโหลดไฟล์ใดและคอมมิชชัน:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
ขอบคุณสิ่งที่ฉันต้องการ ดูเหมือนว่าจะคืนค่าการดำเนินการ 'เพิ่ม' เท่านั้นไม่ได้สัมผัสเนื้อหาไฟล์เอง ฉันกลัวที่จะสูญเสียการเปลี่ยนแปลงในท้องถิ่นตามที่ให้ความเห็นกับคำตอบก่อนหน้า แต่ดูเหมือนว่าไฟล์จะไม่ได้รับอันตราย
Peter M. - ย่อมาจาก Monica

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