tag - Cómo usar SVN, Branch? ¿Etiqueta? ¿El maletero?
subir proyecto a svn (16)
Aquí hay algunos recursos sobre frecuencia de compromiso, mensajes de compromiso, estructura del proyecto, qué poner bajo el control de la fuente y otras pautas generales:
- Mejores prácticas de control de versiones (mi propio blog)
- Check in Early, Check in often (Coding Horror) (los comentarios aquí contienen muchos buenos consejos)
- Política de compromiso de KDE
Estas preguntas sobre el Desbordamiento de pila también contienen información útil que puede ser de interés:
- Organizar la base del código fuente al mezclar dos o más idiomas (como Java y C ++)
- Sugerencias para un buen mensaje de compromiso: formato / guía?
- ¿Con qué frecuencia comprometer cambios al control de la fuente?
- Aprendiendo Control de versiones, y aprendiendo bien
En cuanto a los conceptos básicos de Subversion, como ramificación y etiquetado, creo que esto está muy bien explicado en el libro de Subversion .
Como puede ver luego de leer un poco más sobre el tema, las opiniones de las personas sobre las mejores prácticas en esta área a menudo varían y, a veces, entran en conflicto. Creo que la mejor opción para usted es leer sobre lo que otras personas están haciendo y elegir las pautas y prácticas que cree que tienen más sentido para usted.
No creo que sea una buena idea adoptar una práctica si no entiende el propósito de la misma o si no está de acuerdo con la lógica detrás de ella. Por lo tanto, no sigas ningún consejo a ciegas, sino más bien toma una decisión sobre lo que crees que funcionará mejor para ti. Además, experimentar con diferentes formas de hacer las cosas es una buena forma de aprender y descubrir cómo te gusta trabajar. Un buen ejemplo de esto es cómo se estructura el repositorio. No existe una forma correcta o incorrecta de hacerlo, y a menudo es difícil saber de qué manera lo prefiere hasta que realmente lo haya probado en la práctica.
Estuve buscando en Google un poco y no pude encontrar una buena guía de "principiantes" para SVN , no en el sentido de "¿cómo uso los comandos?"; ¿Cómo controlo mi código fuente?
Lo que me gustaría aclarar son los siguientes temas:
- ¿Con qué frecuencia te comprometes? ¿Con la misma frecuencia que uno presionaría Ctrl + s ?
- ¿Qué es una sucursal y qué es una etiqueta y cómo se controla?
- ¿Qué entra en el SVN? ¿Solo código fuente o comparte otros archivos aquí también? (No se consideran archivos versionados ...)
No tengo ni idea de qué rama y etiqueta es, así que no sé cuál es el propósito, pero mi suposición es que tú cargas cosas al tronco y cuando haces una compilación mayor, ¿la mueves a la rama? Entonces, ¿qué se considera una construcción importante en este caso?
Aquí hay muchos comentarios buenos, pero algo que no se ha mencionado es mensajes de compromiso. Estos deben ser obligatorios y significativos. Especialmente con ramificación / fusión. Esto le permitirá realizar un seguimiento de los cambios relevantes para los errores.
por ejemplo, svn commit . -m ''bug #201 fixed y2k bug in code''
commit . -m ''bug #201 fixed y2k bug in code''
le dirá a cualquiera que mire la historia para qué fue esa revisión.
Algunos sistemas de seguimiento de errores (por ejemplo, trac) pueden buscar en el repositorio estos mensajes y asociarlos con los tickets. Lo que hace que resulte muy fácil calcular qué cambios están asociados con cada ticket.
Como han dicho otros, el SVN Book es el mejor lugar para comenzar y una gran referencia una vez que hayas recuperado tus fuerzas. Ahora, a tus preguntas ...
¿Con qué frecuencia te comprometes? ¿Con la misma frecuencia que uno presionaría ctrl + s?
A menudo, pero no tan seguido como presionas ctrl + s. Es una cuestión de gusto personal y / o política del equipo. Personalmente, diría commit cuando completas una pieza funcional de código, por pequeña que sea.
¿Qué es una sucursal y qué es una etiqueta y cómo se controla?
Primero, tronco es donde haces tu desarrollo activo. Es la línea principal de tu código. Una rama es una desviación de la línea principal. Podría ser una desviación importante, como una versión anterior, o simplemente un ajuste menor que quieras probar. Una etiqueta es una instantánea de tu código. Es una forma de adjuntar una etiqueta o un marcador a una revisión en particular.
También vale la pena mencionar que en subversión, troncales, ramas y etiquetas son solo convencionales. Nada le impide realizar trabajos en etiquetas o tener ramas que son su línea principal, o ignorar el esquema de etiqueta-rama-tronco todo junto. Pero, a menos que tenga una muy buena razón, es mejor seguir con la convención.
¿Qué entra en el SVN? ¿Solo código fuente o comparte otros archivos aquí también?
También una elección personal o de equipo. Prefiero guardar todo lo relacionado con la compilación en mi repositorio. Eso incluye archivos de configuración, scripts de compilación, archivos multimedia relacionados, documentos, etc. No debe verificar los archivos que deben ser diferentes en la máquina de cada desarrollador. Tampoco necesita registrar los subproductos de su código. Estoy pensando principalmente en crear carpetas, archivos de objetos y cosas por el estilo.
Creo que el principal problema es que la imagen mental del control de la fuente está confundida. Comúnmente tenemos troncales y ramas, pero luego obtenemos ideas no relacionadas de etiquetas / lanzamientos o algo que afecta.
Si usas la idea de un árbol más completamente, se vuelve más claro, al menos para mí.
Obtenemos el tronco -> formas ramas -> producir fruta (etiquetas / lanzamientos).
La idea es que crezca el proyecto desde un tronco, que luego crea ramas una vez que el tronco es lo suficientemente estable como para sostener la rama. Luego, cuando la rama ha producido una fruta, la arrancas de la rama y la sueltas como una etiqueta.
Las etiquetas son esencialmente entregables. Mientras que el tronco y las ramas los producen.
Creo que hay dos formas de comprometer la frecuencia:
- Comprometerse muy a menudo, por cada método implementado, pequeña parte del código, etc.
- Commita solo partes de código completadas, como módulos, etc.
Prefiero el primero, porque el uso del sistema de control de fuente es muy útil no solo para proyectos o empresas, lo primero de todo es útil para el desarrollador. Para mí, la mejor característica es retrotraer todo el código mientras busco la mejor implementación de tareas asignadas.
El libro de subversión es una excelente fuente de información sobre estrategias para diseñar su repositorio, ramificación y etiquetado.
Ver también:
El Manual TortoiseSVN TSVN se basa en el libro de subversión , pero está disponible en muchos más idiomas.
Eric Sink, quien apareció en SO podcast # 36 en enero de 2009, escribió una excelente serie de artículos bajo el título Source Control How-to .
(Eric es el fundador de SourceGear que comercializa una versión compatible con plug-ins de SourceSafe, pero sin la horrible).
La frecuencia de compromiso depende de su estilo de gestión de proyectos. Mucha gente se abstiene de comprometerse si rompe la construcción (o funcionalidad).
Las ramas se pueden utilizar de una de estas dos formas, por lo general: 1) Una rama activa para el desarrollo (y la troncal se mantiene estable), o 2) ramas para rutas de desarrollo alternativas.
Las etiquetas generalmente se usan para identificar lanzamientos, para que no se pierdan en la mezcla. La definición de ''liberación'' depende de usted.
La política de nuestro trabajo es la siguiente (equipo de desarrolladores múltiples que trabaja en el marco orientado a objetos):
Actualiza desde SVN todos los días para obtener los cambios del día anterior
Comprométase todos los días, de modo que si está enfermo o ausente al día siguiente, otra persona puede hacerse cargo fácilmente de donde lo dejó.
No confíe código que rompa cualquier cosa, ya que afectará a los otros desarrolladores.
¡Trabaja en trozos pequeños y comprométete todos los días CON COMENTARIOS SIGNIFICATIVOS!
Como equipo: mantenga una rama de Desarrollo, luego mueva el código de prelanzamiento (para QA) a una rama de Producción. Esta sucursal solo debería tener código de trabajo completo.
Me hice las mismas preguntas cuando llegamos a implementar Subversion aquí: unos 20 desarrolladores distribuidos en 4 a 6 proyectos. No encontré una buena fuente con '''' la respuesta ''''. Aquí hay algunas partes de cómo se desarrolló nuestra respuesta en los últimos 3 años:
- cometer tan a menudo como sea útil; nuestra regla de oro es comprometerse cada vez que haya realizado suficiente trabajo que sería un problema tener que volver a hacerlo si las modificaciones se perdieran; a veces me comprometo cada 15 minutos más o menos, otras veces pueden ser días (sí, a veces me lleva un día escribir 1 línea de código)
- usamos ramas, como sugirió una de sus primeras respuestas, para diferentes caminos de desarrollo; ahora mismo para uno de nuestros programas tenemos 3 sucursales activas: 1 para el desarrollo principal, 1 para el esfuerzo aún por finalizar para paralelizar el programa, y 1 para el esfuerzo de revisarlo para usar archivos de entrada y salida XML;
- apenas utilizamos etiquetas, aunque creemos que deberíamos usarlas para identificar lanzamientos a la producción;
Piense en el desarrollo de un camino único. En algún momento o estado de desarrollo, la comercialización decide lanzar la primera versión del producto, por lo que coloca una bandera en la ruta etiquetada ''1'' (o ''1.0'' o lo que tenga). En otro momento, una chispa brillante decide paralelizar el programa, pero decide que tomará semanas y que la gente quiere seguir por el camino principal mientras tanto. Entonces construyes una bifurcación en el camino y diferentes personas deambulan por las diferentes bifurcaciones.
Las banderas en el camino se llaman ''etiquetas'', y las bifurcaciones en el camino se dividen en ''ramas''. Ocasionalmente, también, las ramas vuelven a estar juntas.
- ponemos todo el material necesario para construir un ejecutable (o sistema) en el repositorio; Eso significa al menos el código fuente y hacer un archivo (o archivos de proyecto para Visual Studio). Pero cuando tenemos iconos y archivos de configuración y todo eso, va al repositorio. Algunos documentos encuentran su camino en el repositorio; Ciertamente, cualquier documentación, como los archivos de ayuda que podrían ser parte integral del programa, y es un lugar útil para colocar la documentación del desarrollador.
Incluso ponemos ejecutables de Windows para nuestros lanzamientos de producción allí, para proporcionar una ubicación única para las personas que buscan software: nuestras versiones de Linux van a un servidor, por lo que no necesitan almacenarse.
- no exigimos que el repositorio en todo momento sea capaz de ofrecer una versión más reciente que compila y ejecuta; algunos proyectos funcionan de esa manera, otros no; la decisión depende del administrador del proyecto y depende de muchos factores, pero creo que se rompe cuando se realizan cambios importantes en un programa.
Otros han declarado que depende de su estilo.
La gran pregunta para usted es con qué frecuencia "integra" su software. El desarrollo impulsado por pruebas, Agile y Scrum (y muchos, muchos otros) se basan en pequeños cambios y una integración continua. Predican que se hacen pequeños cambios, todos encuentran los descansos y los arreglan todo el tiempo.
Sin embargo, en un proyecto más grande (piense en gobierno, defensa, 100k + LOC) simplemente no puede usar la integración continua ya que no es posible. En estas situaciones, puede ser mejor utilizar la bifurcación para realizar muchos commits pequeños, pero traer de vuelta al trunk Only lo que funcionará y está listo para integrarse en la compilación.
Sin embargo, una advertencia con ramificaciones es que si no se gestionan adecuadamente, puede ser una pesadilla en el repositorio para obtener trabajo en el tronco, ya que todo el mundo está desarrollando desde diferentes puntos en el tronco (que es uno de los mayores argumentos para integración continua).
No hay una respuesta definitiva sobre esta cuestión, la mejor manera es trabajar con su equipo para llegar a la mejor solución de compromiso.
Para cometer, utilizo las siguientes estrategias:
comprometerse tan a menudo como sea posible.
Cada cambio de característica / corrección de errores debe obtener su propio compromiso (no confíe muchos archivos a la vez, ya que eso dejará poco claro el historial de ese archivo; por ejemplo, si cambio un módulo de registro y un módulo GUI de forma independiente y confirmo ambos a la vez; ambos cambios serán visibles en ambos historiales de archivos. Esto dificulta la lectura del historial de archivos),
no rompa la compilación en ningún compromiso: debería ser posible recuperar cualquier versión del repositorio y compilarlo.
Todos los archivos necesarios para compilar y ejecutar la aplicación deben estar en SVN. Los archivos de prueba y otros no deberían, a menos que sean parte de las pruebas unitarias.
Solo para agregar otro conjunto de respuestas:
- Me comprometo cada vez que termino un trabajo. A veces es una pequeña corrección de errores que acaba de cambiar una línea y me tomó 2 minutos para hacerlo; otras veces son dos semanas de sudor. Además, como regla general, no comprometes nada que rompa la construcción. Por lo tanto, si le ha tomado mucho tiempo hacer algo, tome la última versión antes de comprometerse y vea si sus cambios interrumpen la construcción. Por supuesto, si paso mucho tiempo sin comprometerme, me inquieta porque no quiero perder ese trabajo. En TFS utilizo esta cosa bonita como "juegos de estanterías" para esto. En SVN tendrás que trabajar de otra manera. Tal vez cree su propia rama o haga una copia de seguridad de estos archivos manualmente en otra máquina.
- Las ramas son copias de todo tu proyecto. La mejor ilustración para su uso es quizás la versión de productos. Imagine que está trabajando en un proyecto grande (por ejemplo, el kernel de Linux). Después de meses de sudor finalmente has llegado a la versión 1.0 que lanzas al público. Después de eso, empiezas a trabajar en la versión 2.0 de tu producto, que será mucho mejor. Pero, mientras tanto, también hay mucha gente que usa la versión 1.0. Y estas personas encuentran errores que debes arreglar. Ahora, no puede corregir el error en la próxima versión 2.0 y enviarlo a los clientes; no está listo en absoluto. En su lugar, tiene que sacar una copia anterior de la fuente 1.0, corregir el error allí y enviarlo a la gente. Esto es para lo que son las ramas. Cuando lanzó la versión 1.0 creó una rama en SVN que hizo una copia del código fuente en ese punto. Esta rama fue nombrada "1.0". Luego continuó trabajando en la próxima versión en su copia fuente principal, pero la copia 1.0 permaneció allí tal como estaba en el momento del lanzamiento. Y puedes continuar corrigiendo errores allí. Las etiquetas son solo nombres adjuntos a revisiones específicas para facilitar su uso. Podría decir "Revisión 2342 del código fuente", pero es más fácil referirse a ella como "Primera revisión estable". :)
- Normalmente pongo todo en el control de fuente que se relaciona directamente con la programación. Por ejemplo, dado que estoy haciendo páginas web, también pongo imágenes y archivos CSS en control de fuente, sin mencionar los archivos de configuración, etc. La documentación del proyecto no entra ahí, sin embargo, eso es solo una cuestión de preferencia.
Version Control with Subversion es la guía para principiantes y veteranos.
No creo que puedas usar Subversion efectivamente sin leer al menos los primeros capítulos de esto.
* How often do you commit? As often as one would press ctrl + s?
Tan seguido como sea posible. El código no existe a menos que esté bajo control de fuente :)
Las confirmaciones frecuentes (a partir de entonces, conjuntos de cambios más pequeños) le permiten integrar sus cambios fácilmente y aumentar las posibilidades de no romper algo.
Otras personas notaron que debes comprometerte cuando tienes una pieza funcional de código, sin embargo, me parece útil comprometerse un poco más a menudo. Pocas veces noté que uso control de fuente como un mecanismo rápido de deshacer / rehacer.
Cuando trabajo en mi propia rama, prefiero comprometerme tanto como sea posible (literalmente tan seguido como presiono ctrl + s).
* What is a Branch and what is a Tag and how do you control them?
Lee el libro de SVN : es un lugar donde debes comenzar cuando aprendas SVN:
* What goes into the SVN?
Documentación, pequeños binarios necesarios para compilación y otras cosas que tienen algún valor para control de fuente.