Статус "S" у Subversion


80

У якийсь момент усі файли в моїй робочій копії були позначені символом "S", як показано нижче:

$ svn st
M    S   AclController.php
     S   InstallationController.php
     S   CustomerController.php
     S   RedirController.php
     S   IndexController.php
     S   LoginController.php
     S   OrderController.php
     S   ProductController.php
     S   SelfInstallController.php
     S   SelfcareController.php

Цікаво, що це відбувається лише в цій конкретній робочій копії - коли я викладаю проект в новий каталог, він не відображає позначки "S".

Як позбутися цієї настирливої ​​символіки "S"? Це суттєво зменшує ясність стану туалету.

Оновлення: Я переключаюся час від часу, використовуючи стандартний svn switchсинтаксис. Це ніколи не викликало появи цього символу "S" до недавнього часу. Для перемикання використовувалася команда:

svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .

Чи можу я якось очистити прапор "S"?


7
Статус S означає "переключено", відповідно до svn h st. Що це означає, однак ...
me_і

1
@me_and: Перемикання робочих копій: svnbook.red-bean.com/en/1.0/ch04s05.html
Кріс Дж,

1
Тільки для запису - оскільки це найближча проблема, яку я знайшов в Інтернеті, у нас виникла проблема із прапором S під час спроби об’єднати гілку в магістраль. Це було пов’язано з тим, що ми використовували зовнішні. Вони були видалені на гілці, але стовбур продовжував посилатися на них, таким чином не вдаючись об'єднатися. Рішенням було видалення зовнішніх елементів, які ми видалили на гілці в стовбурі, фіксація стовбура та повторна інтеграція. Сподіваюся, це допоможе комусь на цьому шляху :) Вітаємо!
Даріо Хав'єр Краверо,

Відповіді:


76

Це означає, що файли знаходяться в іншому місці вашого сховища диверсій, ніж у каталозі, що їх містить. Рішення полягає в тому, щоб перекласти всю робочу копію в одне і те ж місце. Детальніше про те, як викликати команду, дивіться у двох розділах книги диверсій.


35
Я бачив, як це трапляється також, коли команда "svn switch" переривається якимось конфліктом, наприклад, гілкою, яку ви перемикаєте, має версію сховища локального файлу, яка не фіксується. Вискакуючи з svn для виправлення, що робить загальну робочу копію неповністю переключеною. Вирішення проблеми, а потім повторне виконання команди switch працює для мене.
Michael H.

4
У мене виникла така помилка - E210002: Мережеве з’єднання несподівано закрилося. Повторне виконання команди switch, здавалося, вирішило проблему, і статус "S" зник.
Кевін Садлер,

1
Причиною цього є переривання під час перемикача svn. Бережись.
SandorRacz

2
Кевін Садлер насправді пропонує рішення, а не просто описує проблему. +1
ahnbizcad

11

Якщо ви зателефонуєте до "svn info" у самому каталозі та на (одному з) файлів всередині, ви отримаєте дві різні URL-адреси.

Ви отримуєте статус "S", якщо URL-адреса файлу / каталогу не відповідає URL-адресі батьківського з наступним іменем файлу.

Чи можете ви розмістити URL-адресу батьківського та одного з дочірніх вузлів? (анонімність URL-адреси, де це доречно)


Хоча це не відповідь, ця "відповідь" дуже корисна, щоб дати деякі підказки щодо того, що відбувається.
FlipMcF

це не відповідь.
ahnbizcad

8

Я мав статус ` ` S '' під час перемикання з магістралі (r100) на якусь гілку (r50). Я отримав помилку:

svn: Failed to add file 'web/.htaccess': an unversioned file of the same name already exists

Усі підкаталоги Інтернету були позначені позначкою " S ".

Причина: я видалив .htaccess у svn: ігнорувати його (r100), а потім створив його знову (без версії та ігнорування). Гілка (r50) все ще мала web / .htaccess у репо.

Рішення :

mv web/.htaccess ../../
svn switch back to trunk
svn switch to branch again

Все добре.


У мене була подібна помилка, але я видалив свою образливу версію "web / .htaccess" (тому що для мене це було кілька каталогів) і оновив svn, а потім переключився з магістралі на певний тег назад на магістраль (конкретний тег насправді був копія багажника ...) та помилкові прапорці "S" зникли.
Касапо

6

У мене виникла проблема з каталогом, який я успішно призначив для SVN. Рішенням для мене було видалити його локально, а потім оновити. Я не міг побачити жодних відмінностей, але файл .svn був виправлений з будь-якої причини (більше немає S).


У мене це сталося у зовнішньому звіті svn після оновлення до нової гілки. Видалення всього зовнішнього зовнішнього вручну, а потім запуск оновлення svn це виправило. +1!
Stephen Fuhry,

5

Зазвичай це викликано перериванням при перемиканні гілок.

Перейдіть до іншої гілки, а потім поверніться до тієї гілки, яку ви дійсно хочете.

svn switch some_other_branch_url

svn switch desired_branch_url


4

Просто зауваження: Я отримав той самий символ S, коли перевіряв видалений каталог з того самого місця у сховищі, але використовуючи іншу URL-адресу , тобто використовуючи різні протоколи для оформлення замовлення, наприклад, 'svn checkout svn + ssh: // user @ scm .gforge ... 'проти' svn checkout --username user https: //scm.gforge .... '. Я вирішив це, перевіривши ще раз, використовуючи ту саму URL-адресу, яку використовував для першого замовлення.


Повторне замовлення за тим же URI вирішило це. Дякую.
sepehr

4

У випадку, якщо хтось запізнюється в пошуках відповіді (яка правильно зазначена вище), я вважаю, що ймовірною ПРИЧИНОЮ цієї ситуації є `` svn-перемикач '' у батьківському каталозі, який не працює (як у випадку з локальним незакріпленим файлом з те саме ім'я та жодної опції --force), залишаючи всі файли після відмови "непереключеними".

Ось чому (якщо припустити, що вихідну проблему пізніше буде виправлено) наступний `` svn-перемикач '' знову в тому ж батьківському каталозі дійсно перемкне решту непереключених файлів на новий шлях репо.


3

Це означає, що ви перейшли з однієї робочої копії на іншу, наприклад, ви перевірили робочу копію, а потім поміняли її місцями для порівняння з гілкою коду. Подивіться на книгу SVN, щоб дізнатись, як це скасувати.


1
Зверніть увагу, що посилання на застарілу версію книги SVN. Спробуйте тут: svnbook.red-bean.com/en/1.5
Ендрю Айлетт

Гарне місце. Google знову не вдається.
me_and

3

Існує ще один спосіб досягнення цього статусу - який, сподіваємось, заощадить комусь час, відстежуючи його.

Я розпакував зовнішню бібліотеку у своєму корінь SVN, і виявляється, сторонній автор випадково включив власну папку .svn в одну зі своїх папок. Звичайно, це перезаписує нашу власну, правильну папку для підриву і має такий самий ефект, як описано в інших місцях на цій сторінці - здається, папка несподівано переключилася на іншу гілку.


1
Так, у мене це просто було. Я скопіював каталог значків з одного проекту в інший, не видаляючи .svnкаталоги. Або експортуйте чистий каталог для використання, або перейдіть і видаліть каталоги .svn після копіювання, і це буде svn addпередбачувано.
Ерік

1

"Елемент змінено."

Якщо ви використовували "svn switch" на своїй робочій копії, що це може пояснити?


Я намагався використати команду switch зараз, але я ніколи не отримую "S" у статусі .. Ви перемикалися? І чи робили це якимось не основним способом?
stiank81

0

Для мене це трапляється, коли команда "svn switch" перервана, і щоб вирішити її за допомогою TortoriseSVN, я клацну правою кнопкою миші на файлі та вибрав перемикач назад на батьківський


0

Просте рішення, як позбутися від „S” при видачі

svn status

просто перейти до папки, позначеної символом "S", і видалити приховану директорію .svn:

rm -rf .svn

Згодом джерела з'являються з позначкою "?" і ви можете легко додати їх у свіжому вигляді:

svn додати шлях / до / ресурсу


У моєму випадку "S" з'явилося поруч із ресурсами, які я додав з іншого репозиторію на тому ж сервері, тому рішення, яке я щойно описав вище, було очевидним.
Торстен Барель,

0

У моєму випадку два підкаталоги у гілці були видалені в магістралі. Я перейшов з магістральної гілки з каталогу верхнього рівня, а потім повернувся до магістральної і відчув проблему з цими підкаталогами, які зараз у стані S.

Я використав відповідь @ahnbizcad як орієнтир. З батьківського каталогу (який сам знаходиться в каталозі верхнього рівня) підкаталогів:

svn sw <branch_url>

svn sw <trunk_url>


-6

Пропоную вам прочитати його офіційну довідку, спробуйте:

svn st --help

або

svn st --help | grep S

'S' the item has a Switched URL relative to the parent

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