SVN: crea una carpeta para revisiones antiguas

Soy bastante principiante con los sistemas de control de revisión, así que discúlpeme.

Mi proyecto consiste en dos aplicaciones más pequeñas, ambas en sus propios repositorys SVN. Además, tengo un repository compartido (svn: externals) entre esas aplicaciones.

Cuando se lanza una nueva versión, me gustaría crear una carpeta para esa versión (incluyendo fonts, documentos, etc.). El repository para una sola aplicación debería verse más o less así:

.UI . "old versions" . 1.0 . 2.0 . 2.5 . trunk (current development version 3.0) 

Entonces mis preguntas son:

  1. ¿Cuál es el nombre correcto para este tipo de estructura (en SVN)?
  2. ¿Cómo puedo crearlo?
  3. ¿Es posible congelar esas revisiones antiguas (evitar cambios en esa carpeta)?
  4. ¿Hay alguna forma mejor de lograr esto?

  1. "tags" es el nombre estándar y correcto para esta carpeta.
  2. "svn copy" es tu amigo para crearlo. Muchos productos de continuous integration tendrán la opción de labelr automáticamente las comstackciones.
  3. Sí, puedes congelarlos con un "gancho precompromiso" (ver a continuación).
  4. Esta es la forma estándar de hacer las cosas. Si se desvía demasiado, confundirá a otros usuarios.

Un ejemplo de gancho de precomisión (para Windows) que usamos aquí:

 @echo off SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe SET GREP=D:\SVN\REPO\hooks\grep.exe REM Prevent changes to tags. ("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit an update to a tag.>&2 && exit 1) REM Prevent commits without comments. ("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment for all actions.>&2 && exit 1) exit 0 

Para crear manualmente la label, use un command como el siguiente:

 svn copy "http://your/repo/UI/trunk" "http://your/repo/UI/tags/v3.0" -m "Tagging v3.0" 

Debería leer los primeros capítulos de la reference en línea de Subversion en http://svnbook.com . Esto le dará un inicio rápido y bueno tanto en el control de versiones como en Subversion.

Lo que estás haciendo es bastante similar a la forma en que funciona Subversion. ¿Ya tienes esos directorys?

En una configuration de Subversion estándar, configura un directory "tags", "branches" y "trunk". Algunas personas configuran esto en la raíz de su repository, otras las configuran en la raíz de cada proyecto.

Por ejemplo:

 svn://svn/trunk/proj1 svn://svn/trunk/proj2 svn://svn/branches/proj1/1.2 svn://svn/branches/proj2/3.4 

o

 svn://svn/proj1/trunk svn://svn/proj2/trunk svn://svn/proj1/branches/1.2 svn://svn/proj2/branches/3.4 

La mayoría de los sitios que he visto lo hacen de la última manera, pero puede haber ventajas de hacerlo de la primera manera (principalmente debido al uso de svn:externals y el hecho de que cuando haces un checkout, tu checkout no se llama trunk por defecto) .

Todo lo que necesita hacer es llamar a las tags directory de "versiones anteriores" y ya está todo listo:

 svn://svn/UI/tags/1.0 svn://svn/UI/tags/2.0 svn://svn/UI/tags/2.5 svn://svn/UI/trunk 

Si olvidó escribir la label, ¡no cunda el pánico! Una de las mejores cosas de Subversion es el número de revisión del repository. Es como hacer una label cada vez que haces un commit. Si puede encontrar el número de revisión cuando realizó una publicación (generalmente mirando el svn log ), puede copyr esa revisión para crear su label:

 $ svn cp -r1234 svn://svn/UI/trunk svn://svn/UI/tags/2.0 

Como puede ver, usa el command svn cp para crear tags y twigs. Por cierto, es muy fácil modificar una label sin darse count. En la mayoría de los sitios, tienen un enlace precompromiso que puede evitar que la mayoría de los usuarios realicen confirmaciones en el directory de tags (esto significa que debe crear las tags) o les permite a los usuarios crear una label (a través de svn cp ) pero no dejar los usuarios modifican una label una vez que se crea. Tengo una versión de Perl de un enlace de precompromiso en http://dl.dropbox.com/u/433257/new_svn_hooks.zip si quieres echarle un vistazo.

  1. twigs, tags y tronco
  2. crea las carpetas en tu pago y luego confírmalas, luego usa "branch / tag" (tortoiseSVN) o "svn copy" para svd de la línea del cmd para crear una label de tu tronco
  3. usted label su troncal en un cierto punto, por ejemplo, v1, v2, v3 – esto mantiene un logging de su repository en el momento actual y siempre puede regresar a ellos
  4. Esta es la manera de lograr esto

Las twigs se usan para cambios importantes que no debe hacer en el tronco (si está trabajando con un grupo de desarrolladores). Puede crear una bifurcación, fusionar troncos en bifurcaciones a diario para evitar conflictos de fusión más adelante. Luego, cuando termine con el cambio principal en la twig, se fusionará de nuevo en el tronco.

Cuando esté listo para un lanzamiento, cree una label del tronco completo. Luego suelta desde allí. Si en el futuro desea volver a una versión determinada, entonces tiene esa reference histórica en sus tags. Una label solo apunta a su repository en un cierto punto de time, por ejemplo, rev 25123 cuando su troncal está en rev 35335, por ejemplo.