Apa arti simbol status Subversion “~”?


110

Saya mendapatkan simbol tilde saat melakukan svn status.

Berikut adalah hasil dari proyek setelah diedit di 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

Tahu apa artinya? Tidak dapat menemukannya di google atau di salah satu lembar contekan svn.

Menariknya, saya hanya mengedit main.m, tetapi ada banyak file yang dimodifikasi. Tidak tahu mengapa itu terjadi. Adakah yang punya tip untuk bekerja dengan SVN dan XCode? Haruskah saya hanya meletakkan file sumber saya di bawah kontrol versi?

Sunting: - disebabkan oleh file yang sudah di bawah kontrol versi diganti dengan file jenis lain. Dalam hal ini, strings.pbxstrings dulunya adalah sebuah file dan sekarang menjadi sebuah direktori. Moral dari cerita ini adalah jangan meletakkan folder build Anda ke dalam kontrol versi.


Hmm, saya tidak yakin apakah ada cara untuk "memperbaikinya", bukan hanya menambahkan kembali. Anda mungkin ingin memposting pertanyaan lain yang menanyakan apakah ada cara yang baik untuk menyelesaikan status ini, Anda akan mendapatkan lebih banyak perhatian (karena pertanyaan saat ini sudah terjawab).
Chad Birch

Jawaban:


88

The SVN Buku mengatakan:

Item diversi sebagai satu jenis objek (file, direktori, link), tetapi telah diganti dengan jenis objek yang berbeda.

Jadi mungkin awalnya file tunggal, tetapi Anda mengubahnya menjadi direktori, atau sesuatu seperti itu?


1
Sepertinya Anda benar. Ini adalah direktori sekarang tanpa file .svn. Ada ide tentang cara memperbaikinya? Apakah saya perlu menghapusnya dari subversi dan menambahkannya lagi?
jergason

ada kemungkinan Anda menemukan cara untuk memperbaikinya?
Phill Pafford

48
Solusi terbaik adalah mengganti nama objek baru (dalam kasus Anda, direktori); "svn hapus" objek dari repositori yang menyebabkan benturan (mungkin file yang telah Anda hapus), Komit, lalu ganti nama objek baru kembali dan "svn tambahkan" ke repositori. Berkomitmen lagi. Anda akan memiliki urutan 3 revisi di mana objek lama ada, telah dihapus, dan objek baru ditambahkan.
Brian Lacy

8
Jika ada yang membaca utas ini memiliki masalah yang sama: ini terjadi pada saya dan alasan status '~' adalah karena saya memiliki beberapa tautan simbolis di repositori, yang telah ditimpa oleh file standar oleh operasi 'sed -i' . Saya membuat ulang tautan simbolis dan '~' hilang.
jb

5
@JamieBullock Apakah hal yang sama terjadi pada saya untuk alasan yang sama hari ini. Saya mencoba perintah ini bahkan sebelum saya tahu apa masalahnya: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertyang dapat memulihkan semua symlink.
Paul

34

Inilah yang saya lakukan:

Jika foldernya adalah Test

  1. mv Test Test1
  2. svn hapus Test
  3. mv Test1 Test

5
Ini berhasil untuk saya selama saya berkomitmen di antara menghapus dan menambahkan. 1. mv Test Test1 2. svn remove Test 3. svn commit -m "Removed Test" 4. mv Test1 Test 5. svn add Test 6. svn commit -m "Added Test"
Brandon Brodjeski

1
Jawaban dari @sancelot jauh lebih baik; Anda tidak perlu mengganti nama jika menggunakan svn delete --keep-local fileName.
DawnSong

15

Dari

svn help status

Item berversi '~' terhalang oleh beberapa item dari jenis yang berbeda

Saya hanya melihat ini di mana izin file telah berubah dan svn tidak memiliki akses eksekusi di atasnya yang saya percaya.

Semoga ini membantu.


12

Cara termudah untuk memperbaikinya adalah dengan melakukan backup, kemudian menghapus folder atau file yang berstatus ini dan kemudian melakukan "svn up": ini belum tentu folder yang dipindahkan oleh file, mungkin hanya folder .svn yang hilang atau rusak .


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

Tidak perlu mengganti nama. Anda memberikan jawaban terbaik.
DawnSong

Jawaban Terbaik! Ini memperbaiki masalah. Dalam kasus saya, itu adalah tautan lunak yang berkomitmen sebagai file biasa.

10

Hal ini dapat terjadi saat Anda menghapus folder .svn dalam folder (dengan contoh saat Anda menghapus direktori, lalu Anda membuat direktori yang sama lagi), atau saat Anda mengganti direktori dengan tautan simbolis, atau file dengan nama yang sama .

Misalkan itu adalah folder bernama a-folder, Anda dapat memperbaikinya dengan mengeluarkan perintah berikut di folder induk:

$ 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.

Dan kemudian itu masalah svn menambahkan / menghapus dan melakukan perubahan lagi


3

Punya masalah serupa, SVN mengeluh tentang gembok. Inilah yang kami lakukan:

  • Mencadangkan file
  • Menghapus direktori yang dimaksud dengan rm -r (linux)
  • Ran svn pembersihan pada direktori
  • Jalankan svn up --force di direktori

3

Saya hanya ingin berbagi bahwa ini adalah masalah yang sering dihadapi ketika memasang ekstensi di dalam Joomla. Ekstensi diinstal melalui CMS dan dimiliki oleh apache tanpa penulisan grup. Umumnya langkah selanjutnya adalah menambahkan file ke SVN tetapi jika Anda tidak sudo atau mengubah perms file, maka SVN gagal ketika tidak dapat menulis direktori .svn. Inilah solusi mudahnya.

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

Mungkin juga masalah tautan simbolik di bawah Windows. Ketika Anda memasukkan tautan simbolis ke SVN dan kemudian memeriksanya di bawah Windows, tautan diubah menjadi file biasa dan ini juga dilaporkan sebagai ~.


1
Jadi, bagaimana Anda memperbaikinya?

2

Saya sering mengalami ini saat mengupgrade modul di bawah (mis.) Joomla !, Wordpress atau Drupal. Terkadang direktori .svn dihapus oleh proses peningkatan.

# 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"

0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.