Me hice las mismas preguntas cuando vinimos a implementar Subversion aquí: unos 20 desarrolladores repartidos en 4 a 6 proyectos. No encontré ninguna buena fuente con "la respuesta". Estas son algunas partes de cómo se ha desarrollado nuestra respuesta en los últimos 3 años:
- comprometerse con la frecuencia que sea útil; nuestra regla general es comprometerse siempre que haya realizado un trabajo suficiente para que sea un problema tener que volver a hacerlo si se pierden las modificaciones; 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)
- utilizamos ramas, como sugirió una de sus respuestas anteriores, para diferentes vías de desarrollo; en este momento para uno de nuestros programas tenemos 3 ramas activas: 1 para el desarrollo principal, 1 para el esfuerzo aún no terminado de paralelizar el programa y 1 para el esfuerzo de revisarlo para usar archivos de entrada y salida XML;
- apenas usamos etiquetas, aunque creemos que deberíamos usarlas para identificar lanzamientos a producción;
Piense en el desarrollo siguiendo un camino único. En algún momento o estado de desarrollo, el marketing 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 sea). En otro momento, una chispa brillante decide paralelizar el programa, pero decide que eso llevará 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 horquillas en el camino son donde se dividen las 'ramas'. Ocasionalmente, también, las ramas vuelven a juntarse.
- ponemos todo el material necesario para construir un ejecutable (o sistema) en el repositorio; Eso significa al menos el código fuente y el archivo de creación (o archivos de proyecto para Visual Studio). Pero cuando tenemos íconos y archivos de configuración y todo lo demás, eso va al repositorio. Alguna documentación encuentra su camino en el repositorio; Ciertamente, cualquier documentación como los archivos de ayuda que podrían ser parte integral del programa sí lo es, y es un lugar útil para colocar la documentación del desarrollador.
Incluso ponemos ejecutables de Windows para nuestras versiones 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 es necesario almacenarlas.
- no requerimos que el repositorio en todo momento sea capaz de entregar una última versión que construya y ejecute; algunos proyectos funcionan de esa manera, otros no; la decisión recae en el gerente del proyecto y depende de muchos factores, pero creo que se descompone cuando se realizan cambios importantes en un programa.