Pregunta

He visto que estas palabras mucho alrededor de la Subversión (y supongo que en general repositorio) los debates.He estado usando SVN para mis proyectos de los últimos años, pero nunca he entendido el concepto completo de estos directorios.

¿Qué significan?

¿Fue útil?

Solución

Hmm, no estoy seguro, estoy de acuerdo con Nick volver a la etiqueta de ser similar a la de una rama.Una etiqueta es un marcador de

  • Tronco al cuerpo principal de desarrollo, originarios desde el inicio del proyecto hasta el presente.

  • Rama será una copia del código de derivados a partir de un cierto punto en el tronco que se utilizan para aplicar los cambios importantes en el código, mientras que la preservación de la integridad del código en el tronco.Si los cambios principales de trabajo de acuerdo al plan, generalmente se fusiona de nuevo en el tronco.

  • Etiqueta será un punto en el tiempo en el tronco o una rama que se desea conservar.Las dos razones principales para la preservación sería que esta es una versión principal del software, ya sea alfa, beta, RC o RTM, o este es el más estable el punto de que el software antes de realizar importantes modificaciones en el tronco se aplicaron.

En los proyectos de código abierto, de las principales ramas que no son aceptados en el tronco por los interesados en el proyecto pueden convertirse en las bases de horquillas - por ejemplo, totalmente separado de los proyectos que comparten un origen común con otro código fuente.

De la rama y de la etiqueta de subárboles se distinguen por el tronco de las siguientes maneras:

Subversion permite a los administradores de sistemas para crear los scripts gancho que son provocados por la ejecución cuando se producen determinados eventos;por ejemplo, cometer un cambio en el repositorio.Es muy común que un típico repositorio de Subversion aplicación para el tratamiento de cualquier ruta de acceso que contiene "/tag/" a ser protegido contra escritura después de la creación;el resultado neto es que las etiquetas, una vez creados, son inmutables (al menos "comunes" de los usuarios).Esto se hace a través de los scripts gancho, que hacer cumplir la inmutabilidad por la prevención de nuevos cambios si etiqueta es un nodo padre de los cambios en el objeto.

Subversion también ha añadido características, desde la versión 1.5, relativo a la "rama de mezcla de seguimiento" para que los cambios realizados a un rama puede ser incluido de nuevo en el tronco con apoyo incremental, "inteligente" de la fusión.

Otros consejos

Primero de todo, como @AndrewFinnell y @KenLiu señalar, en el SVN de los nombres de directorio en sí mismos no significan nada -- "el tronco, las ramas y las etiquetas" son simplemente una convención común que es utilizado por la mayoría de los repositorios.No todos los proyectos de uso de todos los directorios (es bastante común, no para el uso de "etiquetas"), y de hecho, no hay nada que te detenga de llamarlos algo que te gusta, aunque rompiendo las convenciones es a menudo confuso.

Voy a describir probablemente el uso más común escenario de ramas y etiquetas, y dar un escenario de ejemplo de cómo se utilizan.

  • Tronco:La principal área de desarrollo.Aquí es donde su próxima gran versión del código de la vida, y por lo general tiene todas las características más recientes.

  • Ramas:Cada vez que la liberación de una versión principal, se obtiene de una rama creado.Esto le permite hacer correcciones de errores y hacer una nueva versión sin tener que liberar el más reciente - posiblemente sin terminar o no probados - características.

  • Etiquetas:Cada vez que salga una versión final (versión, release candidate (RC), y las betas) de hacer una etiqueta para él.Esto le da un punto en el tiempo de copia del código, tal y como estaba en ese estado, lo que permite volver a reproducir los errores si es necesario en una versión anterior, o re-lanzamiento de una versión anterior exactamente como era.Ramas y etiquetas en SVN son de peso ligero en el servidor, no hacer una copia completa de los archivos, sólo un mp diciendo "estos archivos se copian en esta revisión" que sólo toma unos pocos bytes.Con esto en mente, usted nunca debe preocuparse por crear una etiqueta para cualquier código.Como he dicho antes, las etiquetas se omiten a menudo y, en cambio, un changelog o de otro documento aclara que el número de revisión cuando un release.


Por ejemplo, digamos que usted inicie un nuevo proyecto.Empezar a trabajar en el "tronco", por lo que finalmente será lanzado como versión 1.0.

  • trunk/ - versión de desarrollo, que pronto será la 1.0
  • ramas/ vacío

Una vez 1.0.0 es terminado, rama del tronco en un nuevo "1.0" rama, y crear un "1.0.0" de la etiqueta.Ahora trabajo en lo que eventualmente será 1.1 continúa en el tronco.

  • trunk/ - versión de desarrollo, pronto será de 1.1
  • ramas/1.0 - versión 1.0.0
  • tags/1.0.0 - 1.0.0 versión de lanzamiento

Usted venir a través de algunos errores en el código, y fijarlos en el tronco, y luego combinar las revisiones a la rama 1.0.Usted también puede hacer lo contrario, y corregir los errores en la 1.0 rama, y luego unirlos al tronco, pero comúnmente proyectos de palo con la fusión de una sola vía para disminuir la posibilidad de que falta algo.A veces un error que sólo puede ser fijado en la 1.0 porque es obsoleto en 1.1.No importa realmente:usted sólo quiere asegurarse de que usted no la versión 1.1 con los mismos errores que se han corregido en la versión 1.0.

  • trunk/ - versión de desarrollo, que pronto será la 1.1
  • ramas/1.0 - próxima versión 1.0.1
  • tags/1.0.0 - 1.0.0 versión de lanzamiento

Una vez que encuentre lo suficientemente bugs (o tal vez un error crítico), se decide a hacer una versión 1.0.1.Así que hacer una etiqueta de "1.0.1" desde el 1.0 de la rama, y liberar el código.En este punto, el tronco contendrá lo que será el 1,1, y el "1.0" rama contiene 1.0.1 código.La próxima vez que se lance una actualización a 1.0, sería la versión 1.0.2.

  • trunk/ - versión de desarrollo, que pronto será la 1.1
  • ramas/1.0 - próximo lanzamiento de la versión 1.0.2
  • tags/1.0.0 - 1.0.0 versión de lanzamiento
  • tags/1.0.1 - versión 1.0.1

Finalmente usted está casi listo para la versión 1.1, pero quieres hacer una primera beta.En este caso, es probable que hacer una "1.1" rama, y un "1.1beta1" de la etiqueta.Ahora, trabajar en lo que será de 1,2 (o 2.0 tal vez) continúa en el tronco, pero el trabajo en 1.1 continúa en el "1.1" rama.

  • trunk/ - versión de desarrollo, pronto sería de 1,2
  • ramas/1.0 - próxima versión 1.0.2
  • ramas/1.1 - próxima versión 1.1.0
  • tags/1.0.0 - 1.0.0 versión de lanzamiento
  • tags/1.0.1 - versión 1.0.1
  • tags/1.1beta1 - 1.1 beta 1 versión

Una vez que suelte 1.1 final, hacer un "1.1" en la etiqueta de la "1.1" rama.

También puede seguir para mantener la 1.0 si quieres, portar correcciones de errores entre las tres ramas (1.0, 1.1, y el tronco).La importante conclusión es que para cada versión principal del software de mantener, tiene una rama que contiene la última versión del código para esa versión.


Otro uso de las ramas es de características.Aquí es donde usted rama del tronco (o uno de su liberación de las ramas) y trabajar en una nueva característica en el aislamiento.Una vez que la función se ha completado, se mezcla de nuevo y quitar la rama.

  • trunk/ - versión de desarrollo, que pronto será de 1,2
  • ramas/1.1 - próxima versión 1.1.0
  • ramas/ui-rewrite - experimental de la rama de característica

La idea de esto es cuando usted está trabajando en algo perjudicial (que se sostuviera o interferir con otras personas de hacer su trabajo), algo de experimental (que incluso pueden no hacerlo en), o, posiblemente, sólo algo que toma mucho tiempo (y tienes miedo si la celebración de una versión 1.2 cuando usted está listo para la rama 1.2 desde el tronco), usted puede hacerlo en aislamiento en rama.En general, se mantendrá actualizado con el tronco por la combinación de los cambios en ella todo el tiempo, lo que hace que sea más fácil para volver a integrar (combinación de espalda en el tronco) cuando haya terminado.


Tenga en cuenta también, el esquema de control de versiones que se usa aquí es sólo uno de muchos.Algunos harían los equipos de corrección de errores de mantenimiento/versiones 1.1, 1.2, etc., y los principales cambios como 1.x, 2.x, etc.El uso es el mismo, pero puede que el nombre de la sucursal "1" o "1.x" en lugar de "1.0" o "1.0.x".(Aparte, semántica de control de versiones es una buena guía sobre cómo hacer los números de versión).

En adición a lo que Nick ha dicho usted puede encontrar más información en Transmite Líneas:Patrones de ramificación Paralela de Desarrollo de Software

enter image description here

En esta figura main es el tronco, rel1-maint es una rama y 1.0 es una etiqueta.

En general (la herramienta de vista agnóstico), una rama es el mecanismo utilizado para el desarrollo paralelo.Un SCM puede tener de 0 a n ramas.Subversion tiene 0.

  • Tronco es una rama principal recomendado por parte de la Subversión, pero de ninguna manera obligados a crear.Se le podría llamar 'principal' o 'libera', o no tener uno en todo!

  • Rama representa un esfuerzo de desarrollo.Nunca debe ser nombrado después de un recurso (como "vonc_branch'), pero después de:

    • un propósito 'myProject_dev' o 'myProject_Merge'
    • un comunicado de perímetro 'myProjetc1.0_dev or myProject2.3_Merge' o 'myProject6..2_Patch1'...
  • Etiqueta es una instantánea de archivos con el fin de obtener fácilmente de nuevo a ese estado.El problema es que la etiqueta y de la rama es el mismo en Subversion.Y sin duda recomiendo el paranoico enfoque:

    usted puede utilizar uno de los de control de acceso de secuencias de comandos proporcionada con Subversion para evitar que nadie pueda hacer nada pero crear nuevas copias en el área etiquetas.

Una etiqueta final.Su contenido nunca debe cambiar.NUNCA.Nunca.Se olvidaron de una línea en la nota de la versión?Crear una nueva etiqueta.Obsoletos o eliminar el antiguo.

Ahora, he leído mucho acerca de "la fusión tal y como en tales y tales ramas, finalmente, en el tronco de la rama".Que se llama de combinación de flujo de trabajo y hay nada obligatorio aquí.No es porque usted tiene un tronco de la rama que tiene que combinar nada.

Por convención, el tronco de la rama puede representar el estado actual de su desarrollo, sino que es por una simple secuencial proyecto, que es un proyecto que tiene:

  • no 'por adelantado' desarrollo (para la preparación de la siguiente-siguiente versión lo que implica cambios que no son compatibles con el actual 'tronco' de desarrollo)
  • sin masiva de refactorización (para probar una nueva técnica de elección)
  • no se de mantenimiento a largo plazo de una versión anterior

Porque con uno (o todos) de los escenario, usted consigue cuatro 'troncos', cuatro 'actual de la evolución', y no todo lo que hacen en esas desarrollo paralelo necesariamente tiene que ser incluido de nuevo en el 'tronco'.

En el SVN una etiqueta y rama son muy similares.

Etiqueta = una definida en el tiempo, por lo general utilizado para lanzamientos

Rama = también una definida en el tiempo que el desarrollo continúe, en usado generalmente para la versión principal como 1.0, 1.5, 2.0, etc, entonces cuando suelte usted la etiqueta de la rama.Esto le permite continuar con el apoyo de una versión de producción mientras se mueve hacia adelante con los cambios recientes en el tronco

Tronco = desarrollo del espacio de trabajo, esto es donde todo el desarrollo que debería ocurrir, y, a continuación, los cambios fusionado de vuelta de la rama de prensa.

Ellos realmente no tienen ningún significado formal.Una carpeta es una carpeta a SVN.Son una forma aceptada en general para organizar el proyecto.

  • El tronco es donde usted mantener su línea principal de developmemt.La rama de la carpeta es donde se puede crear, así, las ramas, que son difíciles de explicar en un post breve.

  • Una rama es una copia de un subconjunto de su proyecto que se trabaja en forma separada del tronco.Quizás es por experimentos que podrían no ir a ninguna parte, o tal vez para la próxima versión, que será la combinación posterior de la espalda en el tronco cuando es estable.

  • Y las etiquetas de la carpeta es para la creación de etiquetado de los ejemplares de su repositorio, por lo general en la liberación de los puestos de control.

Pero como he dicho, SVN, una carpeta es una carpeta. branch, trunk y la etiqueta son sólo una convención.

Estoy usando la palabra "copiar" a diestro y siniestro.SVN en realidad no hacer copias de cosas en el repositorio.

El tronco es la línea de desarrollo que tiene la ultima versión del código fuente y características.Se debe tener las últimas correcciones de errores en ella, así como las últimas funciones que se han añadido al proyecto.

El ramas se utiliza generalmente para hacer algo de distancia del tronco (u otra línea de desarrollo) que de otra manera romper la acumulación.Las nuevas características son a menudo construidos en una rama, y luego se fusionó de nuevo en el tronco.Ramas a menudo contienen código que no son necesariamente aprobados para el desarrollo de la línea se bifurcan desde.Por ejemplo, un programador podría tratar de una optimización en algo en una rama y sólo combinar en la línea de desarrollo una vez que la optimización es satisfactoria.

El etiquetas son instantáneas del repositorio en un momento determinado.El desarrollo No debe ocurrir en estos.Que más a menudo se usa para hacer una copia de lo que fue entregado a un cliente, de modo que usted puede fácilmente tener acceso a lo que un cliente está utilizando.

Aquí hay un enlace a una muy buena guía para los repositorios:

Los artículos de Wikipedia son también vale la pena leer.

Ahora que está la cosa sobre el desarrollo de software, no hay conocimiento coherente acerca de cualquier cosa, todo el mundo parece tener su propia manera, pero eso es porque es una disciplina relativamente joven de todos modos.

Aquí está mi llanura de manera sencilla,

tronco - El tronco directorio contiene la más actual, aprobado, y se fusionó cuerpo de trabajo.Contrariamente a lo que muchos han confesado, mi tronco es sólo para limpiar, limpio, de trabajo aprobado, y no un área de desarrollo, sino más bien una liberación de la zona.

En algún punto dado en el tiempo cuando el tronco parece todo listo para lanzar, entonces es marcados y liberados.

ramas - Las ramas directorio contiene los experimentos y trabajos en curso.Trabajo bajo una rama permanece allí hasta que es aprobado para ser fusionados en el tronco.Para mí, esta es la zona donde todo el trabajo se realiza.

Por ejemplo:Puedo tener una la iteración-5 rama de una quinta ronda de desarrollo en el producto, tal vez un prototipo-9 rama de una novena ronda de experimentación, y así sucesivamente.

etiquetas - Las etiquetas directorio contiene instantáneas de aprobados de las ramas y el tronco de prensa.Cada vez que una rama está aprobado para combinar en el tronco, o una release del tronco, una instantánea de la aprobación de la rama o tronco de la liberación se realiza en virtud de las etiquetas.

Supongo que con las etiquetas puedo saltar hacia atrás y adelante a través del tiempo a los puntos de interés con bastante facilidad.

He encontrado este gran tutorial sobre SVN cuando yo estaba buscando el sitio web de la autor de la OpenCV 2 la Visión de Computadora de Programación de Aplicaciones de libros de cocina y pensé que debía compartir.

Él tiene un tutorial sobre cómo usar SVN y lo de las frases 'tronco', 'etiqueta' y 'sucursal' significa.

Citado directamente desde su tutorial:

La versión actual de su proyecto de software, en la que su equipo está actualmente trabajando normalmente se encuentra en un directorio llamado tronco.A medida que el proyecto evoluciona, el desarrollador de las actualizaciones de la versión de corrección de errores, agregar nuevas características) y presentar sus cambios bajo ese directorio.

En cualquier punto dado en el tiempo, puede que desee congelar una versión y capturar una instantánea del software, ya que es en esta etapa del desarrollo.Generalmente, esto corresponde a las versiones oficiales de su software, por ejemplo, los que te van a entregar a sus clientes.Estas instantáneas se encuentran bajo el etiquetas directorio de tu proyecto.

Finalmente, es a menudo útil para crear, en algún momento, una nueva línea de desarrollo de su software.Esto sucede, por ejemplo, cuando se desea probar una alternativa de implementación en el que tienes que modificar su software, pero usted no desea enviar estos cambios para el proyecto principal hasta que usted decida si adopta la nueva solución.El equipo principal puede continuar a trabajar en el proyecto, mientras que otros desarrolladores a trabajar en el prototipo.Te iba a poner estas nuevas líneas de desarrollo del proyecto en un directorio llamado ramas.

El tronco directorio es el directorio que usted está probablemente más familiarizados, ya que se utiliza para mantener los cambios más recientes.Su principal base de código debe estar en el tronco.

Las ramas directorio para la celebración de sus ramas, lo que puede ser.

Las etiquetas de directorio es básicamente para el etiquetado de un determinado conjunto de archivos.Hacer esto para cosas como la prensa, cuando quieras "1.0" a estos archivos en estas revisiones y "1.1" a estos archivos en estas revisiones.Por lo general, no modificar las etiquetas una vez que están hechas.Para obtener más información sobre etiquetas, ver Capítulo 4.Las ramas y la Fusión (en Control de versiones con Subversion).

Una de las razones por las que todo el mundo tiene una definición ligeramente diferente es porque Subversion implementa cero apoyo para ramas y etiquetas.Subversion básicamente dice: Nos fijamos en completa ramas y etiquetas en otros sistemas y no los encontró útil, por lo que no aplicar nada.Acaba de hacer una copia en un nuevo directorio con un nombre convenio en su lugar.Luego, por supuesto, cada uno es libre de tener algo diferente en los convenios.Para entender la diferencia entre un real etiqueta y una mera copia + de convención de nomenclatura ver la entrada de la Wikipedia Subversion las etiquetas y ramas.

Tag = una definida en el tiempo, por lo general utilizado para lanzamientos

Yo creo que esto es lo que se suele decir por "etiqueta".Pero en Subversion:

Ellos realmente no tienen ningún significado formal.Una carpeta es una carpeta de SVN.

lo que me parece bastante confuso:un sistema de control de versiones que no sabe nada acerca de ramas o etiquetas.A partir de una aplicación de punto de vista, creo que la Subversión camino de la creación de "copias", es muy inteligente, pero que yo tenga que saber sobre él es lo que yo llamaría una fugas de abstracción.

O tal vez he estado usando CVS demasiado largo.

Creo que parte de la confusión proviene de la diferencia entre el concepto de una etiqueta y la aplicación en el SVN.SVN una etiqueta es una rama que es una copia.Modificación de etiquetas se considera malo y en el hecho de herramientas como TortoiseSVN le avisará si intento modificar nada con ../etiquetas/..en la ruta.

No estoy realmente seguro de lo que 'tag' es, pero de la rama es bastante común origen del concepto de control.

Básicamente, una rama es una manera de trabajar en los cambios al código sin afectar el tronco.Supongamos que desea añadir una nueva característica que es bastante complicado.Usted quiere ser capaz de comprobar los cambios que le hacen, pero no quiere que afectan el tronco hasta que termines con la característica.

Primero debería crear una rama.Esto es básicamente una copia de tronco como de el momento de realizar la rama.Te gustaría entonces hacer todo su trabajo en la rama.Los cambios realizados en la rama no afectar el tronco, de modo que el tronco es aún utilizable, lo que permite a otros a seguir trabajando allí (como hacer correcciones o pequeñas mejoras).Una vez que su función es hacer que usted había integrar la rama de la espalda en el tronco.Este sería el desplazamiento de todos los cambios de la rama al tronco.

Hay una serie de patrones de uso de la gente por las ramas.Si usted tiene un producto con múltiples versiones principales que se admite a la vez, por lo general, cada versión sería una rama.Donde yo trabajo tenemos un QA rama y una rama de Producción.Antes de la liberación de nuestro código al control de calidad nos integrar los cambios a la garantía de calidad de la rama, luego se implementa a partir de ahí.Cuando la liberación de la producción integramos desde el control de calidad de la rama de la rama de Producción, por lo que sabemos el código que se ejecuta en la producción es idéntico a lo que QA probado.

Aquí está el Entrada de la Wikipedia sobre las ramas, ya que probablemente explicar las cosas mejor que yo.:)

Para las personas familiarizadas con GIT, con maestría en GIT es equivalente a la del tronco en el SVN.

Rama y etiqueta tiene la misma terminología en ambos GIT y SVN.

Tronco :Después de la finalización de cada sprint en la ágil de salir con una parte del producto entregable.Estas versiones se mantienen en el tronco.

Ramas :Todos los desarrollos paralelos códigos para cada curso sprint se mantienen en las ramas.

Etiquetas :Cada vez que lanzamos una parcialmente enviar a cualquier punto del producto tipo de versión beta, nos hará una etiqueta para ella.Esto nos da el código que estaba disponible en ese momento, lo que nos permite volver a ese estado, si es necesario en algún momento durante el desarrollo.

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