สัญลักษณ์สถานะการโค่นล้ม“ ~” หมายถึงอะไร?


110

ฉันได้รับสัญลักษณ์ตัวหนอนเมื่อฉันทำsvn statusไฟล์.

นี่คือผลลัพธ์ของโครงการหลังจากแก้ไขใน XCode

svn status
M      build/Currency_Converter.build/Currency_Converter.pbxindex/imports.pbxbtree
M      build/Currency_Converter.build/Currency_Converter.pbxindex/pbxindex.header
M      build/Currency_Converter.build/Currency_Converter.pbxindex/symbols0.pbxsymbols
~      build/Currency_Converter.build/Currency_Converter.pbxindex/strings.pbxstrings
M      main.m
//more changed files

มีความคิดว่าหมายความว่าอย่างไร? ไม่พบใน google หรือแผ่นโกง svn ใด ๆ

ที่น่าสนใจคือฉันแก้ไขเฉพาะ main.m แต่มีไฟล์ที่แก้ไขมากมาย Dunno ทำไมถึงเป็นเช่นนั้น ใครมีเคล็ดลับในการทำงานกับ SVN และ XCode บ้าง? ฉันควรวางไฟล์ต้นฉบับภายใต้การควบคุมเวอร์ชันเท่านั้นหรือไม่

แก้ไข: - เกิดจากไฟล์ที่อยู่ภายใต้การควบคุมเวอร์ชันแล้วถูกแทนที่ด้วยไฟล์ประเภทอื่น ในกรณีนี้ strings.pbxstrings เคยเป็นไฟล์และตอนนี้กลายเป็นไดเร็กทอรี คุณธรรมของเรื่องราวคืออย่าใส่โฟลเดอร์บิลด์ของคุณไว้ในการควบคุมเวอร์ชัน


อืมฉันไม่แน่ใจว่ามีวิธี "แก้ไข" หรือไม่ซึ่งต่างจากการเพิ่มเข้าไปใหม่ คุณอาจต้องการโพสต์คำถามอื่นเพื่อถามว่ามีวิธีที่ดีในการแก้ไขสถานะนี้หรือไม่คุณจะได้รับความสนใจมากขึ้น (เนื่องจากคำถามปัจจุบันได้รับคำตอบแล้ว)
Chad Birch

คำตอบ:


88

SVN หนังสือพูดว่า:

รายการถูกกำหนดเวอร์ชันเป็นอ็อบเจ็กต์ประเภทหนึ่ง (ไฟล์ไดเร็กทอรีลิงก์) แต่ถูกแทนที่ด้วยอ็อบเจ็กต์ประเภทอื่น

บางทีมันอาจเป็นไฟล์เดียว แต่คุณเปลี่ยนเป็นไดเร็กทอรีหรืออะไรบางอย่างตามบรรทัดเหล่านั้น?


1
ดูเหมือนว่าคุณจะพูดถูก ตอนนี้เป็นไดเร็กทอรีที่ไม่มีไฟล์. svn มีความคิดเกี่ยวกับวิธีแก้ไขอย่างไร ฉันจำเป็นต้องลบมันจากการโค่นล้มและเพิ่มอีกครั้งหรือไม่?
jergason

มีโอกาสใดบ้างที่คุณจะพบวิธีแก้ไขปัญหานี้
Phill Pafford

48
ทางออกที่ดีที่สุดคือเปลี่ยนชื่อวัตถุใหม่ (ในกรณีของคุณคือไดเร็กทอรี) "svn ลบ" วัตถุออกจากที่เก็บซึ่งเป็นสาเหตุของการชนกัน (อาจเป็นไฟล์ที่คุณลบไปแล้ว) Commit จากนั้นเปลี่ยนชื่อวัตถุใหม่กลับและ "svn add" ไปยังที่เก็บ กระทำอีกครั้ง คุณจะมีลำดับของการแก้ไข 3 ครั้งที่มีวัตถุเก่าอยู่ถูกลบออกและมีการเพิ่มวัตถุใหม่ตามลำดับ
Brian Lacy

8
ในกรณีที่ใครก็ตามที่อ่านหัวข้อนี้มีปัญหาเดียวกันสิ่งนี้เกิดขึ้นกับฉันและสาเหตุของสถานะ '~' คือฉันมีลิงก์สัญลักษณ์บางอย่างในที่เก็บซึ่งถูกเขียนทับโดยไฟล์มาตรฐานโดยการดำเนินการ 'sed -i' . ฉันสร้างลิงค์สัญลักษณ์ขึ้นมาใหม่และ '~' ก็หายไป
jb

5
@JamieBullock มีสิ่งเดียวกันเกิดขึ้นกับฉันด้วยเหตุผลเดียวกันในวันนี้ ฉันลองใช้คำสั่งนี้ก่อนที่ฉันจะรู้ด้วยซ้ำว่าปัญหาคืออะไรsvn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertซึ่งสามารถกู้คืน symlink ทั้งหมดได้
พอล

34

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

ถ้าโฟลเดอร์คือ Test

  1. mv Test ทดสอบ 1
  2. svn ลบการทดสอบ
  3. mv Test1 ทดสอบ

5
สิ่งนี้ใช้ได้ผลสำหรับฉันตราบเท่าที่ฉันตัดสินใจระหว่างการลบและการเพิ่ม 1. mv Test Test1 2. svn remove Test 3. svn กระทำ -m "Removed Test" 4. mv Test1 Test 5. svn add Test 6. svn
comm

1
คำตอบของ @sancelot ดีกว่ามาก svn delete --keep-local fileNameคุณไม่จำเป็นต้องเปลี่ยนชื่อถ้าใช้
DawnSong

15

จาก

svn help status

ไอเท็มที่เป็นเวอร์ชัน '~' ถูกขัดขวางโดยไอเท็มบางชนิดที่แตกต่างกัน

ฉันเคยเห็นสิ่งนี้เฉพาะที่สิทธิ์ของไฟล์เปลี่ยนไปและ svn ไม่มีสิทธิ์ดำเนินการเข้าถึงฉันเชื่อมั่น

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


12

วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือการสำรองข้อมูลจากนั้นลบโฟลเดอร์หรือไฟล์ที่มีสถานะนี้แล้วทำการ "svn up": ไม่จำเป็นต้องเป็นโฟลเดอร์ที่ถูกแทนที่ด้วยไฟล์ แต่อาจเป็นเพียงแค่นั้นโฟลเดอร์. svn หายไปหรือเสียหาย .


11
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"

ไม่จำเป็นต้องเปลี่ยนชื่อ คุณให้คำตอบที่ดีที่สุด
DawnSong

ตอบดีที่สุด! วิธีนี้ช่วยแก้ปัญหาได้ ในกรณีของฉันมันเป็นซอฟต์ลิงก์ที่ผูกมัดเป็นไฟล์ปกติ

10

สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณลบโฟลเดอร์. svn ในโฟลเดอร์ (ตามตัวอย่างเมื่อคุณลบไดเร็กทอรีจากนั้นคุณสร้างไดเร็กทอรีเดิมอีกครั้ง) หรือเมื่อคุณแทนที่ไดเร็กทอรีด้วยลิงก์สัญลักษณ์หรือไฟล์ที่มีชื่อเดียวกัน .

สมมติว่าเป็นโฟลเดอร์ชื่อ a-folder คุณสามารถแก้ไขได้โดยใช้คำสั่งต่อไปนี้ในโฟลเดอร์หลัก:

$ find a-folder -type d -name '.svn' -print0 | xargs -0 rm -Rf
$ svn up --force .
svn: Directory 'logs/.svn' containing working copy admin area is missing
$ svn up --force .
E    a-folder
...
Updated to revision n.

จากนั้นก็เป็นเรื่องของการเพิ่ม / ลบ svn และยอมรับการเปลี่ยนแปลงอีกครั้ง


3

มีปัญหาคล้ายกัน SVN บ่นเกี่ยวกับการล็อค นี่คือสิ่งที่เราทำ:

  • สำรองไฟล์
  • ลบไดเร็กทอรีที่เป็นปัญหาด้วย rm -r (linux)
  • รันการล้างข้อมูล svnบนไดเร็กทอรี
  • รันsvn ขึ้น - บังคับบนไดเร็กทอรี

3

ฉันแค่อยากจะแบ่งปันว่านี่เป็นปัญหาที่พบบ่อยเมื่อติดตั้งส่วนขยายภายใน Joomla มีการติดตั้งส่วนขยายผ่าน CMS และเป็นของ apache โดยไม่มีการเขียนกลุ่ม โดยทั่วไปขั้นตอนต่อไปคือการเพิ่มไฟล์ลงใน SVN แต่ถ้าคุณไม่ sudo หรือเปลี่ยนไฟล์ perms SVN จะล้มเหลวเมื่อไม่สามารถเขียนไดเร็กทอรี. svn ได้ นี่คือวิธีง่ายๆ

mv foo foo-bak
svn up foo
svn revert foo

# just for good measure. Foo should not show up in the two following commands.
ls | grep foo
svn st | grep foo

mv foo-bak foo
svn add foo

2

อาจเป็นเรื่องของลิงก์สัญลักษณ์ภายใต้ Windows เมื่อคุณทำการเชื่อมโยงสัญลักษณ์ใน SVN แล้วตรวจสอบภายใต้ Windows ลิงก์จะเปลี่ยนเป็นไฟล์ปกติและจะรายงานเป็น ~


1
แล้วคุณจะแก้ไขปัญหานี้อย่างไร?

2

ฉันมักจะมีสิ่งนี้ในขณะที่อัปเกรดโมดูลภายใต้ (เช่น) Joomla!, Wordpress หรือ Drupal บางครั้งไดเร็กทอรี. svn จะถูกลบออกโดยกระบวนการอัพเกรด

# rename updated directory
mv foo foo.new

# restore the old directory
svn up foo

# merge / update the old directory with new items
# notice that the above command will preserve the obsolete files
# so you should do a diff -r in order to remove them
cp -r foo.new/* foo

# Add files commit, etc
svn add foo/*
svn delete foo/xx
svn commit -m "updated module"

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