2009-06-02 6 views
12

Ok por lo que todos sabemos el estándar SVN puesta en marcha de¿Para qué usa el directorio de las etiquetas svn de todos modos?

trunk\ 
branches\ 
tags\ 

y me doy cuenta que la recomendación es que las etiquetas deben tener "especial" se compromete en ella. Nunca he usado realmente el directorio de etiquetas, sin embargo, y no veo por qué lo haría.

Según tengo entendido, las etiquetas \ contendrían cosas como "Version1Release \, Version2Release \, ThatTimeWeUpgradedEverthing \", etc. Pero aquí está la cosa, si vas a ingresar y necesitas hacer un cambio a Version1Release, entonces debería ser un rama, y ​​si se supone que las etiquetas nunca cambian, ¿de qué sirve hacer una copia en el control de la fuente? Simplemente haga una revisión de nota 712 fue nuestra versión 1 de lanzamiento.

Supongo que mi confusión es que parece que las etiquetas son versiones que nunca se supone que cambien. Pero el control de la fuente se trata de mantener un historial de cambio de archivos. Sé que este es un argumento organizacional menor, pero siento curiosidad por lo que piensa la gente.

+3

"Simplemente haga una revisión de nota 712 fue nuestra versión 1 versión". Solo recuerda que 69.59.196.211 es stackoverflow.com. ¿No? Por qué no? Es el mismo concepto! – Powerlord

+2

Es de hecho el mismo concepto. La IP de stackoverflow es recordada por el servicio de DNS dedicado a esa tarea. No está cooptando a otro sistema de una manera no natural. Puede "anotar" en un archivo de texto que mantiene en control de fuente, o en su documentación de publicación, o mediante archivo comprimido o 1 millón de formas diferentes que no implican el uso de un sistema de seguimiento de cambios para almacenar algo que nunca será ser cambiado. –

+0

Bueno, almacenarlo no elimina espacio. Y no es necesario que las personas accedan a su troncal al mismo tiempo que les permite descargar la fuente a la versión de lanzamiento. – Joey

Respuesta

13

Simplemente haga una revisión de la nota 712 fue nuestra versión 1 de la versión.

Esto funciona bastante bien para los desarrolladores en el equipo, tal vez (suponiendo que tiene un almacén de documentos para realizar este tipo de notas en), pero pidiendo a nadie que no íntimamente familiarizado con el repositorio para "recuerda" hace bastante razonable con bastante rapidez .

Por ejemplo, supongamos que su repositorio está disponible en la red. Un usuario puede elegir extraer y crear una copia para su sabor preferido, pero oscuro, de * nix y desea obtener un lanzamiento que tiene un par de versiones atrás, antes de agregar una función que no le gusta. Las etiquetas facilitan este tipo de cosas.

Las etiquetas también son excelentes como un "punto de disparo". En mis propios repositorios, la asignación de una etiqueta inicia automáticamente (a través del enganche post-commit) un script que crea, empaqueta y publica en nuestro sitio web.

Al final, las etiquetas son copias baratas. Si alguna vez desea hacer una "instantánea" de su compilación de una manera que represente que la instantánea no cambiará nunca, etiquétela. No es que te cueste demasiado. :-)

Editar:

Para hacer frente a la idea de "implementado como ramas" - no lo son. De Verdad. De hecho, Subversion no implementa ramificación o etiquetado en absoluto. Esas son ideas completamente creadas por el usuario, que usan el mismo comando, svn copy. Sin embargo, podría también usar ese comando para copiar un archivo dentro del tronco; no hay nada especial al respecto Y tampoco hay nada inherentemente especial sobre ramas o etiquetas. Son solo directorios comunes que hemos decidido tratar especialmente (e incluso podemos aplicar eso a través de los ganchos) para facilitar la administración del proyecto.

+2

Exactamente, porque SVN almacena copias como deltas, casi no hay sobrecarga para crear etiquetas. Una etiqueta es básicamente una asociación semántica entre un número de revisión y un nombre legible para el ser humano (y la URL asociada). –

+0

Me gusta su aclaración en su edición. – crashmstr

+0

Hablando técnicamente, es posible verificar una copia de etiqueta de un archivo y confirmarlo? El 'svn' no arroja ningún error? Es simplemente el desarrollador quien debería tratarlo para qué es lo que está previsto/definir, ¿correcto? – mtk

1

Se supone que las etiquetas hacen referencia a la "versión de la aplicación" inmutable de un conjunto de archivos.
("versión de la aplicación" en oposición a "número de versión interna técnica utilizada por el VCS", como revisión para SVN, o SHA-1 para Git, o id para ClearCase, o ...)
Se supone para servir como referencia se va a consultar y desplegado en otro espacio de trabajo (para pruebas o UAT - pruebas de aceptación del usuario -)

Desde SVN implementa etiquetas como ramas: como el directorio, el incentivo para modificar archivos en una etiqueta puede ser fuerte , pero vencería el propósito de una etiqueta. Otro VCS tiene la noción de etiqueta (o "línea base") que, una vez configurada, ya no se puede mover.

A lo que George Mauer comentarios:

Bueno eso es algo de lo que estaba diciendo. Las etiquetas nunca se deben cambiar, por lo que es muy ... extraño implementarlas como ramas.

"implements"? Pero ellos no "implementaron" la noción de etiqueta. SVN no tiene una "etiqueta" per se. Solo reutilizaron sus ramas y dijeron que también podría usarse como una etiqueta.

SVN RedBook establece claramente:

Pero espere un momento: no es este procedimiento creación de la etiqueta el mismo procedimiento que se utilizó para crear una rama? Sí, de hecho, lo es.
En Subversion, no hay diferencia entre una etiqueta y una rama. Ambos son solo directorios comunes que se crean al copiar.
Al igual que con las sucursales, la única razón por la que un directorio copiado es una "etiqueta" es porque los humanos han decidido tratarlo de esa manera: siempre y cuando nadie se comprometa con el directorio, siempre quedará como una instantánea. Si la gente comienza a comprometerse con ella, se convierte en una rama.

+2

@VonC: cualquier posibilidad de que pueda traducir esto a una versión de inglés que los plebeyos usamos. ¿Qué es una "versión aplicativa"? ¿Por qué "homologación" en lugar de "aprobación"? – AnthonyWJones

+0

Bueno, eso es lo que estaba diciendo. Las etiquetas nunca se deben cambiar, por lo que es muy ... extraño implementarlas como ramas. –

+2

@George - Creo que lo que estás atrapado aquí es que Subversion * no * implementa ramas o etiquetas en absoluto. Nosotros, los usuarios, hemos decidido crear directorios llamados/branches y/tags y tratarlos de manera especial, pero Subversion simplemente no lo hace. Las etiquetas no se "implementan como ramas". Se implementan como copias. Las sucursales simplemente se implementan de la misma manera. –

1

lo usamos para etiqueta específica generaciones que eran interesantes pero no comunicados, por ejemplo: "Inversores Demo", etc.

1

Las etiquetas no están destinados a ser modificado, debe hacer una rama si quiero hacer eso

Puede crear una bifurcación desde una etiqueta, que es probablemente lo que desea hacer, y luego volver a etiquetar los resultados de dicha bifurcación como una versión diferente.

No debe extraer una etiqueta para editar.

No pierde ningún historial mediante la bifurcación (copia) en SVN. Todo está vinculado entre sí.

0

Creo una etiqueta cada vez que promociono un proyecto de un servidor de desarrollo a un servidor de producción. Esto me da un historial de qué código fue promovido a producción. Si hay algún problema, puedo retroceder rápidamente a la versión de producción anterior.

No querrá pagar/cambiar/comprometer nada en el directorio de etiquetas. Es simplemente un lugar para guardar una instantánea de su código desde un punto determinado en el tiempo.

2

Solo haga una revisión de nota 712 fue nuestra versión 1.

Pero en ese caso, tiene que hacer una nota explícita, almacenar esa nota en algún lugar en un lugar donde todos puedan verla y buscarla.

Es mucho más fácil crear una etiqueta de la revisión 712 (es decir, copiar desde r712 al directorio de etiquetas) con el nombre "versión 1 versión". Y todos inmediatamente saben que este es el lanzamiento, sin primero tener que buscar qué revisión era la versión 1.

+0

Oh, común, puede hacerlo en la documentación de su versión, o incluso en un archivo almacenado en control de fuente. Mi problema radica más en el hecho de que el objetivo de las etiquetas no es el mismo que el del tronco o las ramas –

+2

Tienes razón. Las etiquetas no son lo mismo que el tronco o las ramas; es por eso que las etiquetas existen en absoluto. Son para un propósito diferente que el tronco o las ramas. –

6

Simplemente haga una revisión de la nota 712 fue nuestra versión 1 de la versión.

Para mí, hacer una etiqueta es haciendo una nota que rev 712 fue la versión 1.

También es muy fácil de ver todas las generaciones, los hitos, comunicados, etc., con sólo mirando la carpeta de etiquetas.

Si considera cómo funcionaban las etiquetas en VSS, las etiquetas son mucho más rápidas y fáciles de usar, pero logran lo mismo. Simplemente no analice en exceso el hecho de que está hecho usando el comando de copia al igual que una rama.

Edit: Si es paranoico con respecto a alguien que está realizando cambios en una carpeta de etiquetas, puede utilizar ganchos de preafirmación para evitarlo por parte del usuario.

+0

Pero la implementación de SVN es tal que puedes modificarla.En el mejor de los casos, es extraño y, en el peor, está pidiendo problemas a las personas que simplemente no lo reciben. –

+1

"obtener" el control de fuente es el primer paso para usarlo correctamente. Si no lo obtiene, las etiquetas son probablemente la menor de sus preocupaciones. – crashmstr

+0

Eso es realmente al lado del punto. ¿Por qué proporcionar un mecanismo para hacer algo que funciona de una manera que lo aliente a usarlo de la manera incorrecta? –

0

En mi experiencia, las etiquetas se usan para marcadores de lanzamiento, y donde no es probable que realice modificaciones.

Si crea una rama "release2-0" y luego necesita realizar cambios (por ejemplo, para corregir un error encontrado después del lanzamiento) ya no representa lo que lanzó para la versión 2.0.

Si en cambio usted crea la etiqueta "release2-0" y encuentra que necesita parchar esa versión, puede crear una nueva rama, hacer la corrección allí, y etiquetarla como "release-2-0-1".

De esta manera puede acceder fácilmente a cualquiera de sus lanzamientos.

2

Un repositorio de subversión es simplemente un único árbol de archivos y carpetas, donde puede obtener cualquier porción de ese árbol en cualquier versión de su historial en cualquier momento.

Como otros han dicho etiquetas/branches/trunk es solo una convención además de eso, subversion te permite copiar una parte del árbol a otro lugar para (casi) gratis, pero en su núcleo, eso es todo .

Tienes razón en que necesitarás una rama de mantenimiento para tu versión. La etiqueta actúa como su nombre para cualquier versión particular enviada a un lugar externo, y el comentario de confirmación cuando crea la etiqueta le da la oportunidad de explicar dónde fue y por qué (por ejemplo, "publicación beta pública", "solicitud de comentarios").

Existen varios scripts de gancho que impiden realizar modificaciones en una etiqueta, pero no se implementarán de manera predeterminada porque algunas personas usan la subversión de una manera completamente diferente (por ejemplo, copia de seguridad de archivos de configuración, etc.). Subversion es una herramienta genérica, no hay una forma "correcta" de usarla, solo convenciones fuertes para situaciones comunes.

De hecho, collabnet está comenzando a considerar cómo se usa el control de revisión para non-developmentprojects. La idea general de etiquetas de tronco y ramas puede ser irrelevante para algunos de estos.

Mi convención cuando se piensa en un repositorio de código fuente es:

  • tronco - la lista completa de las revisiones que pueden ser liberados para vivir
  • de tareas - una descripción externa de un puesto de trabajo/bug que los grupos de una conjunto de revisiones
  • rama de desarrollo - un conjunto de revisiones que aún no están listos para el tronco
  • rama de mantenimiento - un lugar para recoger las revisiones de tronco para la liberación
  • Tag - una instantánea con nombre de una rama de mantenimiento

Las etiquetas también le puede dar una url utilizable para la documentación, por ejemplo:

"El comunicado está disponible en http://svnserver/myproject/tags/1.0" Podría ser: "El comunicado está disponible en http://svnserver/myproject/[email protected] "

Pero cuando navega por el repositorio, nunca se encontrará con @ 4483 y sabrá que fue de alguna manera especial.

+0

De hecho, entiendo este argumento, parece que dado que las etiquetas están destinadas a ser usadas como etiquetas inmutables, debería haber un mecanismo separado para denotarlas, como quizás una etiqueta especial colocada en el mensaje de confirmación o algo así. –

Cuestiones relacionadas