¿Qué significa el símbolo de estado de Subversion “~”?


110

Recibo un símbolo de tilde cuando hago un svn status.

Aquí está el resultado del proyecto después de editarlo en 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

¿Alguna idea de lo que eso significa? Parece que no puedo encontrarlo en Google o en ninguna de las hojas de trucos de svn.

Curiosamente, solo edité main.m, pero hay muchos archivos modificados. No sé por qué sería eso. ¿Alguien tiene algún consejo para trabajar con SVN y XCode? ¿Debería poner mis archivos fuente bajo control de versiones?

Editar: - causado por un archivo que ya estaba bajo control de versión y que fue reemplazado por un archivo de otro tipo. En este caso, strings.pbxstrings solía ser un archivo y ahora se convirtió en un directorio. La moraleja de la historia es que no ponga su carpeta de compilación en el control de versiones.


Hmm, no estoy seguro de si hay una manera de "arreglarlo", en lugar de simplemente volver a agregarlo. Es posible que desee publicar otra pregunta preguntando si hay una buena manera de resolver este estado, obtendrá más atención (dado que la pregunta actual ya está respondida).
Chad Birch

Respuestas:


88

El libro SVN dice:

El elemento está versionado como un tipo de objeto (archivo, directorio, enlace), pero ha sido reemplazado por otro tipo de objeto.

Entonces, ¿quizás era originalmente un solo archivo, pero lo cambió a un directorio, o algo por el estilo?


1
Parece que tienes razón. Ahora es un directorio sin un archivo .svn. ¿Alguna idea de cómo solucionarlo? ¿Necesito eliminarlo de Subversion y agregarlo nuevamente?
jergason

¿Alguna posibilidad de que encontraste una manera de solucionar este problema?
Phill Pafford

48
La mejor solución es cambiar el nombre del nuevo objeto (en su caso, el directorio); "svn elimina" el objeto del repositorio que está causando la colisión (probablemente un archivo que has eliminado), confirma, luego cambia el nombre del nuevo objeto y "svn agrega" al repositorio. Comprometerse de nuevo. Tendrá una secuencia de 3 revisiones en las que existía el objeto anterior, se eliminó y se agregó el nuevo objeto, respectivamente.
Brian Lacy

8
En caso de que alguien que lea este hilo tenga el mismo problema: esto me pasó a mí y el motivo del estado '~' fue que tenía algunos enlaces simbólicos en el repositorio, que habían sido sobrescritos por archivos estándar mediante una operación 'sed -i' . Recreé los enlaces simbólicos y el '~' desapareció.
JB

5
@JamieBullock Me pasó lo mismo por la misma razón hoy. Probé este comando antes de saber cuál era el problema: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertque podía restaurar todos los enlaces simbólicos.
Paul

34

Esto es lo que hice:

Si la carpeta es Prueba

  1. mv Test Test1
  2. svn eliminar prueba
  3. Prueba mv Test1

5
Esto funcionó para mí siempre que me comprometí entre eliminar y agregar. 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
La respuesta de @sancelot es mucho mejor; no es necesario cambiar el nombre si se usa svn delete --keep-local fileName.
DawnSong

15

De

svn help status

Elemento versionado '~' obstruido por algún elemento de un tipo diferente

Solo he visto esto donde los permisos de archivo habían cambiado y svn no tenía acceso de ejecución, creo.

Espero que esto ayude.


12

La forma más fácil de solucionar esto es hacer una copia de seguridad, luego eliminar la carpeta o el archivo que tiene este estado y luego hacer "svn up": no es necesariamente una carpeta reemplazada por un archivo, podría ser solo que la carpeta .svn falta o está dañada .


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

No es necesario cambiar el nombre. Diste la mejor respuesta.
DawnSong

¡La mejor respuesta! Esto soluciona el problema. En mi caso, fue un enlace suave comprometido como un archivo normal.

10

Esto puede suceder cuando elimina la carpeta .svn en una carpeta (por ejemplo, cuando elimina un directorio y luego crea el mismo directorio nuevamente), o cuando reemplaza un directorio con un enlace simbólico o un archivo con el mismo nombre .

Suponiendo que se trata de una carpeta llamada a-folder, puede solucionar esto emitiendo los siguientes comandos en la carpeta principal:

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

Y luego es cuestión de svn agregar / eliminar y confirmar los cambios nuevamente


3

Tuvo un problema similar, SVN se quejaba de un candado. Esto es lo que hicimos:

  • Respaldado los archivos
  • Se eliminó el directorio en cuestión con rm -r (linux)
  • Ran SVN de limpieza en el directorio
  • Ejecutó svn up --force en el directorio

3

Solo quiero compartir que este es un problema que se encuentra con frecuencia al instalar extensiones dentro de Joomla. Las extensiones se instalan a través del CMS y son propiedad de apache sin escritura de grupo. Generalmente, el siguiente paso es agregar los archivos al SVN, pero si no sudo o cambia los permisos del archivo, entonces el SVN falla cuando no puede escribir el directorio .svn. Esta es la solución fácil.

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

También puede ser cuestión de enlaces simbólicos en Windows. Cuando ingresa un enlace simbólico en SVN y luego lo verifica en Windows, los enlaces se cambian a archivos normales y esto también se informa como ~.


1
¿Entonces cómo lo arreglas?

2

A menudo tenía esto al actualizar módulos en (por ejemplo) Joomla !, Wordpress o Drupal. A veces, el proceso de actualización elimina el directorio .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"

0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.