Estado "S" en Subversion

80

En algún momento, todos los archivos de mi copia de trabajo se marcaron con el símbolo "S" como se muestra a continuación:

$ 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

Curiosamente, solo ocurre en esta copia de trabajo en particular: cuando realizo el pago del proyecto en un nuevo directorio, no muestra las marcas "S".

¿Cómo deshacerse de estos molestos símbolos "S"? Disminuye significativamente la claridad del estado del WC.

Actualización: cambio de vez en cuando usando la svn switchsintaxis estándar . Nunca causó que este símbolo "S" apareciera hasta hace poco. El comando utilizado para cambiar fue:

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

¿Hay alguna forma de borrar la bandera "S"?

Michał Rudnicki
fuente
7
Estado S significa "conmutado", según svn h st. Sin embargo, lo que eso significa ...
yo_y el
1
@me_and: Cambio de copias de trabajo: svnbook.red-bean.com/en/1.0/ch04s05.html
Chris J
1
Solo para que conste, ya que es el problema más cercano que he encontrado en línea, estábamos teniendo un problema con la bandera S al intentar fusionar una rama en el tronco. Tenía que ver con el hecho de que estábamos usando externos. Se eliminaron en la rama pero el tronco siguió haciendo referencia a ellos, por lo que no se fusionaron. La solución fue quitar las externas que quitamos en la rama en tronco, cometer tronco y reintegrar nuevamente. Espero que ayude a alguien en el camino :) ¡Salud!
Darío Javier Cravero

Respuestas:

76

Significa que los archivos son de una ubicación diferente en su repositorio de subversion que el directorio que los contiene. La solución es cambiar toda la copia de trabajo a la misma ubicación. Consulte las dos secciones del libro de Subversion para obtener detalles sobre cómo invocar el comando.

Andrew Aylett
fuente
35
También he visto que esto sucede cuando un comando "svn switch" es interrumpido por un conflicto de algún tipo, como la rama que está cambiando para tener una versión de repositorio de un archivo local que no está comprometido. Salir de svn para arreglar eso deja la copia de trabajo general incompleta. Resolver el problema y luego volver a ejecutar el comando de cambio funciona para mí.
Michael H.
4
Tuve esto después de un error - E210002: La conexión de red se cerró inesperadamente. Volver a ejecutar el comando de cambio pareció solucionar el problema y el estado "S" desapareció.
Kevin Sadler
1
La interrupción durante el interruptor svn IS está causando esto. Sea consciente.
SandorRacz
2
Kevin Sadler en realidad ofrece la solución, no solo describe el problema. +1
ahnbizcad
11

Si llama a 'svn info' en el directorio mismo y en (uno de) los archivos dentro, obtendrá dos URL diferentes.

Obtiene el estado 'S' si la URL de un archivo / directorio no coincide con la URL del padre seguida del nombre del archivo.

¿Puede publicar la URL del principal y uno de los nodos secundarios? (anonimizar la URL cuando corresponda)

Bert Huijben
fuente
Aunque no es una respuesta, esta 'respuesta' es muy útil para dar algunas pistas sobre lo que está sucediendo.
FlipMcF
esta no es una respuesta.
ahnbizcad
8

Tuve el estado ' S ' al cambiar de troncal (r100) a alguna rama (r50). Me sale el error:

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

Todos los subdirectorios de web / estaban marcados con ' S '.

La causa: había eliminado .htaccess a svn: ignórelo (r100), luego lo había creado nuevamente (sin versión e ignorado). La rama (r50) todavía tenía web / .htaccess en el repositorio.

La solución :

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

Todo está bien.

sglessard
fuente
Tuve un error similar, pero eliminé mi versión ofensiva de "web / .htaccess" (porque para mí eran varios directorios) y actualicé svn, luego cambié de tronco a una etiqueta específica de regreso a tronco (la etiqueta específica era en realidad una copia del maletero ...) y las banderas errneas 'S' desaparecieron.
Kasapo
6

Tuve este problema con un directorio que comprometí con éxito con SVN. La solución para mí fue borrarlo localmente y luego actualizarlo. No pude ver ninguna diferencia, pero el archivo .svn se corrigió por cualquier motivo (no más S).

Eli
fuente
Esto sucedió en un svn externo después de actualizar a una rama más nueva. Eliminar todo el externo manualmente y luego ejecutar svn update lo solucionó. +1!
Stephen Fuhry
5

Esto suele deberse a una interrupción al cambiar de rama.

Cambie a una rama diferente y luego vuelva a la rama que realmente desea.

svn switch some_other_branch_url

svn switch desired_branch_url

ahnbizcad
fuente
4

Solo un comentario: obtuve el mismo símbolo S cuando verifiqué un directorio eliminado de la misma ubicación en el repositorio pero usando una URL diferente , es decir, usando protocolos distintos para pagar como 'svn checkout svn + ssh: // usuario @ scm .gforge ... 'contra' svn checkout --username user https: //scm.gforge .... '. Lo resolví revisándolo nuevamente usando la misma URL que usé para el primer pago.

André Lage
fuente
Re-checkouting con el mismo URI lo resolvió. Gracias.
septiembre
4

En caso de que alguien llegue tarde en busca de la respuesta (que se indica correctamente arriba), creo que una CAUSA probable de esta situación es un 'interruptor svn' en un directorio principal que falla (como en el caso de un archivo local no confirmado con el mismo nombre y sin la opción --force), dejando todos los archivos posteriores a la falla 'sin cambiar'.

Es por eso que (asumiendo que el problema original se corrige más tarde) un 'cambio svn' posterior nuevamente en el mismo directorio principal cambiará los archivos restantes no cambiados a una nueva ruta de repositorio.

John Kennedy
fuente
3

Esto significa que ha cambiado de una copia de trabajo a otra, por ejemplo, ha revisado una copia de trabajo y luego la ha cambiado para compararla con una rama de código. Eche un vistazo al libro SVN para obtener detalles sobre cómo deshacer esto.

yo y
fuente
1
Tenga en cuenta que el enlace es a una versión desactualizada del libro SVN. Pruébelo aquí: svnbook.red-bean.com/en/1.5
Andrew Aylett
Buen lugar. Google me vuelve a fallar.
yo_y
3

Hay otra forma en que se puede lograr este estado, lo que con suerte le ahorrará a alguien algo de tiempo rastrearlo.

Desempaqueté una biblioteca externa en mi raíz SVN y resulta que el autor de terceros ha incluido accidentalmente su propia carpeta .svn en una de sus carpetas. Esto, por supuesto, sobrescribe nuestra propia carpeta de subversión correcta y tiene el mismo efecto que se describe en otra parte de esta página: una carpeta parece haber cambiado inesperadamente a otra rama.

halfer
fuente
1
Sí, acabo de tener esto. Había copiado un directorio de iconos de un proyecto a otro sin borrar los .svndirectorios. Exporte un directorio limpio para usar, o revise y elimine los directorios .svn después de copiar, y como era de svn addesperar.
Eric
1

"El artículo está cambiado".

Si usó "svn switch" en su copia de trabajo, ¿eso podría explicarlo?

stiank81
fuente
He estado intentando usar el comando de cambio ahora, pero nunca obtengo la 'S "en el estado ... ¿Cambiaste? ¿Y lo hiciste de alguna manera no convencional?
stiank81
0

Para mí, esto sucede cuando se interrumpe el comando "svn switch" y para resolverlo con TortoriseSVN, hago clic derecho en el archivo y selecciono cambiar de nuevo a padre

Alireza Fattahi
fuente
0

Una solución simple para deshacerse de la 'S' cuando emite

svn status

es simplemente ir al directorio que está marcado con 'S' y eliminar el directorio .svn oculto:

rm -rf .svn

Luego, las fuentes aparecen marcadas con '?' y podrías agregarlos fácilmente:

svn agregar ruta / a / recurso

Torsten Barthel
fuente
En mi caso, la 'S' apareció junto a los recursos que agregué desde otro repositorio en el mismo servidor, por lo que la solución que acabo de describir fue obvia.
Torsten Barthel
0

En mi caso, se eliminaron dos subdirectorios de la rama en el tronco. Cambié del tronco a la rama del directorio de nivel superior, y luego volví al tronco y experimenté el problema con esos subdirectorios que ahora están en estado S.

Usé la respuesta de @ahnbizcad como guía. Desde el directorio principal (que se encuentra en el directorio de nivel superior) de los subdirectorios:

svn sw <branch_url>

svn sw <trunk_url>

Soumya Kanti
fuente
-6

Le sugiero que lea su ayuda oficial, intente:

svn st --help

o

svn st --help | grep S

'S' the item has a Switched URL relative to the parent
Siwei Shen 申思维
fuente
4
RTFM no responde la pregunta sobre cómo deshacerse de ese estado.
Madoc