ถ้าฉันเรียกใช้svn rm file
ไฟล์จะถูกลบออกจากสำเนาการทำงานในเครื่อง
สิ่งที่ฉันทำตอนนี้คือ:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
ฉันจะหลีกเลี่ยงไม่ให้ svn ลบไฟล์ในเครื่องเมื่อใช้งานได้svn rm
อย่างไร
ถ้าฉันเรียกใช้svn rm file
ไฟล์จะถูกลบออกจากสำเนาการทำงานในเครื่อง
สิ่งที่ฉันทำตอนนี้คือ:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
ฉันจะหลีกเลี่ยงไม่ให้ svn ลบไฟล์ในเครื่องเมื่อใช้งานได้svn rm
อย่างไร
คำตอบ:
คุณต้องการ--keep-local
ตัวเลือกบรรทัดคำสั่ง ซึ่งจะลบไฟล์ออกจากการควบคุมเวอร์ชันโดยไม่ต้องลบออกจากระบบไฟล์ของคุณ
$ svn rm --keep-local my_important_file
หมายเหตุ:สิ่ง--keep-local
เดียวที่มีผลต่อsvn rm
สำเนาของคุณ ผู้ใช้รายอื่นอาจลบสำเนาไฟล์ในเครื่องของตนเองเว้นแต่จะมีข้อขัดแย้งระหว่างสำเนาในเครื่องและที่เก็บเนื่องจากการเปลี่ยนแปลงที่ทำ นี่อาจไม่ใช่ผลลัพธ์ที่ต้องการ ดูความคิดเห็นด้านล่าง
การลบไฟล์ออกจาก 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
นี่เป็นเรื่องน่าเกลียดมากจนแทบจะเรียกได้ว่าเป็น "โซลูชัน" อย่างไรก็ตามมันอนุญาตให้ซ่อมแซมได้อย่างรวดเร็วหากเกิดอุบัติเหตุในภายหลัง
ฉันไม่มีคำตอบสำหรับคำถามที่แน่นอนนี้ แต่ฉันมีคำตอบสำหรับคำถามที่เกี่ยวข้องซึ่งเป็นวิธีการลบไฟล์ทั้งหมด (เช่นไม่ใช่ไฟล์เฉพาะ) ในไดเร็กทอรีจากการควบคุมเวอร์ชันโดยไม่ต้องลบในเครื่อง โซลูชันนี้มาจากการใช้งาน Scientific Linux
ls -a .svn
ควรแสดงไดเร็กทอรี svn ที่เก็บข้อมูลควบคุม เพียงแค่:
rm -r .svn
จะกำจัดไดเร็กทอรีนี้ จากนั้นพิมพ์:
svn status
จะสร้างข้อผิดพลาด 'คำเตือน: ไดเร็กทอรีนี้ไม่ใช่สำเนาที่ใช้งานได้' เนื่องจากไม่ได้อยู่ภายใต้การควบคุมเวอร์ชันอีกต่อไป
ฉันหวังว่านี่จะช่วยได้.