¿Es seguro tener carpetas /.svn/ en el sitio en vivo? (¿Cómo eliminarlos pero conservar la capacidad de actualización de svn?)

10

Estoy haciendo svn update para actualizar el código de mi sitio web php, pero deja .svn/carpetas por todas partes.

Creo que es peligroso dejar esos archivos públicamente legibles, pero es muy fácil actualizar el sistema.

¿Hay alguna forma de usar svn updatepara actualizar el sistema, pero no para exportar las .svn/carpetas?

siliconpi
fuente

Respuestas:

21

Si está usando apache:

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>

Eso impedirá que las personas accedan a los .svndirectorios de forma remota (utilizando el navegador), pero puede mantenerlas (y las capacidades de svn) en el proyecto.

Por cierto, se puede sustituir \.svnpor \.gito \.cvssi está usando algo diferente a la subversión.

volcado de memoria
fuente
y esto bloqueará todos los directorios .svn en el sitio web? tengo muchos subdirectorios
siliconpi
actualmente mi httpd.conf tiene <Directorio /> Opciones FollowSymLinks AllowOverride All </Directory> ¿puedo agregar lo que escribió justo debajo de esto como una cosa separada o las dos entradas deben fusionarse?
siliconpi
Coincidirá con cualquier directorio llamado .svnasí que sí.
coredump
Puedes agregarlo por separado.
coredump
3

Desea exportar su código desde el SVN al sitio en vivo ...

No lo uses svn updatepara eso. la actualización está destinada a usarse con la actualización de copias de trabajo, no exportando el código. Utilice en su svn exportlugar, ya que exporta un árbol de directorio limpio desde el repositorio especificado.

La --forcebandera permitirá que la exportación sobrescriba los archivos existentes.

Entrada manual de exportación SVN

gsreynolds
fuente
Puedo simpatizar si el OP no quiere usar export, ya que implica siempre tomar una copia nueva y completa del repositorio, lo cual es una molestia si se trata de un gran repositorio en una conexión pequeña (digamos que el servidor web es un servidor alojado, pero su repositorio SVN está en su oficina local y lo comparte un enlace de 1Mb). updatesignifica que no necesita obtener todo el asunto cada vez.
Mark Henderson
Un punto justo. ¿Quizás exportar a una copia local del sitio y luego simplemente sincronizar los cambios al servidor web remoto funcionaría en esa situación? Nunca he tenido ese problema, así que no lo había considerado.
gsreynolds
2

No los pongo en sitios de producción / en vivo. Porque no quiero que yo u otros desarrolladores olvidemos la mala idea de editar código en vivo. Mi script de instalación filtra mis archivos .svn.

ekerner
fuente
@kerner: ¿cómo los actualiza entonces?
siliconpi
1
¿Por qué no solo usar svn exporty no molestarse en filtrarlos?
pjmorse
Tengo un script de instalación que uso para mis sitios, y lo modifico ligeramente para adaptarlo a cada uno. Por lo general, también hace cosas como construir bases de datos, tablas db y usuarios db, configurar cualquier usuario o administrador predeterminado, etc. Entonces, para hacer una exportación a prod, el usuario prod (como humano o script) comprueba un svn funcionando copie en algún lugar a lo largo de ~ /, y luego ejecute el script de instalación que es miembro de dicha copia de trabajo, luego opcionalmente elimina la copia de trabajo.
ekerner
1

Debe buscar un sistema de implementación adecuado, como Capistrano . Esto significa que sus servidores de producción no necesitan subversión, y puede implementar en múltiples servidores y agregar lógica personalizada a las implementaciones. También hace que sea relativamente fácil revertir las implementaciones.

dhasenan
fuente