Buscando consejos sobre las mejores prácticas de SubVersion, la ramificación y el aspecto social

Mi equipo y yo actualmente usamos Perforce para control de revisiones. Solíamos enviar todo al maletero hasta que un día necesitábamos agregar varios elementos al progtwig, así que creamos una twig para mi jefe y una twig para mí y otra twig para probar. Todo funciona bien hasta que tratamos de fusionar las twigs con el tronco. Tenemos Visual Studio (VS) y genera files de solución que, por alguna razón, no funciona bien con Perforce. Después de un gran esfuerzo, fusionamos parcialmente la twig en el tronco. Estoy pensando en pasar a la subversión. Tengo Subversion en mi PC local y no tengo problemas con la bifurcación y mantenimiento de Visual Studio. Le sugerí a mi jefe que se mudara a SVN. Mientras que mi jefe está abierto a la idea de mover medio millón de líneas de código, necesito build un caso sólido para ello. Soy el progtwigdor de posgrado más reciente, así que déjeme decir que mis ideas necesitan más carne que las demás =)

Decidí instalar SVN en uno de nuestros serveres y le pasé el código. No vamos a deshacernos de Perforce pronto, pero mi objective es matarlo de una manera muy lenta y pervirtiendo a mis compañeros de equipo sobre lo fácil que es usar SVN y ya tengo una persona en mi bote.

Como podría configurar SVN desde cero, quiero aplicar las mejores prácticas del SVN. Leí el libro de frijoles rojos y estoy planeando seguir el layout de sus repositorys y sus sugerencias de respaldo, pero tengo más preguntas relacionadas con problemas sociales y de ramificación. A continuación están mis preguntas para el problema social,

  1. ¿Hay alguna manera de prevenir los conflictos de origen de una manera social? Si es así, ¿cuál es la mejor manera de comunicar cambios conflictivos?

  2. Estoy planeando instalar un CMS en ese server también. Entonces mis compañeros de equipo pueden escribir o comunicar que tienen sucursales y similares, pero no sé si hay otras herramientas para rastrear el historial de salud y los errores de nuestro proyecto.

  3. Aunque mi empresa practica el enfoque de gestión plana, ¿cómo puede un novato como yo convencer o hacer cumplir la comunicación social con los progtwigdores senior sin romper la invisible jerarquía "senior"?

Para ramificación y labeldo,

  1. No quiero que otros equipos hagan ramificaciones para agregar un código "Hello, World!" Al progtwig. Quiero tratar la ramificación como algo fuera de lo común. ¿Alguien puede darme una regla general sobre cuándo agregar crear una twig? Cuándo fusionarse?

  2. ¿En qué caso la ramificación de una twig es una buena idea?

  3. Para el labeldo, entiendo que la label simboliza un punto estático del progtwig (es decir: v1.0, v2.5) ¿es correcto?

  4. Si creo una twig y empiezo a escribir mis cambios, ¿deberían mis compañeros comenzar a sincronizar desde mi sucursal? ¿O deberían desarrollarse en el maletero? ¿O deberían crear otra twig para ellos?

Me disculpo por todas mis preguntas, pero cuando se trata de control de revisiones, siento que estoy nadando en el Golfo de México durante la limpieza de BP.

Sin ningún order en particular:

  • Su mejor defensa contra los conflictos excesivos es un proyecto bien diseñado. El código DRY que separa las preocupaciones hace posible implementar cambios sin desgarrar todo el proyecto. Si un cambio en el código central requiere actualizaciones en el 50% de sus files fuente, los conflictos serán comunes.
  • Cuando hagas un cambio, pisa ligeramente. No refactorice una function que no forma parte de sus requisitos de cambio solo porque no le gusta su aspecto. Es perfectamente razonable que dos desarrolladores realicen cambios en la misma fuente, siempre y cuando estén trabajando en diferentes asuntos. La fusión de SVN funciona muy bien siempre que no intentes fusionar el mismo cambio implementado dos veces por diferentes desarrolladores. Haga que la refactorización sea parte de un plan de cambio.
  • Evalúe las herramientas que se encuentran encima de SVN y brinde a su equipo otra perspectiva sobre los cambios de código. Trac y Fisheye son ejemplos.
  • Utiliza juiciosamente los scripts de gancho para enviar notifications o actualizar una wiki de proyecto. Esto funciona mejor que recordarles a las personas que envíen notifications de forma manual. Tenga en count que si notifica con demasiada frecuencia las personas ignorarán sus notifications.
  • Considere la continuous integration para que los desarrolladores reciban retroalimentación inmediata sobre sus cambios. Hudson es una buena herramienta que se integra con SVN. Las herramientas de continuous integration a veces también incluyen integración con herramientas sociales. Los notificadores de compilation de Hudson son ejemplos.
  • Las sucursales funcionan bien para los cambios que no se ajustan a un solo ciclo de desarrollo de lanzamiento o cuando los cambios romperán el proyecto para el rest del equipo (siempre bifurcan versus esperen semanas para registrarse). Las opiniones difieren sobre cuándo ramificarse. Solo asegúrese de que su equipo esté de acuerdo con un enfoque para que los resultados sean consistentes.
  • Las tags son utilizadas de manera diferente por diferentes equipos, pero por número de versión o versión suena razonable.
  • Solo los desarrolladores que trabajan en las características de una sucursal deberían trabajar en esa twig.
  • Combine temprano y a menudo de tronco a twig. Esto hace que la fusión final de vuelta al tronco sea mucho más fácil.
  • Mientras realice un cambio, evalúe los sistemas de control de versiones distribuidas como Git o Mercurial antes de tomar una decisión.

De hecho, me gusta Perforce, y creo que Perforce hace un mejor trabajo en el seguimiento de la fusión que Subversion, pero hay algunos problemas con Perforce y uno es su integración con herramientas de terceros, especialmente VisualStudio. Y eso (más el hecho de que a los desarrolladores no les gusta demasiado) ha hecho que sea difícil recomendarlo en muchos sitios.

Si va a presentar un caso para comenzar a pasar a Subversion, diría que su mejor táctica es la integración en sus herramientas actuales, y el hecho de que Subversion tiene más puntos de integración con otras herramientas de terceros.

Aquí hay algunos puntos que acertaría:

  • La integración de Subversion con VisualStudio es más clara y simple.
  • Subversion se integra en más herramientas de terceros. Parte de esto es que Subversion es más simple y más limpia. No hay puntos de vista No tiene que marcar los files para editarlos. Puede crear un directory de trabajo en cualquier lugar que desee. Parte de esto también es que Subversion es más popular, por lo que la mayoría de las herramientas de terceros se dan count de que si quieren una oportunidad para ser utilizadas, deben integrarse con Subversion.

También puede señalar las similitudes entre Subversion y Perforce, y las características que le gustan de Perforce están en Subversion:

  • Tanto Perforce como Subversion practican la ramificación entre files . Ese es el término de Perforce para usar directorys como sucursales.
  • Tanto Subversion como Perforce usan lists de cambios / sets de cambios (cualquiera que sea el término que use). En Perforce, los sets de cambios son adicionales al control de versiones del file. En Subversion, la revisión del repository es el set de cambios.
  • Tanto Subversion como Perforce practican commits atómicos.

La mejor práctica es mirar más allá de las herramientas, especialmente el sistema de control de versiones. Necesitará herramientas de seguimiento de defectos, un sistema de compilation continua y un repository de versiones. La mejor práctica es acerca de la comunicación y la confianza:

  • ¿Confías en tu sistema de compilation?
  • ¿Puedes crear la construcción una y otra vez?
  • ¿Sabes qué entró en tu construcción?
  • ¿El equipo de control de calidad sabe qué probar? ¿Saben qué defectos se arreglaron en una construcción en particular?
  • ¿Los desarrolladores saben qué defectos se encontraron?
  • ¿Sus desarrolladores saben qué características deberían agregar o los defectos que deben corregir?
  • ¿Cómo se sabe si una construcción en particular ha sido aprobada para su lanzamiento?

Si puede mostrar cómo planea responder estas preguntas, puede build un caso sólido para sus planes. Muestre cómo Subversion encaja en estos planes. Muestre cómo funciona mejor con VisualStudio y cómo mejorará el trabajo del desarrollador.

Le recomiendo que busque en Nant si está creando aplicaciones .NET. (Asumo que haces tu compilation oficial abriendo VisualStudio y presionando F5 o lo que sea que haga la compilation. Si no estás haciendo esto, estás muy por delante del 90% de los sitios de VisualStudio que he visto). A continuación, puede utilizar Hudson como su server de compilation continua. Hudson también puede actuar como un repository de versiones ya que puede almacenar los artefactos construidos. Esto significa que las personas pueden acceder fácilmente a la compilation oficial.

Lo mejor es que a través de los complementos de Hudson, puede marcar qué comstackciones son versiones oficiales, comstackciones de tags, etc. Se integra con Jira, Track, Bugzilla, MantisBT y docenas de otros sistemas de seguimiento de defectos. También funciona con Redmine, que incluye un sistema de seguimiento de defectos, tablero de posts, charts, wiki, etc. Esa es otra herramienta que puedes usar.

La idea es definir los problemas, definir las soluciones y mostrar cómo las herramientas como Subversion pueden encajar en ellas.

Recuerde que las mejores prácticas no son solo una metodología única que se puede repetir una y otra vez. Es una forma de entender tu proyecto. Es asegurarse de que todos sepan lo que está pasando. Es asegurarse de que todos tengan plena confianza en el process. Se está asegurando de que sepa exactamente lo que está sucediendo en su producto.

Hay todo tipo de sugerencias que las personas repiten una y otra vez sobre las mejores prácticas: Repetibilidad, detectar defectos de manera temprana, automatizar todo, desarrollo ágil, tomar pequeñas mordidas en lugar de hacer cambios masivos, no romper la construcción, etc. Pero estos son simplemente medios hasta el final. Tenga en count el outlook general.

También me parece que es absolutamente importante vender las herramientas a las personas que las usan, y que tal vez lo que usted ve como una gran ventaja no es tan bueno para un desarrollador. Los desarrolladores desean poder get el file que necesitan, modificarlo y verificar su cambio. No les importa si es Perforce o Subversion o CVS. No les importan los sets de cambios o las comprobaciones atómicas. No les importa la ramificación de Interfile. Simplemente quieren saber que están buscando el file correcto, y que cuando hacen un cambio, se entrega. Si vas a vender Subversion, les dices a los desarrolladores cómo mejorará su process y les facilitará la vida.

Mantenga las cosas simples también. Una mano ligera con SCM es lo mejor. Si las personas encuentran el process arduo, harán todo lo posible para evitarlo.

Couriosity simplemente brilla por sus preguntas;) – trate de no perderse haciendo / pensando demasiadas cosas a la vez.

Entonces para responderles preguntas …

1. ¿Hay alguna manera de prevenir los conflictos de origen de una manera social? Si es así, ¿cuál es la mejor manera de comunicar cambios conflictivos?

Ningún software convencional de control de fonts del que soy consciente trae una notificación bien implementada sobre el posible trabajo en conflicto antes de que dicho trabajo se integre entre sí (fusionado). Además de DRY y la separación de preocupaciones, como mencionó Corbin March, creo que "actualizar diariamente", "comprometerse temprano, comprometerse a menudo" y "sucursal tarde" (ver a continuación) son prácticas comunes.

Sin embargo, comprometerse temprano tiene sus límites. Syntax-Error Free y dependiendo de su sistema de seguimiento de errores / organización de tareas, solo se deben comprometer los artefactos de trabajo completos.

Realmente no se requieren muchas habilidades sociales para pedir ayuda cuando se encuentra con un conflicto fuente que no puede resolver usted mismo, en mi humilde opinión.

2. Estoy planeando instalar un CMS en ese server también. Entonces mis compañeros de equipo pueden escribir o comunicar que tienen sucursales y similares, pero no sé si hay otras herramientas para rastrear el historial de salud y los errores de nuestro proyecto.

Esto suena como un enfoque bastante "distribuido". No como en el lugar sino como en la responsabilidad. Estás creando productos de software y haces algún tipo de lanzamiento ocasionalmente, ¿verdad? Por lo tanto, la responsabilidad debe boost y centrarse en la mayor "stream descendente" que se obtiene. Las únicas twigs con las que todo el equipo debe familiarizarse son las twigs de publicación para arreglar cosas (sin características) y su línea principal (troncal). Todas las demás funciones, twigs de características, twigs de integración, twigs de "respaldo", twigs privadas, etc. deben ser administradas por quienes las soliciten o las apliquen. ¿Por qué debería usted o su colega "A" cuidar de que su colega "B" haya ramificado la línea principal para desarrollar su function experimental en paz? El colega "B" al desarrollar algo innovador, tiene la responsabilidad de su sucursal y mantenerla COMPATIBLE con la línea principal. O bien constantemente fusionando los cambios desde la línea principal a su twig o antes de la reintegración de su nuevo código. Ramas de integración de investigación si quieres saber más.

En cuanto al set de herramientas … Cualquier bugtracker que sea bien integrable dentro de SVN (Jira, trac, mantis, networkingmine …) debería hacer el trabajo. Pero no entiendo cómo esta parte de la pregunta se relaciona con sus problemas de conflicto.

3. Aunque mi empresa practica el enfoque de administración plana, ¿cómo puede un novato como yo convencer o hacer cumplir la comunicación social con los progtwigdores senior sin romper la invisible jerarquía "senior"?

Creo que sobreestimar la cantidad de comunicación que se requiere en un flujo de trabajo bien engrasado. Lo que mencionas indica que tu compañía no tiene un flujo de trabajo donde peleas los conflictos desde la raíz (ver 1. y 2.) que en tu caso hace que sea necesaria una mayor comunicación, posiblemente generando una sobrecarga innecesariamente alta. Tener un CMS o algún tipo de sistema de marcado "Yo trabajo aquí" aún podría valer la pena.

Usted indicó que a algunos desarrolladores sénior no les gusta hablar ni socializar tanto, incluso en casos de conflicto, cuando deberían hacerlo mejor. No dejes que se salgan con la suya haciendo fusiones por ellos. Las fusiones deben ser hechas por los propietarios de las sucursales. Cuando hay conflictos, al less uno de los lados en conflicto tiene que decidir sobre los cambios. Lo ideal es que ambas partes se sienten juntos en las diferencias, pero no un tercero inicialmente no involucrado con la fuente en cuestión. El fracaso en la resolución de conflictos (seleccionando los cambios incorrectos) puede provocar la rotura de la construcción o, incluso peor, errores no detectados. La gente necesita estar al tanto.

Actuar como mediador no es fácil si el desarrollador principal "A" (fusionando los cambios principales en su sucursal) maldice sobre conflictos pero no habla con el desarrollador principal "B" cuyos cambios principales están en conflicto con los suyos. Si no es como cruzar una línea para ti, intenta hablar con el desarrollador B y convencerlo de que se acerque a A para resolver el conflicto más rápido y less propenso a errores.

Pero, una vez más, al final es responsabilidad del desarrollador "A", no de usted. Pareces dar un ejemplo ya a tus compañeros de trabajo. Si eso no es suficiente, trate de señalar cuidadosamente que la comunicación insuficiente fue la razón de una construcción rota cuando sucede. Tal vez hable con un adulto mayor en privado sobre sus pensamientos, sea abierto pero no acusador. Un "Podríamos mejor" suena mejor que "Ustedes lo están haciendo mal". Y para ti, como profesional más joven, frases como "Me sentiría mejor con mi código si me dices si entran en conflicto con el tuyo" podrían ser más apropiadas que "Deberías pedir un segundo par de ojos a la persona adecuada cuando consigas conflictos ", aunque el último es más directo.

Si todo esto no ayuda, podría considerar hablar con su jefe o líder del equipo sobre las barreras que encuentra. Si él no es un tonto, él / ella escuchará.

Para ramificación y labeldo

1. No quiero que otros equipos hagan ramificaciones para agregar un código "Hello, World!" Al progtwig. Quiero tratar la ramificación como algo fuera de lo común. ¿Alguien puede darme una regla general sobre cuándo agregar crear una twig? Cuándo fusionarse?

Para Fusionar, vea la Pregunta 4. a continuación.

Para Branching: tienes toda la razón al tratar de tener tan pocas twigs como sea necesario. La ramificación tiene un precio. Complejidad, fusión de sobrecarga, etc. Tiendo a "ramificarme en una política incompatible". ¿Qué política preguntas? Cada una de sus twigs principales debe tener un set de reglas documentadas adjuntas a ellas.

Ejemplos:

  • tag-2.0.4
    • no se permiten commit
  • lanzamiento-2
    • solo se corrigen las características existentes permitidas
    • los checkins deben tener calidad de lanzamiento
  • el maletero
    • debe comstackr / validar
    • Extendiendo API desarrollada permitida
    • renombrar y eliminar la API prohibida
    • solo completa los errores del rastreador
    • recibe fusiones de sucursales de lanzamiento
  • feature-apirefactoring
    • puede alterar la API desarrollada y romper la compatibilidad
    • extraer fusiones del tronco es una tarea de desarrolladores de características

Ves que hay 3 twigs ficticias y una label. El "fair-apirefactoring" es un ejemplo para una "twig en política incompatible" correctamente aplicada.

Las sucursales se deben usar para mitigar riesgos y boost la eficiencia mediante la split de diferentes types de actividad de desarrollo. Las políticas de las sucursales definen individualmente qué desarrollo y potenciales de riesgo son aceptables. ¿Quieres que tu maletero sea más estable? Defina una nueva política "No introducir advertencias del validador W3C". Si el trabajo de desarrollo innovador tiene que romper esta regla por el bien de la eficiencia o para proporcionar una testing rápida de concepto (nos abrimos primero y la limpieza más tarde) es un buen candidato para su propia sucursal.

Cada vez que usted o un compañero de trabajo sienta la necesidad de infringir una regla porque sería más simple o más seguro NO cumplir con una política determinada, está en una buena forma de hablar sobre la creación de una sucursal.

2. ¿En qué caso la ramificación de una twig es una buena idea? respondido arriba, creo :).

Algunos ejemplos que encontré:

  • Rama estable del tronco cuando se prepara el lanzamiento (sin nuevas características)
  • Rama de integración de sucursales desde la twig de características cuando la integración es demasiado compleja y consume mucho time
  • ramifique una twig de publicación de "edición especial" desde una versión estable que tenga algunas características exclusivas o ciertas diferencias posiblemente inestables para un cliente especial.
  • ramifique una twig de traducción desde su tronco que solo obtiene cambios en la networkingacción y, por lo tanto, no puede romper

Hay docenas más Mientras más detalladas sean sus políticas, más exótica será su ramificación.

3. Para el labeldo, entiendo que la label simboliza un punto estático del progtwig (es decir: v1.0, v2.5) ¿es correcto?

Sí. Para la subversión, se puede describir como un alias. "/tags/1.7.2" podría ser el estado del proyecto tal como estaba en la revisión 30932. Puede anotar el número de revisión cuando una versión determinada estaba list y comparar sus fonts más nuevas o crear una salida de este estado anterior . O puede usar el nombre de label más fácil de recordar.

Una label en subversión también no es más que una twig que no recibe ninguna confirmación.

4. Si creo una twig y comienzo a escribir mis cambios, ¿deberían mis compañeros comenzar a sincronizar desde mi sucursal? ¿O deberían desarrollarse en el maletero? ¿O deberían crear otra twig para ellos?

Respuesta corta: cuando tengas dudas, utiliza el maletero y no te fusione (sincronizar, empujar, tirar).

Respuesta larga: en un mundo ideal, no habría necesidad de sucursales, ya que todos los desarrolladores recibirán todos los cambios que el equipo verifique, al instante cuando ocurra. En un mundo ideal, estos cambios no entrarían en conflicto con ningún desarrollador que tenga un trabajo no comprometido. Lo que sea que un desarrollador compruebe dentro de mi mundo ideal también es completamente correcto, libre de fallas y fallas.

Por desgracia, un mundo de progtwigdores no es perfecto. Por lo tanto, crea twigs para protegerse de los cambios que hacen sus compañeros de trabajo o aísla sus cambios para no manchar una línea principal limpia, a veces ambas.

La dirección del flujo de cambio (Tus compañeros de trabajo te atraen o tiras de tus compañeros de trabajo) depende del riesgo que se espera en una sucursal. ¿Cuánto riesgo sería "tirar" (fusionar) los cambios que se verifican en una twig de publicación? En cuanto a las políticas definidas anteriormente, solo deberían ser correcciones de errores. El riesgo parece bajo Para la mayoría de los escenarios de release-branch, fusionarse con ellos en el turn es absolutamente necesario ya que tendrías que volver a corregir los errores a mano antes de que se cree la siguiente twig de publicación desde tu trunk.

¿Cuánto riesgo de romper su propio trabajo precioso, o tener que modificar su propio código, se encontraría en la fusión de los cambios de la function de apirefactoring en la salida del maletero? Puede desarrollar nuevas funcionalidades, mejorando una llamada de API que su compañero de trabajo que posee la twig de características decidió replace con una implementación completamente nueva. Esto podría matar el estado de ánimo.

La escala de tofu

Creo que fue la gente inteligente forzosa la primera en mencionar la escala "tofu". (puede search en google o leer estas diapositivas http://www.perforce.com/perforce/conferences/us/2005/presentations/Wingerd.pdf ).

Además de una política por twig, usted estima su "firmeza" y, a través de ella, su position en la escala de tofu.

Una twig de características es "suave", ya que está en flujo constante, no está bien probado y, en su mayoría, lejos de los ojos de los clientes que pagan. Por lo tanto, también es más capaz de absorber los cambios. Si las cosas se rompen, quiere que se rompan en twigs "más suaves".

Su tronco sería "mediano", ya que no está listo para su lanzamiento, pero mejor probado que una twig de características remotas. (y mucho less porque más desarrolladores revisan el tronco que las twigs de características). Podría distraer a los desarrolladores si aparecen enormes cambios de compatibilidad en la troncal sin una integración adecuada, pero los loggings de tamaño normal pueden empaparse bastante bien.

Las sucursales de lanzamiento se encuentran entre las twigs "más firmes", ya que están bien establecidas, probadas y, en ocasiones, a solo unas horas de un uso productivo. Si rompes esta "rebanada de tofu" es un dolor más grande para unir. Por otro lado, usted tiene una mejor idea de lo que está entregando en estas sucursales y una mayor confianza (si no es una testing unitaria) de que funciona bien.

Debes orderar las twigs por su position en la escala de tofu. Suave hasta el background, firme en la parte superior.

  • tags (muy firmes)
  • lanzamiento-2 (firme)
  • tronco (medio)
  • feature-apirefactoring (soft)

La mejor práctica que dice es "Fusionar hacia abajo, copyr hacia arriba" .

Mejor aún "Fusionar hacia abajo, copyr en estado estable "

Fusionar:

  • Todos los commits que fueron en la versión 2, debes unirte al trunk tan a menudo como sea posible. (Bugfix-committer debería hacer esto)
  • Todos se envían al tronco, incluidas las correcciones fusionadas de las twigs de publicación, debe fusionarse en sus twigs de características con la mayor frecuencia posible. (Característica: el propietario debería hacer esto)

"Copiar" arriba:

  • Cuando el trabajo en una twig de características se completa, "reintegre". Use el SVN –reintegrate merge o realice una última fusión en la twig de características y luego copie todos los files relevantes. –reintegrate fusion es muy recomendable.
  • Cuando decida que es hora de estabilizar su baúl y enfocarse en un nuevo lanzamiento pronto, ramifique su baúl en un nuevo "lanzamiento-3", por ejemplo. En SVN, la bifurcación es copyr y viceversa.
  • Cuando su versión se soluciona con errores, se testing y funciona bien, nuevamente se copy en una nueva label de lanzamiento

Por último, pero no less importante, lea este documento de mejores prácticas. Otra vez por chicos forzados;) http://www.perforce.com/perforce/papers/bestpractices.html

Buscar stackoverflow o echar un vistazo a mi perfil para ver más preguntas y respuestas sobre SVN.

Ah, y saber cómo triunfaste en tus legítimas ambiciones sería agradable.

Ten un buen fin de semana

do

Si bien Subversion es una buena herramienta en lo que hace, su punto fuerte ciertamente no se está fusionando. Esto se debe principalmente a que la subversión no tiene un mecanismo que rastree las fusiones: no se puede ver en el historial donde algo se fusionó.

Así que mi sugerencia es usar un sistema de control de versiones que apoye adecuadamente la fusión, o no lo haga. Te ahorrarás mucho dolor. Git parece ser el más popular en este momento (y parece que hay integración con Visual Studio , y un puerto de tortn svn para Windows). Sin embargo, Mercurial , Bazaar y similares también son opciones viables.

Estas herramientas pueden ser un poco más complicadas que svn al principio, pero si quiere ramificarse y fusionarse regularmente, valdrá la pena.

Pero incluso con esas herramientas, la fusión se vuelve difícil si una twig vive lo suficiente. Ninguna herramienta en el mundo te ayudará con eso.

Así que piense mucho si realmente necesita ramificarse, o si simplemente lo hace y vive con SVN (o forzosamente).

No ramificarse y fusionarse es probablemente más fácil de lo que parece. Lo que debe hacer es establecer una continuous integration (alguien ya mencionó a Hudson ): esto hará que todos sepan cuándo algo rompe las testings. Si tiene eso en su lugar, los diferentes miembros del equipo pueden trabajar en diferentes funciones sin problemas, incluso en la misma sucursal.

La continuous integration funcionará mucho más suavemente que la lucha con twigs y la herramienta de fusión; aunque deberías tener una suite de testing decente.

Si piensas en la ramificación para un "gran cambio", no lo hagas. En cambio, desarrolle el gran cambio gradualmente en el tronco. Esto será mucho más fácil que tratar de integrar un montón de cambios después de algunas semanas.

Finalmente, si quieres experimentar, solo ramifícate, no importa cuál sea la herramienta. Las twigs experimentales casi nunca se fusionarán con el desarrollo principal, de todos modos 😉 (Y sí, hablo por experiencia)

El único escenario para el que realmente necesita twigs avanzadas sería si tiene que desarrollar y rastrear varias versiones / configuraciones de su producto al mismo time. En ese caso, definitivamente debe optar por una herramienta de control de versiones avanzada.

Nunca he usado forzosamente, así que no puedo comentar las diferencias (mejores o peores).

Sin embargo, si usted es un usuario de Visual Studio, hay una gran cantidad de soporte para svn-integration (consulte ANKHsvn (incluso funciona con el último vs2010) y TortoiseSVN un cliente de Windows y una extensión de shell.

Se han hecho muchos puntos importantes aquí, pero no puedo enfatizar cuán valioso es un server de Integración constante, que es fácil de configurar usando algo como CruiseControl.Net , que tiene herramientas como CCTray para acompañarlo …

De todos modos, divergí, y aunque esta no es la respuesta perfecta, debería proporcionar algo de reflexión.

Entiendo lo que puede significar tratar de controlar las revisiones: me encanta la analogía, a veces también me siento así.

Estos chicos ya han recibido algunos buenos consejos, pero si desean algo más práctico, tal vez con una demostración, les recomiendo que consulten nuestros seminarios web de Subversion. Estamos cubriendo la bifurcación y la fusión a fines de enero, con una class introductoria seguida de una session más avanzada. Esta podría ser una herramienta realmente útil si todavía te sientes un poco confundido, ya que habrá una demostración práctica.

También estamos haciendo una class de 'Mejores Prácticas de Administración de Subversion' si esto suena como algo en lo que a usted o un equipo les gustaría sentarse.

Aquí está el enlace: http://www.wandisco.com/webinar/subversion/training para que lo eche un vistazo, y si algo lleva su firma de lujo, es totalmente gratis y hemos tratado de hacer classs sobre temas que los desarrolladores han pedido. ¡Espero que esto ayude!

Lesley