ไม่อนุญาตวิธี SVN 405


122

ฉันลบโฟลเดอร์ใน SVN โดยไม่ได้ตั้งใจและเพิ่มกลับทันที ฉันพบปัญหากับสิ่งนี้และวิธีแก้ปัญหาของฉันลงเอยด้วยการลบโฟลเดอร์ทั้งหมดออกจากสำเนาในเครื่องของฉันรวมทั้งสำเนาเซิร์ฟเวอร์ ฉันสามารถอัปเดตและคอมมิตได้โดยไม่มีปัญหากับไฟล์หรือโฟลเดอร์อื่น ๆ แต่ถ้าฉันพยายามสร้างโฟลเดอร์ที่มีชื่อเดียวกันเพิ่มและคอมมิตมันทำให้ฉันมีข้อผิดพลาดต่อไปนี้:

svn: เซิร์ฟเวอร์ส่งค่าส่งคืนที่ไม่คาดคิด (ไม่อนุญาตให้ใช้วิธี 405) เพื่อตอบสนองต่อการร้องขอ MKCOL สำหรับ '/ svn / www /! svn / wrk / 9de0d765-2203-456c-af16-58e792ec7ac0 / trunk / htdocs / solutions / medical'

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

FYI ฉันไม่มีตัวเลือกในการเปลี่ยนชื่อโฟลเดอร์ระดับบนสุด


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

คำตอบ:


170

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


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

1
เป็นกรณีนี้เช่นกัน แต่ฉันต้องตรวจสอบโฟลเดอร์ในโฟลเดอร์แยกต่างหาก (หรือฉันเปลี่ยนชื่อเป็น "foo" และ svn ขึ้นและนำกลับมารวมถึงโฟลเดอร์ "ลบ" แม้ว่าฉันจะทำสำเร็จแล้วก็ตาม ของการลบ)
Kalle

1
@ ชาจิ: ฉันเข้าใจกรณีของคุณ แต่ฉันจะยังคงยืนยันได้อย่างไรเนื่องจากข้อผิดพลาดนี้ หรือมีต่อไปโปรดบอกฉันที ขอบคุณ
Huy Tower

1
ทำการอัพเดต SVN บนโฟลเดอร์จากนั้นลองคอมมิตอีกครั้ง
Alex R

นี่เป็นข้อผิดพลาดที่น่ารำคาญ ฉันตรวจสอบที่เก็บใหม่จาก Github และยืนยันโฟลเดอร์ใหม่ มันมักจะแสดงข้อผิดพลาดเดียวกัน ลองใช้วิธีแก้ปัญหาแล้ว แต่ไม่ได้ผล
emeraldhieu

56

วิธีที่เร็วที่สุดสำหรับฉันในการแก้ไขคือการทำซ้ำโฟลเดอร์ที่ได้รับผลกระทบและยืนยันด้วยชื่ออื่น แล้วsvn mv duplicateFolder originalFolder. ค่อนข้างง่าย

ดังนั้นใช้ folder1 และสร้าง folder1Copy:

svn delete folder1
svn add folder1Copy

ยอมรับและอัปเดต:

svn mv folder1Copy/ folder1/

ยอมรับอีกครั้งและได้รับการแก้ไข


6
วิธีนี้ใช้งานได้ดีสำหรับฉันและง่ายกว่าการจัดการกับสำเนาที่ใช้งานครั้งที่สองมาก
จัสติน

หวังว่าcommit & updateจะไม่ใช่บรรทัดคำสั่งตามตัวอักษร ... ใน Unix ที่จะพยายามทำทั้งสองอย่างควบคู่กัน
LarsH

1
คุณชายที่ยอดเยี่ยมถ้าคุณมาที่ซันนีเวลแล้วพบว่าฉันจะซื้อกาแฟให้คุณ
Michael Voznesensky

10

ของฉัน "หายไป" libraries/fofเป็นโฟลเดอร์

ถ้าฉันลบมันแล้วรันการอัปเดตมันจะไม่แสดงขึ้นมา

cd libaries
svn up

(ไม่มีอะไรเกิดขึ้น).

แต่อัปเดตด้วยชื่อจริง:

svn update fof

ทำเคล็ดลับและอัปเดตแล้ว ดังนั้นฉันจึงระเบิดสำเนาการทำงานของฉัน (เก็บถาวรด้วย tar ด้วยตนเอง) และแนะนำ ทางออกที่ง่ายที่สุด


เห็นด้วยนี่เป็นวิธีที่ง่ายที่สุด เพียงแค่ทำ "svn up [โฟลเดอร์]" แทน "svn up"
Dimitris

วิธีนี้เป็นวิธีที่ใช้ได้ผลสำหรับฉัน ขอบคุณ.
Miguel Rentes

4

ฉันเพิ่งแก้ไขสิ่งนี้ในที่เก็บของฉันเอง ฉันใช้ TortoiseSVN บน Windows ดังนั้นฉันไม่แน่ใจว่าคำสั่งนี้แปลเป็นอะไรในบรรทัดคำสั่ง แต่นี่คือสิ่งที่ฉันทำ:

มีการเรียกโฟลเดอร์ที่มีปัญหาlibและเป็นเพราะมีการเพิ่ม

  • ก่อนอื่นฉันยกเลิกการเพิ่มเพื่อให้ SVN ไม่ได้ให้ความสนใจกับมันอีกต่อไป
  • จากนั้นฉันก็เปลี่ยนชื่อมัน (เป็นlibsไม่ใช่เรื่องนั้น) โดยใช้เมนูบริบทของ Windows เพิ่มและยืนยันได้สำเร็จ
  • ในที่สุดฉันก็เปลี่ยนชื่อกลับไปlibใช้เมนูบริบทของ TortoiseSVN (นี่อาจสำคัญ) และตกลงอีกครั้ง

3

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

สถานการณ์:

  1. ก่อนที่ฉันจะยอมรับรหัสการแก้ไข: 100
  2. (คนอื่นยอมรับรหัส ... แก้ไขเพิ่มเป็น 199)
  3. ฉัน (ลืมเรียกใช้ "svn up",) ยอมรับรหัสตอนนี้การแก้ไขของฉัน: 200
  4. ฉันเรียกใช้ "svn up"

เกิดข้อผิดพลาด

สารละลาย:

  1. $ mv current_copy copy_back # เปลี่ยนชื่อสำเนารหัสปัจจุบัน
  2. $ svn checkout current_copy # ลองดูอีกครั้ง
  3. $ cp copy_back / current_copy # เรียกคืนการแก้ไขของคุณ

3

ฉันมีปัญหาที่คล้ายกัน ฉันจบลงด้วยการไล่มันออกจากวงโคจรและสูญเสียประวัติ SVN ของฉันไปในกระบวนการนี้ แต่อย่างน้อยฉันก็ทำให้ข้อผิดพลาดนั้นหายไป

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

cp -rp target ~/other/location/target-20111108
svn rm target --force
cp -rp ~/other/location/target-20111108 target-other-name
cd target-other-name
find . -name .svn -print | xargs rm -rf
cd ..
svn add target-other-name
svn ci -m "Re-re-re-re-re-re-re-re-re-re import target"
svn mv target-other-name target
svn ci -m "Re-re-re-re-re-re-re-re-re-re import target"

เป็นวิธีเดียวที่จะแน่ใจได้
TomDestry

1

หากคุณใช้code.google.comโฮสต์ที่เก็บ Subversion ของคุณ

คุณรู้ด้านล่างใช่มั้ย?

If you plan to make changes, use this command to check out the code as yourself using HTTPS:

# Project members authenticate over HTTPS to allow committing changes.
svn checkout https://.../svn/trunk/ user-...

When prompted, enter your generated googlecode.com password.
Use this command to anonymously check out the latest project source code:

# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://.../svn/trunk/ ...-read-only

ข้อผิดพลาดที่คุณระบุว่าคุณกำลังใช้Non-members may check out a read-only working copy anonymously over HTTPสถานะ ดังนั้นคุณยังไม่สามารถกระทำหรือทำอะไรได้เลย

คุณต้องใช้Project members authenticate over HTTPS to allow committing changesสิ่ง

ตอนนี้จะเรียบร้อยดี


0

ฉันพบปัญหาเดียวกันและสามารถแก้ไขได้โดย:

  1. คัดลอกโฟลเดอร์ไปที่อื่น
  2. ลบ. svn จากโฟลเดอร์ที่คัดลอก
  3. คลิกขวาที่โฟลเดอร์เดิมแล้วเลือก 'SVN Checkout'
  4. หากคุณไม่พบ (3) แสดงว่ากรณีของคุณแตกต่างจากของฉัน
  5. ดูว่าไดเร็กทอรีบน REPO-BROWSER ถูกต้องหรือไม่ สำหรับกรณีของฉันนี่คือสาเหตุ
  6. เช็คเอาท์
  7. เรียกคืนไฟล์จากโฟลเดอร์ที่คัดลอกไปยังไดเร็กทอรีดั้งเดิม
  8. ผูกมัด

0

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


0

ไดเร็กทอรีที่เพิ่มในปัจจุบันถูกคอมมิตแล้วในที่เก็บ ดังนั้นลบไดเร็กทอรีในที่เก็บและคอมมิตไดเร็กทอรีเดียวกันอีกครั้ง


0

ฉันได้รับข้อผิดพลาดนี้เนื่องจากฉันแทนที่ที่อยู่ URL ด้วยที่อยู่ใหม่ที่ลงท้ายด้วย "/" ฉันหมายถึงบันทึกในฐานข้อมูลwc.dbในโฟลเดอร์. svnในตาราง REPOSITORY

เมื่อฉันลบเครื่องหมาย: "/" ข้อผิดพลาดก็หายไป

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