Що означає символ статусу Subversion “~”?


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, але є багато модифікованих файлів. Данно, чому це було б. Хтось має поради щодо роботи зі SVN та XCode? Чи повинен я лише ставити свої вихідні файли під контроль версій?

Редагувати: - спричинено тим, що файл, який уже знаходився під контролем версій, був замінений на файл іншого типу. У цьому випадку strings.pbxstrings раніше був файлом, а тепер став каталогом. Мораль історії не вкладає папку збірки в контроль версій.


Хм, я не впевнений, чи є спосіб "виправити" це, а не просто повторне додавання. Ви можете залишити ще одне запитання з питанням, чи є хороший спосіб вирішити цей статус, ви отримаєте більше уваги (оскільки на це питання вже відповіли).
Береза ​​Чад

Відповіді:


88

СВН Книга каже:

Елемент розбивається на один вид об’єкта (файл, каталог, посилання), але його замінили об'єкти іншого типу.

Так, можливо, це був спочатку один файл, але ви змінили його в каталог, або щось у цьому рядку?


1
Схоже, ти маєш рацію. Зараз це каталог без файлу .svn. Будь-яка ідея, як це виправити? Чи потрібно видалити його з підривної і знову додати?
jergason

будь-який шанс ви знайшли спосіб це виправити?
Філ Паффорд

48
Найкраще рішення - перейменувати новий об’єкт (у вашому випадку каталог); "svn видалити" об'єкт із сховища, яке спричиняє зіткнення (можливо, файл, який ви видалили), "Коміт", потім перейменуйте новий об'єкт назад і "svn додайте" його у сховище. Зробіть ще раз. У вас буде послідовність із 3-х версій, де старий об’єкт існував, був видалений, а новий об’єкт доданий відповідно.
Брайан Лейсі

8
У випадку, якщо хтось, хто читає цю тему, має таку саму проблему: це сталося зі мною, і причиною статусу '~' було те, що у мене були деякі символьні посилання в сховищі, які були перезаписані стандартними файлами операцією 'sed -i' . Я відтворив символічні посилання і '~' пішов.
jb

5
@JamieBullock У мене з тієї ж причини трапилось те саме, що і сьогодні. Я спробував цю команду, перш ніж я навіть зрозумів, у чому проблема: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertяка змогла відновити всі посилання.
Пол,

34

Ось що я зробив:

Якщо папка - Тест

  1. mv тестовий тест1
  2. svn видалити Тест
  3. mv Test1 Тест

5
Це спрацьовувало для мене до тих пір, поки я робив між видаленням та додаванням. 1. mv test test1 2. svn Remove test 3. svn commit -m "Видалений тест" 4. mv Test1 Test 5. svn add Test 6. svn commit -m "Доданий тест"
Brandon Brodjeski

1
Відповідь @sancelot набагато краща; Вам не потрібно перейменовувати, якщо використовуєте svn delete --keep-local fileName.
Світанок

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-папка, ви можете виправити це, видавши наступні команди в батьківській папці:

$ 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 up --force в каталозі

3

Я просто хочу поділитися, що це часто зустрічається проблема під час встановлення розширень в Joomla. Розширення встановлюються через CMS і належать до апашшю без групового запису. Як правило, наступним кроком є ​​додавання файлів до SVN, але якщо ви не судоутворюєте або не змінюєте файлові 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"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.