tortoise subversion subir repositorio proyecto desvincular create crear con como carpeta branches archivos svn permissions svn-externals

subversion - Cómo prohibir la subversión se compromete a svn: externa a las revisiones?



subir proyecto a svn (4)

Como está utilizando https, supongo que está utilizando mod_dav_svn . Puede configurar una url adicional en el repositorio de su biblioteca y solo otorgarle acceso de solo lectura. De esta forma, incluso los desarrolladores que normalmente pueden comprometerse con la biblioteca no podrán comprometerse a través de svn: external.

Usamos svn: externals para revisiones específicas de una biblioteca, por ejemplo, como

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

Cuando realiza una modificación en su copia de trabajo a un externo desprotegido, es posible comprometerse aunque los enlaces externos a una revisión específica y no a HEAD.

Cuando ejecuta svn update después de la confirmación, los cambios desaparecerán en la copia de trabajo porque subversión revierte todo a la revisión 12345. Por lo tanto, nunca verá realmente los cambios usted mismo, pero todavía están en HEAD, lo cual es malo.

¿Es posible prohibir confirmaciones solo cuando el externo no apunta a la revisión HEAD?


Para este tipo de validaciones también recomendaría un gancho precompromiso, pero en lugar de escribir un guión que puede resultar imposible de entender, recomiendo usar una biblioteca como SVNKit - http://svnkit.com/ (si saber Java).

He escrito algunos ganchos de precompromiso usando esta biblioteca y es bastante fácil trabajar con ella. Usted escribe un pequeño programa ejecutable de Java que es llamado desde el enlace precompromiso por Subversion. Entonces es fácil extraer, por ejemplo, propiedades o partes de la URL para hacer la validación y rechazar la confirmación si no se aplica a sus "reglas".

Eche un vistazo a las clases SVNLookClient y SVNChangeEntry; tienen métodos para los casos más comunes (por ejemplo, extracción de información sobre una confirmación en curso).


Podría intentar algo como esto: use un script precompromiso para verificar si el compromiso va a una etiqueta. Si es así, fallar y proporcionar un mensaje. Lea más sobre los ganchos de subversión. Tendrá que volver a escribir la expresión regular para que falle si no es HEAD en lugar de fallar si es una etiqueta.

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/$” | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+” if [ $? -eq 0 ] ; then echo >&2 “***************************************” echo >&2 “* Modification of tags is not allowed *” echo >&2 “***************************************” exit 1 fi


Si no está comprometido a mantener el entorno externo definido como una revisión del enlace troncal, ¿por qué no crear una nueva etiqueta basada en esa revisión? Luego puede tener su svn: punto externo a la etiqueta, y usar uno de los métodos de control de acceso documentados para limitar las confirmaciones a su directorio de etiquetas (o poner la etiqueta en un repositorio diferente y hacer que ese repositorio solo sea de lectura).