Me gusta bastante el model de ramificación de Gitflow
http://nvie.com/img/git-model@2x.png
pero no estoy seguro de dónde colocar el ciclo TDD. ¿Debería simplemente usar una twig de característica y comprometerme cada vez que escribí o pasé una testing (más después de refactorizar)? Crear una sub-twig y fusionar unidades "terminadas" en la twig de características? ¿Debería realizar cada testing de falla o solo después de haberla aprobado?
Esto es lo que hago actualmente, en una twig de características:
No estoy seguro de que esto sea representativo, pero solo hablando como un desarrollador, uso git-flow y aquí está (más o less) mi flujo de trabajo para una nueva function:
@wip
(trabajo en progreso) por lo que queda fuera del package de testing por ahora, y confírmelo a la nueva twig @wip
, asegúrese de que pase y comprométase con la twig de características. git merge
(y no git flow finish
). Esto deja la twig de funciones allí para que pueda actualizar la function más adelante si es necesario. Debo decir que este es mi flujo de trabajo "ideal": en la práctica, rompo estas reglas mucho: confirmo un cambio no probado antes de escribir la testing, empiezo a trabajar en partes de la function antes de realizar la testing de aceptación de alto nivel, etc. Básicamente, soy el único comprometido con el proyecto, así que tengo la libertad de hacerlo; si trabajas en un grupo más grande, creo que tendrías que ser más estricto al seguir cualquier flujo de trabajo que tengas.
De todos modos, así es como lo hago. También me gustaría escuchar a otras personas, así que he votado a favor.
ACTUALIZAR:
Después de escribir esto, me di count de que hay un sentido en el que me desvío del flujo anterior, que es cuando estoy agregando "características" que no son estrictamente el tipo normal orientado al usuario (es decir, no cosas que el usuario sabría de). Por ejemplo, desde el principio en el desarrollo de una aplicación, decidimos que queríamos usar backbone.js para estructurar nuestro código js, así que creé una twig de características para él y @javascript
tags @javascript
a varias características existentes de pepino. Lo fusioné una vez que la twig fue capaz de hacer (con backbone.js) lo que la aplicación original estaba haciendo con las vistas HTML.
También planeo cambiar al uso de require.js, y en este caso también crearé una twig de características para hacer esto, y una vez hecho esto, lo fusionará nuevamente. No habrá ninguna testing de integración de alto nivel, siempre y cuando las testings existentes pasen, todo está bien.
La forma más sencilla de pensar cuándo deberías comprometerte es:
Eso significa que realmente depende de la persona. Si nunca te encuentras haciendo una diferencia en una de las etapas, tal vez porque lo arreglas lo suficientemente rápido como para que aún puedas recordar lo que has cambiado, entonces realmente no necesitas comprometerte. Sin embargo, tampoco hay daño, excepto por el time que lleva escribir el command.
Otra alternativa si realmente no sientes que un paso amerita un compromiso a más largo ploop es simplemente git add
un git add
. De esta forma, git diff
le mostrará qué ha cambiado desde el complemento, y git diff --cached
le mostrará qué cambió antes. Esto es lo que hago, porque prefiero mis compromisos para ser comstackble y aprobar testings unitarias. De esta manera, es fácil volver a un buen estado conocido.
Creo que una buena y simple pauta sería comprometerse cada vez que esté "verde", o al less cada ciclo de testing :
No creo que exista un flujo de trabajo de compromiso específico para TDD, la única regla que trato de cumplir y que está relacionada es que bash no enviar commits con testings rotas a la twig principal (a less que ya esté roto). En mis twigs de características, por lo general, solo se testingn las testings relacionadas con las características, pero todas las testings se verifican al realizar la fusión de nuevo a maestro. Si sé que la confirmación deja algunas de las testings de funciones rotas o alguna otra razón que hace que así sea, solo entonces la indicaré como inactiva. En el lado más práctico de las cosas, creo que hay más beneficios en tener un cuidado especial para evitar empujar los compromisos a las twigs equivocadas.
Mi flujo de trabajo es muy similar, pero piense en hacer un mejor uso del área de preparación.
Esto impone la disciplina que, en cada compromiso, todas las testings pasan. Durante las etapas 1-3, puedo retroceder al último git add en cualquier momento usando git checkout.