Pregunta

¿Cómo se almacenan los permisos de archivos en un repositorio?Algunos archivos deben ser de solo lectura para evitar que un programa de terceros los destruya, pero después de retirarlos del repositorio, están configurados para lectura y escritura.

Busqué en google y encontré un entrada de blog de 2005 eso establece que Subversion no almacena permisos de archivos.Hay parches y scripts de enlace enumerados (sólo existe todavía una URL).Tres años después, ¿Subversion todavía no almacena permisos de archivos y son los ganchos la única forma de hacerlo?(Nunca he hecho ganchos y prefiero usar algo que sea nativo de Subversion).

¿Fue útil?

Solución

Una posible solución sería escribir un script que registre con el resto de su código y que se ejecute como primer paso de su proceso de compilación.

Este script ejecuta su copia del código base y establece permisos de lectura en ciertos archivos.

Lo ideal sería que el script leyera la lista de archivos desde un archivo de entrada simple.Esto facilitaría el mantenimiento y facilitaría que otros desarrolladores comprendieran qué archivos se marcan como de solo lectura.

Otros consejos

SVN tiene la capacidad de almacenar metadatos (propiedades) junto con un archivo.Las propiedades son básicamente pares clave/valor, sin embargo, hay algunas claves especiales como 'svn:executable'. Si esta propiedad existe para un archivo, Subversion establecerá el bit ejecutable del sistema de archivos para ese archivo cuando lo extraiga.Si bien sé que esto no es exactamente lo que estás buscando, podría ser suficiente (lo fue para mí).

Hay otras propiedades para el final de línea (svn:eol-style) y el tipo mime (svn:mime-type).

No existe una forma nativa de almacenar permisos de archivos en SVN.

Ambos asvn y el parche de esa publicación de blog parecen estar disponibles (y alojados en el repositorio SVN oficial), y eso es algo bueno, pero no creo que tengan ese manejo de metadatos en la versión principal en el corto plazo.

SVN ha tenido la capacidad de manejar enlaces simbólicos y ejecutables Especialmente durante mucho tiempo, pero ninguno funciona correctamente en Win32.No aguantaría la respiración por otra característica no portátil (aunque no sería demasiado difícil de implementar sobre el sistema de metadatos ya existente).

Consideraría escribir un script de shell para ajustar manualmente los permisos de los archivos y luego colocarlo en el repositorio.

Dado que esto aún no se dijo completamente en respuestas anteriores.Aunque odio resucitar hilos zombis.

Dado que agregar soporte de permisos para SVN tendría que adaptarse a múltiples sistemas operativos y tipos de permisos, NFS, POSIX, ARWED y RACF.

Esto haría que SVN se inflara, posiblemente entrara en conflicto con tipos de permisos conflictivos como NFS y POSIX, o abriría posibles exploits/vulnerabilidades de seguridad.

Hay un par de soluciones.El compromiso previo, el compromiso posterior y el compromiso inicial son los más utilizados y forman parte del sistema Subversion.Pero te permitirá controlar los permisos con cualquier lenguaje de programación que desees.

El sistema que implementé es lo que llamo un empaquetador, que valida los archivos confirmados de la copia de trabajo, luego analiza un archivo de metadatos, que enumera los permisos predeterminados deseados para los archivos/carpetas, y cualquier cambio que también desee.

Owner, Group, Folders, Files
default: <user> www-user 750 640
/path/to/file: <user> non-www 770 770
/path/to/file2: <user> <user> 700 700

También puede ampliar esto y permitir cosas como el movimiento automático, cambiarles el nombre, etiquetar revisiones por tipos, como alfa, beta, versión candidata, versión

En cuanto a ayudar a los clientes a verificar los archivos de su repositorio con permisos adjuntos.Es mejor que considere crear un instalador de su paquete y ofrecerlo como recurso.

Imagine a las personas configurando sus repositorios con un ejecutable configurado con permisos de root: www-user 4777

Este es el enlace actualizado para el parche SVN que maneja correctamente los permisos de archivos de estilo Unix.Probé en fedora12 y parece funcionar como se esperaba:

Acabo de guardarlo /usr/bin/asvn y uso asvn en lugar del comando svn si necesito que los permisos se manejen correctamente.

Muchas respuestas han indicado que svn no almacena permisos de archivos.Esto puede ser cierto, pero pude resolver un problema de archivo dll sin permisos de ejecución simplemente siguiendo estos pasos:

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. actualización svn
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m "Eliminar dll para arreglar permisos"
  6. mv ../badpermission.dll .
  7. svn agregar badpermission.dll
  8. svn commit badpermission.dll -m "Agregar nuevamente el dll para arreglar los permisos"
  9. rm badpermission.dll
  10. actualización svn
  11. badpermission.dll vuelve con permisos de ejecución

@morechilli:

El contenedor asvn de mi publicación anterior y el blog en la publicación del OP parecen hacer lo que estás sugiriendo.Aunque almacena los permisos en las propiedades del repositorio de los archivos correspondientes en lugar de en un único archivo externo.

Recomendaría generar un mapa de permisos usando la utilidad mtree (FreeBSD la tiene de forma predeterminada), almacenar el mapa en el repositorio y, como se mencionó anteriormente, ejecutar un script que restauraría los permisos de archivo adecuados del mapa como primer paso del proceso. proceso de construcción.

El bloqueo no resolvería este problema.El bloqueo impide que otros editen el archivo.Esta es una aplicación de terceros que se ejecuta como parte del proceso de compilación e intenta escribir en un archivo (cambiándolo), lo que interrumpe el proceso de compilación.Por lo tanto, debemos evitar que el programa cambie el archivo, lo que simplemente marca el archivo como de sólo lectura.Nos gustaría que esa información se mantenga en el repositorio y se transporte a través de registros, sucursales, etc.

graham, svn no almacena permisos.Su única opción es finalizar su llamada a svn en un guión.El guión debe llamar svn con sus argumentos, luego establezca los permisos.Dependiendo de su entorno, es posible que necesite llamar a su script svn y modifica tu PATH para asegurarse de que sea llamado.

Me gusta bastante la idea de morechilli de tener la lista de archivos y permisos registrados en el propio repositorio.

Creamos un archivo por lotes para hacer esto por nosotros.Aunque preferiría apoyo real en subversión...

Considere usar svn lock para impedir que otros escriban en el archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top