¿Por qué debería escribir un mensaje de confirmación?

18

¿Por qué debería escribir un mensaje de confirmación? No quiero y creo que es estúpido cada vez.

Una interfaz gráfica de usuario que uso, que quedará sin nombre, te obliga a hacerlo. Escucho que otros lo hacen cada vez, incluso si están usando el VCS en la línea de comando.

Si me comprometo varias veces al día y no he terminado una función, ¿sobre qué estoy escribiendo? SOLO escribo un mensaje después de muchas confirmaciones y siento que es hora de una mini etiqueta o cuando hago una etiqueta real.

¿Tengo razón o me estoy perdiendo algo? También estoy usando un sistema distribuido

usuario2528
fuente
1
No te molestes, solo di "bla" en la línea de comentarios. Siempre y cuando nunca comparta el código con nadie más y mientras nadie más trabaje en él y siempre que nunca necesite deshacer el código y siempre que nunca cometa un solo error de código y ... espera un minuto, ¿por qué estás usando el control de versiones nuevamente?
Michael Durrant

Respuestas:

24

A todas las personas que dicen "comprometerse solo cuando tiene un mensaje útil y bien pensado para escribir, y cuando su función está 100% completa y tiene pruebas unitarias para ello", les digo: todavía están en la mentalidad SVN .

Si está utilizando git , esto es lo que yo llamaría un flujo de trabajo inteligente:

  1. Comprométete tantas veces como quieras . Escriba cualquier mensaje rápido viejo allí. Nadie lo verá de todos modos.
  2. Después de decir, 10 confirmaciones, ha terminado esa característica en la que estaba trabajando. Ahora escribe pruebas y confirma esas pruebas. O lo que quieras. Si te gusta TDD, escribe las pruebas primero, no me importa, tampoco git.
  3. git rebase -idesde el primer commit 'desordenado' que agregaste y arreglaste tu historial local aplastando, editando, omitiendo y limpiando tu historial reciente en commit lógicos y limpios con buenos mensajes .
  4. Después de la limpieza, pídale a alguien que lo retire.
  5. Enjuague y repita.

Tenga en cuenta que el paso 3 es cuando termina con esas buenas confirmaciones que buscaba, y que usando SVN tendría que abstenerse de comprometerse hasta que haya realizado los primeros dos pasos, que es lo que sugieren la mayoría de las otras respuestas. IOW, no desea infligir su código medio no escrito en otros, por lo que no se compromete durante una semana, hasta que termine su función. No está utilizando el control de versiones en todo su potencial.

También tenga en cuenta que en cualquier lugar entre los pasos 1 y 3, puede realizar git pushsus cambios en su propio espejo de repositorio privado en el servidor para obtener copias de seguridad gratuitas si su HDD portátil se apaga.

Alex Budovski
fuente
Buena respuesta, me gusta. Tengo un poco de miedo de usar rebase. Aquí hay un artículo acerca de que salió
@acid, si está cambiando sus propios cambios privados, no debería haber ningún conflicto. Además, debes esforzarte por perder algo en git.
Alex Budovski
44
mi flujo de trabajo, git rocks
Nazgob
1
@ Boris: Porque claramente está hablando de git que claramente NO es subversión
3
Realmente no debería ser un trabajo significativo escribir una oración que diga lo que acabas de hacer, y destruir la historia con rebase parece desagradable. Supongamos que introdujo un error en la quinta de esas diez confirmaciones que no se detecta hasta una semana después. Ser capaz de precisarlo en una única confirmación pequeña lo ayudará mucho.
Gort the Robot
55

Porque cuando un mal mantenedor está buscando un error y descubre que se agregó en rev. xyz, él querrá saber qué rev. se suponía que xyz debía hacer.

Peter Taylor
fuente
38
Bueno, entonces puede leer las 5,000 líneas de espagueti que acabo de registrar, ¡¡¡JEESH !!! ¡Algunas personas son simplemente perezosas!
Edward Strange
99
Porque cuando el pobre imbécil te persigue (dentro de 3 años) y mira la historia y dice ... WTF ... WTF ... WTF, al menos tendrá una idea de lo que estaba sucediendo. Puede agregar fácilmente un comentario como "registro de rutina, función X, incompleto".
rapid_now
3
@ acidzombie24: Debido a que cada confirmación debe decir para qué fue, incluso si es "error tipográfico corregido en ...", no tiene sentido en un historial de revisiones, a menos que sepa para qué son las revisiones.
Orbling
11
@quickly_now, el pobre imbécil podría ser tú mismo. Desafortunadamente, esta es una de las cosas que debes experimentar para apreciarla por completo.
2
@acidzombie: ¿por qué estás registrando cambios incompletos?
Edward Strange
35

Comentas tu código fuente, ¿verdad?

Escribes los mejores comentarios, los que dicen por qué ya que el código solo dice cómo .

El mensaje de confirmación es un comentario de este tipo y, por lo tanto, es muy importante y cuanto más piense en hacerlo bien, más útil será para un futuro mantenedor del software.

Para cualquier software activo, este comentario en particular terminará mostrándose en algo como

gitk --toda muestra

(encontrado en http://longair.net/blog/2009/04/25/a-few-git-tips/ ). Esto permite una vista de pájaro de quien ha trabajado en el software cuando , y lo que hicieron.

Tenga en cuenta que este es el objetivo final del comentario de compromiso, es decir, aparecer en una lista que dice " qué " a su futuro yo o su colega, y ESA es la razón por la que debe tener cuidado al escribir buenos mensajes de compromiso.

usuario1249
fuente
2
@acidzombie, solo puedo hablar por git, pero puedes comprometerte en pasos muy pequeños localmente y luego agruparlos a todos en un solo compromiso cuando presionas contra la corriente. Ese mensaje de confirmación puede ser descriptivo.
2
@acidzombie, ¿por qué te comprometes si no has hecho suficientes cambios para justificar un comentario? Por favor explique.
2
@Thor: Porque el control de versiones protege su código contra pérdidas, e incluso el código a medio hacer debe estar protegido.
Ben Voigt
1
@Ben, los commits son para almacenamiento a largo plazo y deben reflejar con precisión los "fragmentos" de trabajo. La protección contra pérdidas es, en mi opinión, ortogonal al control de versiones, y debe ser manejada por un sistema de respaldo adecuado. He encontrado que Time Machine para Mac es extremadamente adecuado para este propósito. Espero que haya un sistema similar disponible para Windows.
2
+1 Soy fanático de no contaminar mi control de fuente con confirmaciones sin sentido. Hace que la búsqueda de un compromiso particular sea más fácil (a través de comentarios útiles), y sé que cuando reviso el código, siempre funciona. El software de respaldo tradicional es una mejor opción para proteger mi repositorio local entre confirmaciones. Esto funciona bien con un DVCS, pero debe recordar que un registro local no es realmente una copia de seguridad de su código.
Adam Lear
15

Si el mensaje de confirmación le parece estúpido, entonces parece que está utilizando las confirmaciones incorrectas.

Los compromisos deben hacerse por una buena razón: deben estar relacionados con las tareas que ha desglosado para la función en la que está trabajando. Ya sea que esas tareas sean formales o solo en su mente, cada cambio que realice debe completar más o menos una tarea y, por lo tanto, ser funcional de alguna manera.

Entonces, sus mensajes de confirmación tienen un propósito mucho mejor. Describa la tarea que terminó y, si no se realiza un seguimiento en otro lugar, por qué se necesitaba esa tarea o para qué sirve:

  • Refactorizado la clase de usuario para una mejor encapsulación
  • Creación de apéndices de API para que las interfaces se puedan usar en la clase de controlador
  • Convierte la clase de base de datos en una clase abstracta para que se pueda usar una base de datos simulada en casos de prueba

Luego, usted u otros desarrolladores pueden explorar el repositorio o el historial de archivos y ver con bastante facilidad dónde ocurrieron ciertas evoluciones y por qué. O, si se determina que una revisión en particular es culpable de un error, el mensaje de confirmación dará una pista de por qué se colocó esa línea, de modo que no solo la elimine y posiblemente vuelva a generar algo que se pensó que era arreglado, y en su lugar puede arreglarlo de la manera correcta.

NickC
fuente
1
+1, suena como si estuviera cometiendo con demasiada frecuencia o en puntos de parada malos. Si solo quiere un buen punto de respaldo para algunos cambios experimentales, puede usar el índice, una rama temporal, modificar las confirmaciones anteriores en lugar de crear nuevas, o incluso usar el búfer de deshacer en su editor.
Karl Bielefeldt
1
@Karl: IIRC linus en su git google talk dijo que en promedio se realizan 6 confirmaciones por día. Ahora, no sé cuánto se considera demasiado, pero en este proyecto en este momento me comprometí cuando obtuve algo de reflexión trabajando (conecto los datos correctos, no hago nada con ellos), después de generar la interfaz pero antes de que funcione la serialización. y ahora estoy trabajando para que funcione la serialización a pesar de que tenía la interfaz hace 2 horas. Me comprometeré y diré 'conceptos básicos de reflexión' una vez que funcione, pero en los primeros tres, ¿por qué dejaría un comentario cuando puedo ver fácilmente cuándo una característica está 'funcionando'? Cada x se compromete.
En realidad, puedo esperar hasta obtener una prueba básica porque, de lo contrario, si comento cada confirmación, ¿cómo sabría cuál de ellas tiene una reflexión estable? 'conceptos básicos de reflexión', 'serialización de reflexión' 'prueba de serialización de reflexión' Suponiendo que la serialización es imprescindible, podría ser la segunda o la tercera. Prueba podría significar prueba unitaria o prueba puede significar probar si funciona en las clases básicas que requiero. Simplemente creo que hacer comentarios tiene sentido cuando puedo decir 'conceptos básicos de trabajo de reflexión' en lugar de adivinar cuál de estos significa que los conceptos básicos están funcionando. También es más fácil hojear / encontrar cuando hay menos para leer.
@acid, el propósito completo de un commit es poder volver a él o comparar cambios con él. Si alguna vez necesita hacer eso con sus compromisos anteriores, ¿cómo sabe cuál elegir? No tienes que escribir novelas, aquí. "interfaz trabajando", "serialización trabajando" y "reflexión trabajando" están bien en mi opinión. No hay un número máximo fijo de confirmaciones por día, pero si sus mensajes se leen como "algo de trabajo en la interfaz" "algo más de trabajo en la interfaz" "interfaz casi terminada", entonces se está comprometiendo con demasiada frecuencia y debería usar El índice.
Karl Bielefeldt
@Karl: ¿Cuál es el índice por cierto? Sé que Git tiene un alijo, pero no creo que estés hablando de eso. ¿Qué hace?
12

Cometer comentarios no resuelve todo. Siempre existe la posibilidad de que puedan confundir tanto como ayudan, especialmente cuando los desarrolladores están enojados por tener que ingresar a ellos. Intente esto: considérelos como un sendero de migas de pan en el bosque o un punto de ruta de alpinismo o balas trazadoras. Bien hecho, pueden delinear un camino confuso.

No hagas un gran problema con ellos. Se honesto:

  • "Entidades de índice espacial editadas, Daos e IU para manejar la función X"
  • "Registro incremental para solicitud de función # 1234 y error # 5678"
  • "Rompí la última compilación. Estos son los archivos que me perdí".

Que sea breve y "panorama general". Si es posible, consulte un número de problema en su sistema de características / errores. Algunas IU de control de versiones incluyen un campo para este tipo de cosas.

Roger escaso
fuente
2
+1 por la idea de mantenerlo corto. Corto y simple y lo suficientemente bueno está perfectamente bien.
rápidamente_ahora
1
En mi humilde opinión, una orientación aún mejor sería la receta común "lo más breve posible, el tiempo que sea necesario"; ya que a veces simplemente no es posible mantenerlo corto sin sacrificar información esencial
hvr
11

Reduce la cantidad de WTF / minuto;)

ingrese la descripción de la imagen aquí

lo que se traduce en un equipo más feliz (que no te odia) y una mejor salida del equipo potencialmente a un costo menor

torre
fuente
44
Le votaría si explicara por qué esto es cierto.
SingleNegationElimination
@TokenMacGuy - Lo siento, no te estoy siguiendo.
Torre
1
¿Cómo expresiva mensajes de confirmación Reducir WTFs / minuto (lo hacen, sin duda)
SingleNegationElimination
@TokenMacGuy: pensé que era obvio.
Torre
9

Entonces, el resto de su equipo sabe WTF que está haciendo para verificar los cambios en el árbol del proyecto.

Edward extraño
fuente
77
¡Agrego mensajes de confirmación para mis proyectos, cuando soy el ÚNICO DESARROLLADOR! Porque cuando regrese en 2 años para ver estas cosas, quiero saber qué estaba haciendo WTF en ese momento. Sé perfectamente que el 99% de las veces esto no se verá. El 1% del tiempo me ahorrará 2 semanas de agonía, y creo que el precio de ingresar un mensaje de confirmación de 10 segundos vale el beneficio a largo plazo que obtendré.
rápidamente_ahora
@quickly_now, agonía incluso? ¿Tu código es tan malo?
1
@quickly_now: Amén a eso. En el espacio de uno o dos años, me sale mucho código, lo que se suponía que debía hacer hasta el último mes meses después, solo Dios lo sabe. Dios y mi historial de revisiones.
Orbling
Oh si. Estoy de acuerdo también Pienso en ello como experiencia == humildad.
Michael Durrant
8

porque si no practicas ingresar mensajes de confirmación decentes, terminarás como mi colega que ingresa mensajes como

no changes

o

testing

para confirmaciones con más de cien archivos modificados (¡no es broma aquí!).

Si te conviertes en tal desarrollador, te verás estúpido a los ojos del resto del mundo, no importa cuán estúpido creas que es solo ingresar un mensaje.

stijn
fuente
1
suena como un candidato perfecto para la revisión por pares antes de comprometerse, si alguna vez escuché uno.
2
oh hombre, he trabajado con este tipo de personas. Me vuelve loco.
sevenseacat
4

¿Por qué se compromete si los cambios no son significativos?

Solo comete cambios que tengan un significado. Por ejemplo, hice una refactorización bastante grande la otra semana, que me llevó unos 3 días. Tendría toneladas de compromisos durante ese tiempo. Algunos fueron cambios bastante pequeños ('cambió el nombre de la clase X a Y para reflejar una nueva responsabilidad' o 'movió el método Z () a la clase Q') y otros fueron realmente grandes. Cuando termino con una función / refactorización, verifico si algunos commits podrían ser aplastados (al menos git admite eso, no conozco otras herramientas), pero generalmente los dejo como están porque ayudan más tarde.

Supongo que no te comprometerías en el medio de editar una línea, por lo que debería tener un significado. Solo describe lo que hiciste desde la última confirmación.

EricSchaefer
fuente
3

imagina una condición cuando rompiste tu sistema haciendo algún cambio y date cuenta de esto después de varias confirmaciones por equipo. No recuerda cuál fue el cambio, pero recuerda que algo podría salir mal cuando estaba mejorando la función X o eliminando un archivo del módulo Y.

Pero desafortunadamente, el número de revisión no le dice cuándo cambió X o Y. Por lo tanto, es su elección leer todos los códigos confirmados durante los últimos N días o simplemente leer los mensajes de confirmación detallados que escribió (mucho más legibles que el código).

Por lo tanto, si escribe texto igual, aburrido, inútil y no relacionado en el mensaje de confirmación, porque tiene que hacerlo, es más dañino que tener un mensaje de confirmación. Porque en lugar de encontrar la raíz del error, un mensaje equivocado lo desorientará.

Por lo tanto, trate de escribir mensajes de confirmación significativos cada vez que confirme, lo que puede ayudarlo a usted y al mantenedor también.

GG01
fuente
¿Por qué debería hacer esto durante cada confirmación en lugar de al final del día, cada dos días o cuando finalizo una función?
1
¿por qué te comprometes tan a menudo si no tiene una razón "natural"?
Me comprometo cada vez que realizo algunos cambios significativos, por lo que puede reflejarse en el repositorio y otros desarrolladores pueden verificar esos cambios. Pero la respuesta que le diste ayuda a tener un ojo de pájaro en lo que hace quién y cuándo.
GG01
@ acidzombie24 Bueno, no cometas cosas a medio terminar a menos que realmente tengas que hacerlo. Y así, las otras personas pueden ver lo que estás haciendo / trabajando cuando llamas a un enfermo un día y nada funciona. O bien, puede recordar dónde lo dejó cuando tuvo que sentarse en las reuniones durante 2 días. O bien, puede identificar con mayor facilidad qué revisión rompió una compilación y mirar la diferencia.
nos
@ Thorbjørn: ¿Por qué no cometería un cambio que no quiero rehacer?
3

Si está trabajando con otros, entonces los mensajes de confirmación son muy importantes para ver realmente lo que otros han hecho: buscar las diferencias para cada uno de ellos es mucho más trabajo y es posible que no entienda por qué alguien lo ha hecho. Si trabaja con otros y alguien (quizás no usted) tiene que mirar hacia atrás, por ejemplo, para rastrear cómo el comportamiento cambió desde la versión anterior de maneras inesperadas ... realmente está haciendo la vida difícil al no usar una pista útil en el compromiso mensaje.

Si está trabajando solo ... en un proyecto que está mayormente codificado 'tal cual' (por ejemplo, un sitio web o script simple), puedo ver más o menos de dónde viene. Si trabajo en algo así, solo me interesan la fecha / hora o los cambios más recientes cuando continúo trabajando en algo (tienes un punto para restaurar, pero eso solo importa durante el desarrollo, no después de que lo hayas implementado). El control de versiones es solo una forma de hacer copias de seguridad con algunas ventajas: estoy totalmente de acuerdo en que no se está haciendo un uso completo del sistema, pero en algunos proyectos a pequeña escala, eso podría no ser necesario.

Se me ocurrió la idea antes de que el Control de versiones se usara de dos maneras, una para documentar los cambios en el proyecto y otra como una ayuda para los desarrolladores en el lugar ... y esos dos son totalmente diferentes entre sí. Los mensajes de confirmación son muy importantes en un sentido y pueden ser inútiles en el otro.

Inca
fuente
3

Te estás perdiendo algo. No debe ser una razón para realizar una confirmación de lo contrario no estaría haciendo ella.

Todo lo que necesitas hacer en el comentario es poner la razón en palabras, incluso si es solo wip: adding new state objects

Richard Harrison
fuente
exactamente. Incluso si (como se mencionó anteriormente) es solo un código que 'no desea rehacer', obviamente significa algo, por lo tanto, no debería ser difícil escribir un resumen súper rápido.
sevenseacat
2

Como muchos otros, codifico un poco en mi tiempo libre y uso un sistema de control de revisiones para rastrear tanto mi desarrollo como mis cambios. La cantidad de tiempo libre que tengo disponible varía mucho de semana a semana y de mes a mes. Muchas han sido las ocasiones en las que no tendría tiempo para codificar un proyecto durante semanas o incluso meses, y el tiempo que tenía normalmente oscilaría entre 10 minutos (día típico) y 40 minutos (buen día). Esas ciertamente no son buenas condiciones, especialmente para problemas de depuración.

Era esencial mantener notas que no se perdieran y que fueran fácilmente recuperables. Al final de cada sesión, el trabajo de la sesión se comprometería con un mensaje detallado. Luego podría revisar el historial de compromisos y seguir mi progreso y proceso de pensamiento. Esto me permitió retomar donde estaba la semana pasada, o el mes pasado con la menor cantidad de tiempo precioso perdido.

El punto que estoy tratando de ilustrar es que los buenos mensajes de confirmación lo ayudan a usted (y a cualquier otra persona que viene después de usted) a descubrir qué ha sucedido, qué ha estado sucediendo, a dónde van las cosas y, sobre todo, por qué.

Chispeante
fuente
2

Piénsalo lógicamente por un minuto. Cuando se compromete, eso significa que se hizo algo. Si no deja ningún mensaje, ¿cómo sabrán otras personas lo que se hizo?

Sergio
fuente
Una mirada a mi código increíblemente obvio y sabrán instantáneamente todo lo que hace y todas las increíbles pruebas que pasa al 100%. Lo siento, estoy de humor esta noche [así que estoy KIDDING];)
Michael Durrant
1

Si no comenta sus confirmaciones, puede verse tentado a comentar el cambio en la fuente. Con el tiempo, eso puede saturar la fuente.

Joris Geer
fuente
2
No estoy tentado a hacer eso
1

Los mensajes de confirmación son una forma rápida de saber qué está pasando en ese check-in y ayudarán a otros desarrolladores de su equipo cuando quieran saber qué aspecto del código cambió en qué revisiones (por muchas razones).

En una nota relacionada, sugeriría especificar el número de caso del rastreador de errores (espero que esté usando uno) en el mensaje de confirmación, por lo que sería útil para el futuro rastrear fácilmente las cosas.

Mahesh Velaga
fuente
1

Para que el responsable de ese código 1 año después sepa a quién buscar ese código atroz. :)

talonx
fuente
Para eso está la blamecaracterística de las VCS.
Peter Taylor