svn - simbolicos - no se permiten enlaces fuertes para directorios
¿Qué sucede si agrego un enlace simbólico a la subversión? (7)
Cuando un enlace simbólico se envía a un repositorio de Subversion, Subversion recuerda que el archivo era de hecho un enlace simbólico, así como el objeto al que el enlace simbólico "apunta".
Cuando ese enlace simbólico se comprueba en otra copia de trabajo en un sistema que no es de Windows, Subversion reconstruye un enlace simbólico de nivel real del sistema de archivos del enlace simbólico versionado.
Pero eso de ninguna manera limita la usabilidad de las copias en funcionamiento en sistemas como Windows que no admiten enlaces simbólicos. En dichos sistemas, Subversion simplemente crea un archivo de texto regular cuyos contenidos son la ruta a la que apunta el enlace simbólico original. Si bien ese archivo no se puede utilizar como un enlace simbólico en un sistema Windows, tampoco impedirá que los usuarios de Windows realicen sus otras actividades relacionadas con Subversion.
Tomado de page
Me gustaría agregar un enlace simbólico a la subversión y cuando hago un pago, todo lo que hace es agregar el mismo enlace simbólico a mi pago pero me da miedo agregarlo si eso no es lo que sucede.
Windows Vista, Windows 7 y Windows 8 son compatibles con enlaces simbólicos verdaderos en el sistema de archivos NTFS 1 . Estos enlaces simbólicos son totalmente compatibles con los enlaces simbólicos del sistema de archivos Unix
Quiero enfatizar lo anterior. Demasiadas personas creen erróneamente que Windows no admite enlaces simbólicos.
Esta información errónea se produce porque Windows 2000 y Windows XP no admiten enlaces simbólicos. Admitían los puntos de unión de directorio , pero no los enlaces simbólicos de estilo POSIX. Aún más extraño, ni Windows 2000 ni Windows XP llegaron con el comando linkd
requerido para crear estos puntos de unión de directorio.
Esto ya no es verdad. Windows Vista, Windows 7 y Windows 8 no solo admiten enlaces simbólicos, sino que también vienen con el comando requerido de mklink
. Estos enlaces simbólicos son compatibles con los enlaces simbólicos compatibles con el sistema operativo POSIX (Mac OS X, Linux, Unix)
Ahora al corazón del problema:
Aunque Windows ahora admite enlaces simbólicos, y esos enlaces simbólicos son compatibles con enlaces simbólicos Unix / Linux / Mac, Subversion por sí misma no admite enlaces simbólicos en Windows. No tengo idea de por qué este es el caso.
No recomiendo colocar enlaces simbólicos en el repositorio, incluso si solo trabaja en sistemas de estilo POSIX y no en Windows. En su lugar, debe hacer que su compilación y / o pasos de implementación creen los enlaces simbólicos requeridos. Esto le da más flexibilidad ya que puede probar su sistema operativo durante una compilación o implementación y manejar cualquier problema.
Además, crear enlaces simbólicos durante la etapa de compilación / implementación crea menos problemas de mantenimiento que tenerlo en su repositorio. Imagínese si renombro, muevo o elimino un archivo que tiene un enlace simbólico apuntando a él en mi repositorio. También debo recordar buscar enlaces simbólicos y modificarlos también, algo que probablemente no ocurra. Después de todo, es imposible mirar un archivo y conocer todos los enlaces simbólicos que tal vez apuntan a ese archivo.
Entonces como resumen:
- Windows admite enlaces simbólicos compatibles con los enlaces simbólicos del sistema de estilo POSIX.
- Subversion aún no admite enlaces simbólicos en Windows.
- Si desea enlaces simbólicos, créelos durante la parte de compilación / implementación de su proceso como parte de sus scripts de compilación / implementación, y no como un artefacto de repositorio.
1. Sí, sé que el FS en NTFS significa sistema de archivos.
Bueno ... No estoy seguro de la respuesta técnica o cuáles podrían ser las ramificaciones, pero simplemente lo intenté. Creé un enlace sym a un directorio en un proceso de pago que tenía. Agregado y comprometido. Destruyó todo el proceso de pago. Vuelva a verificarlo y el enlace de Sym todavía está allí con el enlace apropiado.
Espero que sea suficiente para tus preocupaciones;)
El faq dice que el motivo por el que los enlaces simbólicos no son compatibles con Windows es que, de forma predeterminada, solo los administradores pueden crear enlaces simbólicos.
Funcionará siempre que esté en una plataforma basada en Unix / Linux cuando la revise. Buena suerte en Windows ya que no admite enlaces simbólicos.
Vea la nota en esta page en el Libro SVN sobre enlaces simbólicos para más información.
No ocurre nada si agrega un enlace simbólico desde Linux u otro sistema operativo POSIX. Simplemente funciona.
Pero cuando intentes agregar un enlace simbólico desde Windows, verás
C:/repo>svn add test_link
svn: E200007: Symbolic links are not supported on this platform
Supongo que es porque Windows requiere que UAC cree un enlace simbólico. Si Subversion permite el enlace simbólico en Windows, UAC romperá el svn up
normal.
Tal vez lo extrañé en otras respuestas, pero pensé que podría agregar.
Cliente de Windows 7:
TortoiseSVN 1.8.7, compilación 25475 - 64 bits, 2014/05/05 20:52:12
Subversion 1.8.9, -release
Cliente de Linux:
svn, versión 1.6.17 (r1128011)
Los enlaces simbólicos no solo ''sobreviven'', sino que pueden ser creados y editados en el repositorio desde Windows. Solo necesita hacer un archivo con el siguiente contenido y una propiedad SVN de svn:special
= *
.
link name_of_source_file
Cuando compruebe esto con un cliente SVN que sepa cómo crear enlaces simbólicos, se creará uno para usted. El cliente de Windows 7 crea archivos de texto, pero el cliente de Linux crea enlaces simbólicos.
En respuesta al comentario de zb226:
"Un cliente SVN que sabe cómo crear enlaces simbólicos" es un binario que se ha creado a partir de la fuente, que se ha escrito para usar una función que sabe cómo crear un enlace simbólico en un sistema de archivos que tiene un concepto de enlaces simbólicos .
Un vistazo rápido a la fuente de Subversion de 1.8.13 muestra en la línea 608 de io.c usando la función de symlink que no conozco de las existentes en las bibliotecas estándar de Windows.
Otra respuesta señala que hay un programa llamado mklink que se puede usar para crear un enlace simbólico en Windows 1 . En C y C ++ normalmente incluiría una biblioteca en lugar de llamar a un programa que puede existir o no. Parece que Microsoft tiene una función similar llamada CreateSymbolicLink pero parece muy inmadura. No puedo ver nada sobre si funciona en NTFS, que es lo que el 99.9% de los directorios de trabajo SVN tendrán respaldo en Windows. Sí menciona a ReFS pero no me imagino que se usará comúnmente durante un buen tiempo.
En resumen, parece que la disponibilidad y estabilidad de los enlaces simbólicos en Windows con NTFS no está allí, por lo que los desarrolladores de Subversion aún no han agregado el código para hacer uso de los comandos equivalentes de Windows.
Cuando los enlaces simbólicos (o si) se convierten en una parte diaria de Windows, espero que lleguen a las versiones de Windows de los clientes de Subversion. La mayoría de las personas que conozco que solo trabajan en Windows ni siquiera saben qué es un vínculo simbólico y de las personas que conozco que trabajan con sistemas operativos que no son de Windows. Son pocos los que saben que Microsoft está experimentando con ellos.
1. En la mklink indica que esto se aplica a "Windows Vista, Windows Server 2008, Windows Server 2012, Windows 8" y curiosamente omite Windows 7. Supongo que realmente significa que existe y funciona solo en versiones específicas de Windows que tienen versiones específicas de NTFS que admiten enlaces simbólicos. No creo que los enlaces simbólicos siempre hayan existido en NTFS.
Me acabo de dar cuenta de que el cliente Git para Windows de Github es compatible con los enlaces simbólicos de Windows NTFS. ¡Incluso proporcionan instructions sobre cómo habilitarlo! Otro clavo para agregar al ataúd de Subversion.