Gerrit, git y revisando toda la rama

8

Ahora estoy aprendiendo Gerrit (que es la primera herramienta de revisión de código que uso). Gerrit requiere un cambio revisado que consista en una sola confirmación. Mi rama de características tiene aproximadamente 10 confirmaciones.

La forma preferida de gerrit es aplastar esos 10 commits en uno solo. Sin embargo, de esta manera, si la confirmación se fusionará en la rama de destino, se perderá el historial interno de esa rama de características. Por ejemplo, no podré usar git-bisectpara dividir en esos commits. Estoy en lo cierto?

Estoy un poco preocupado por este estado de cosas. ¿Cuál es la razón de esta elección? ¿Hay alguna forma de hacer esto en Gerrit sin perder la historia?

liori
fuente
1
esto podría ser más apropiado en stackoverflow
1
No tengo ninguna experiencia con Gerrit. He usado Atlassian FishEye + Crucible y no tiene esta restricción. ¿Es posible agregar confirmaciones adicionales a una sola revisión? Puede que tenga que hacerlo manualmente.
Andrew T Finnell
Que yo sepa, Gerrit no admite la revisión de una sucursal. Solo admite la revisión y aprobación de un solo parche a la vez. Y afirman que es una característica, no un error. No estoy de acuerdo y estoy buscando una herramienta que pueda revisar una rama en su conjunto y, atómicamente, aprobarla o desaprobarla (y aún así recibir comentarios por parche / línea).
Mikko Rantalainen

Respuestas:

2

La revisión de código tiene el mejor impacto cuando se trata de un gancho previo a la confirmación (pre-push en caso de git). Si se encuentra un error en la quinta de sus diez confirmaciones, ¿cómo lo solucionaría (preservando el historial)? Claro, puede crear otra rama de tema, corregir ese compromiso, seleccionar los 5 compromisos restantes y reenviar los diferenciales para su revisión, pero esto es muy complejo (aunque puede escribir un script para ello).

Idealmente, los cambios realizados en un único repositorio deben preservar su estado (por ejemplo, no romper la compilación, las pruebas, etc.) Entonces, si sus cambios se realizan de esta manera, se pueden revisar por separado, de lo contrario, aplastarlos sería mejor que abandonar el repositorio. inconsistente.

Puede crear un error en el rastreador de errores y poner una referencia en cada confirmación, para que los revisores y los futuros lectores sepan lo que estaba tratando de lograr en su totalidad.

vissi
fuente
2
"¿Cómo lo arreglarías?": Se producen errores y, por ahora, fue suficiente para solucionar el problema en cualquiera de las confirmaciones posteriores, siempre que la rama maestra en el servidor central nunca apunte directamente a ninguna confirmación entre error y reparar. Entonces, en este caso, pondría una solución como undécimo commit en la rama revisada. ¿Es este método algo malo?
liori
1

¿Qué pasa con la integración continua? realizó 10 confirmaciones en una rama de características y se "publicará" de inmediato, lo que sería un gran impacto para otros que deberían revisar esas confirmaciones / cambios.

Sin embargo, vale la pena enviar 10 confirmaciones, si las confirmaciones contienen modificaciones de código separadas. Pero en caso de que las confirmaciones contengan modificaciones continuas en una sola característica (por lo que la mayoría de las confirmaciones solo son correcciones o el estado medio de una implementación en curso de una definición de función), es mejor aplastarlas en una única confirmación.

En general, piense con la opinión de los revisores: ¿cuál es el tamaño de una modificación de código que puede revisarse fácilmente?

Nota: Gerrit no es solo para revisar el código, los cambios deberían desencadenar varias pruebas de aceptación. (prueba de unidad, prueba de humo) Entonces, si tiene esos, entonces es más difícil publicar códigos defectuosos. Entonces, desde esta perspectiva, un commit debe contener tales cambios que vale la pena probar.

Entonces Gerrit te obliga a no cometer cambios demasiado pequeños y demasiado grandes. (usará --amendno solo para corregir un cambio que ya se envió a Gerrit, en lugar de corregir una confirmación que desea enviar para su revisión)

laplasz
fuente