จะลบไฟล์ออกจากการควบคุมเวอร์ชันโดยไม่ลบได้อย่างไร


132

ถ้าฉันเรียกใช้svn rm fileไฟล์จะถูกลบออกจากสำเนาการทำงานในเครื่อง

สิ่งที่ฉันทำตอนนี้คือ:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

ฉันจะหลีกเลี่ยงไม่ให้ svn ลบไฟล์ในเครื่องเมื่อใช้งานได้svn rmอย่างไร


คำตอบ:


280

คุณต้องการ--keep-localตัวเลือกบรรทัดคำสั่ง ซึ่งจะลบไฟล์ออกจากการควบคุมเวอร์ชันโดยไม่ต้องลบออกจากระบบไฟล์ของคุณ

$ svn rm --keep-local my_important_file

หมายเหตุ:สิ่ง--keep-localเดียวที่มีผลต่อsvn rmสำเนาของคุณ ผู้ใช้รายอื่นอาจลบสำเนาไฟล์ในเครื่องของตนเองเว้นแต่จะมีข้อขัดแย้งระหว่างสำเนาในเครื่องและที่เก็บเนื่องจากการเปลี่ยนแปลงที่ทำ นี่อาจไม่ใช่ผลลัพธ์ที่ต้องการ ดูความคิดเห็นด้านล่าง


4
จะยังไม่ลบออกจากระบบของคนอื่นเมื่อมีการอัปเดต?
Nyerguds

1
@Nyerguds ถูกต้องเนื่องจาก svn rm กำลังลบไฟล์ออกจากที่เก็บ ในกรณีที่คุณต้องการลบไฟล์ออกจาก repo แต่ให้เก็บไว้ในเครื่องของคุณจากนั้นคุณจะใช้แฟล็กด้านบน
Greg Hilston

6
@GregHilston อย่างที่ฉันพูดไปนั่นไม่ได้ช่วยอะไรในโครงการโปรแกรมเมอร์หลายคนจริงๆ ควรมีวิธีในการยกเลิกการแปลงไฟล์ทุกที่ กรณีที่พบบ่อยที่สุดในที่นี้คือไฟล์การตั้งค่าในเครื่องที่เกิดขึ้นโดยบังเอิญ (พบได้บ่อยในโครงการ Java) แต่การยกเลิกการแปลงไฟล์นั้นไม่ควรล้างไฟล์การตั้งค่าของผู้ใช้
Nyerguds

5
@GregHilston "โครงการโปรแกรมเมอร์หลายโปรแกรมที่แท้จริง" ค่อนข้างส่อไปใน "ระบบของคนอื่น" ปัญหาคือคนอื่นอัปเดตและเขียนทับการตั้งค่าของตน ซึ่งโดยปกติแล้วจะไม่เป็นปัญหามากนัก แต่ก็น่ารำคาญพอที่จะแก้ไขได้ แต่เมื่อถึงจุดนั้นเมื่อพวกเขาได้เขียนทับการตั้งค่าแล้วและตอนนี้ได้รับ svn "rm" ในการอัปเดตมันจะลบไฟล์การตั้งค่าภายในที่อาจมีความสำคัญออกจากระบบของพวกเขาในขณะที่ควรจะยกเลิกการแปลงเพื่อให้สามารถกำหนดค่าเป็นโลคัลได้ การตั้งค่าอีกครั้ง
Nyerguds

4
การโหลดไฟล์เก่าจากที่เก็บซ้ำจะทำเครื่องหมายว่ามาจากเวอร์ชันเก่ากว่านั้นหมายความว่าการอัปเดตจะลบไฟล์นั้นอีกครั้ง ไม่มีวิธีใดที่ดีในการดำเนินการนี้ซึ่งไม่จำเป็นต้องมีการแทรกแซงด้วยตนเองกับทุกเครื่องในโครงการ
Nyerguds

13

การลบไฟล์ออกจาก SVN โดยไม่ลบในเครื่องไม่มีปัญหาที่พบบ่อย ตัวอย่างที่เห็นได้ชัดคือไฟล์. classpath ในโปรเจ็กต์ Eclipse การวางไฟล์คอนฟิกูเรชันนี้ไว้ใน SVN นั้นยอดเยี่ยมมากตราบเท่าที่ทุกเครื่องที่ใช้ในโปรเจ็กต์มีการติดตั้ง Eclipse และ Java เหมือนกัน เมื่อเงื่อนไขนี้ถูกละเมิดคอมมิตจะเริ่มทำลายโปรเจ็กต์ Eclipse อื่น ๆ นี่คือจุดที่เราต้องลบไฟล์ออกจาก SVN โดยไม่ต้องลบ ist ที่ใดก็ได้

svn rm --keep-local .classpath

ทำงานได้อย่างสมบูรณ์แบบในเครื่องเดียวและ ณ เวลานั้น

ปัญหาคือเครื่องอื่นอาจสูญเสียไฟล์นั้น (ในการอัปเดต) หรือฟื้นคืนชีพ (เมื่อกระทำ) ข้อบกพร่องของ SVN ไม่สามารถจัดการ--keep-localในที่เก็บหรือเผยแพร่ไปยังสำเนาที่ใช้งานได้อื่น ๆ ดังนั้นในเครื่องอื่น ๆ ทั้งหมดข้างต้นคำสั่งจะต้องดำเนินการ - ดีที่สุดก่อนที่จะกระทำหรืออัปเดตใด ๆ

แน่นอนว่าสิ่งนี้จะได้ผลดีที่สุด 90% การลบและการปรับรุ่นใหม่จะเกิดขึ้นในทันที วิธีแก้ปัญหาของฉันคือการมีเครื่องจักรทุกเครื่องฉันสามารถเข้าถึงได้โดยตรงหรือโดยอ้อม

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

นี่เป็นเรื่องน่าเกลียดมากจนแทบจะเรียกได้ว่าเป็น "โซลูชัน" อย่างไรก็ตามมันอนุญาตให้ซ่อมแซมได้อย่างรวดเร็วหากเกิดอุบัติเหตุในภายหลัง


-3

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

ls -a .svn

ควรแสดงไดเร็กทอรี svn ที่เก็บข้อมูลควบคุม เพียงแค่:

rm -r .svn

จะกำจัดไดเร็กทอรีนี้ จากนั้นพิมพ์:

svn status

จะสร้างข้อผิดพลาด 'คำเตือน: ไดเร็กทอรีนี้ไม่ใช่สำเนาที่ใช้งานได้' เนื่องจากไม่ได้อยู่ภายใต้การควบคุมเวอร์ชันอีกต่อไป

ฉันหวังว่านี่จะช่วยได้.


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