¿Cómo se hace una compilation que incluye solo uno de muchos cambios pendientes?

En mi entorno actual, tenemos una máquina de construcción "limpia", que tiene una copy exacta de todos los cambios comprometidos, nada más y nada less.

Y, por supuesto, tengo mi propia máquina, con docenas de files en estado "en curso".

A menudo necesito build mi aplicación con solo un cambio en el lugar. Por ejemplo, he terminado la tarea ABC, y quiero build un EXE con solo ese cambio.

Pero, por supuesto, no puedo comprometer el cambio en el repository hasta que se pruebe.

La ramificación parece excesiva para esto. ¿Qué hace en su entorno para aislar los cambios de comstackciones y versiones de testing?

@Matt b: Entonces, mientras espera los comentarios sobre su cambio, ¿qué hace? ¿Siempre estás trabajando en exactamente una cosa?

Entonces usted está preguntando cómo manejar el trabajo en múltiples "tareas" a la vez, ¿verdad? Excepto ramificación.

Puede realizar varias comprobaciones de la fuente en la máquina local, con el sufijo del nombre del directory con el nombre del ticket en el que está trabajando. Solo asegúrese de hacer cambios en el directory correcto, dependiendo de la tarea …

Mezclar múltiples tareas en una copy / confirmación de trabajo puede ser muy confuso, especialmente si alguien necesita revisar su trabajo más tarde.

Prefiero hacer y probar comstackciones en mi máquina / entorno local antes de comprometer o promover cualquier cambio.

Para su ejemplo específico, habría comprobado una copy limpia de la fuente antes de comenzar la tarea ABC, y después de implementar ABC, creé una construcción localmente con la que estaba en ella.

Algo así: git stash && ./bootstrap.sh && make tests 🙂

Intento hacer que cada operación de "compromiso" represente un cambio único y cohesivo. A veces se trata de una corrección de errores completa o característica completa, y, a veces es una pequeña refactorización en el path a algo más grande. No hay una manera simple de decidir qué unidad hay aquí, solo por intuición. También pido (¡suplique!) A mis compañeros de equipo que hagan lo mismo.

Cuando esto se hace bien, obtiene una serie de beneficios:

  • Puede escribir una descripción detallada de alta calidad para el cambio.
  • Leer la primera línea de la descripción de cada cambio le da una idea del flujo del código.
  • Las diferencias de un cambio son fáciles de leer y entender.
  • Si un cambio introduce un error / ruptura de compilation / otro problema, es fácil aislar, comprender y volver a salir si es necesario.
  • Si estoy a mitad de path de un cambio y decido abortar, no pierdo mucho.
  • Si no estoy seguro de cómo proceder a continuación, puedo dedicar unos minutos a cada uno de los diferentes enfoques, y luego elegir el que más me guste, descartando los otros.
  • Mis compañeros de trabajo recogen la mayoría de mis cambios antes, lo que simplifica enormemente el problema de fusión.
  • Cuando me siento atascado por un gran problema, puedo dar algunos pequeños pasos en los que confío, revisarlos a medida que avanzo, networkinguciendo así un poco el gran problema.

Trabajar así puede ayudar a networkingucir la necesidad de twigs pequeñas, ya que da un paso pequeño y seguro, lo valida y lo compromete, luego repita. He hablado sobre cómo hacer que el paso sea pequeño y seguro, pero para que esto funcione, también debe hacer que la fase de validation sea rápida. Tener una batería sólida de testings de unidad rápidas y finas + testings de aplicación rápidas y de alta calidad es la key.

Los equipos en los que he trabajado antes requerían revisiones de código antes de registrarse; eso agrega latencia, lo que interfiere con mi estilo de trabajo de pequeño paso. Hacer revisiones de código una interrupción de alta urgencia funciona; también cambia a la progtwigción de pares.

Aún así, parece que a mi cerebro le gustan las multitareas pesadas. Para que funcione, aún quiero múltiples cambios en progreso. He utilizado varias sucursales, varias copys locales, varias computadoras y herramientas que hacen copys de security de los cambios pendientes . Todos ellos pueden funcionar. (Y todos ellos son equivalentes, implementados de diferentes maneras). Creo que las sucursales múltiples son mis favoritas, aunque se necesita un sistema de control de origen que sea bueno para crear nuevas sucursales de manera rápida y fácil, sin ser una carga para el server. Escuché que BitKeeper es bueno en esto, pero aún no he podido verificarlo.