¿Cómo usar git commits como pasos de tutorial / taller?

Estoy planeando una secuencia de lecciones sobre cómo build una aplicación web usando una aplicación de demostración y buildla desde cero.

Me gustaría usar git para 1) un repo del código de la aplicación de demostración, y 2) hacer que el git commit log ayude a los estudiantes a guiarse.

Cada lección es un pequeño paso en la construcción de la aplicación web. Me gustaría que cada lección se corresponda con una única confirmación de git, donde el alumno puede ver exactamente qué código cambió en la lección al ver la confirmación de la lección en GitHub.

De lo que no estoy seguro es de cómo hacer esto y hacer que sea fácil de mantener, por lo que el historial de compromisos siempre está en la secuencia de las lecciones. ¿O hay una técnica alternativa comúnmente utilizada para hacer esto que desconozco (como el uso de twigs / tags / parches)? Mis principales preocupaciones son:

  • Realizando correcciones y actualizaciones de lecciones / confirmaciones y asegurando que estos cambios aparezcan en los siguientes commits
  • Actualización de dependencies como bibliotecas de JavaScript de terceros en cualquiera de las confirmaciones
  • Mantener el historial de compromisos en order, de modo que cada confirmación sea igual a una lección y aparezca en secuencia. Si la primera confirmación / lección se actualiza mucho más tarde después de haber sido confirmada originalmente, entonces aún debe ser la primera input en el logging de confirmación.

Orientación, sugerencias, comentarios y mejoras son bienvenidas, ¡gracias de antemano!

Usa twigs – una twig para cada lección. Por lo tanto, si necesita actualizar el contenido de una lección posteriormente, solo realice una confirmación en la twig de la lección y, si es necesario, simplemente agréguela a todas las twigs de la lección siguiente.

Ejemplos:

  • github.com/DevOpsBootcamp/catch-up
  • github.com/miguelgrinberg/microblog , que es exactamente lo que estás pidiendo; cada versión corresponde a un blogpost en esta serie

Dos twigs se pueden comparar fácilmente para mostrar las novedades en cualquier lección. Por ejemplo, git diff lesson02..lesson03 muestra las novedades de la lección 3.


Reescribir el historial de git repo (rebase, modificación, etc.) generalmente no es correcto. Por favor, no muestre a sus estudiantes lo contrario. El logging de compromiso de git ayudará a guiar a los estudiantes mucho mejor si incluye y no oculta todas las correcciones de errores, cambios de actualización, etc.

git rebase en modo interactivo debe manejar la mayoría de sus casos de uso:

hacer correcciones y actualizaciones de lecciones / commits
Vea esta publicación que describe cómo cambiaría un file / confirmación de una lección anterior. Necesitas usar git rebase -i para entrar en el modo interactivo de rebase. Una vez que haya seleccionado la confirmación que desea modificar, git commit --amend con git commit --amend y luego continúe la rebase.

actualizar dependencies
Aquí hay una publicación que explica cómo agregar un nuevo file en el modo interactivo de rebase. Esta es la opción que debe usar si necesita agregar una nueva dependencia a una lección / confirmación. Es un poco más complicado que solo modificar un file que ya existe. Como habrás adivinado, terminas haciendo un git add dentro de la rebase.

Cuando use rebase en ambos casos, debe tener en count que está reescribiendo el historial de sus lecciones. Como resultado, si git push -force la twig de lecciones al repository, usted corre el riesgo de causar cierta confusión a sus estudiantes.

Si elimina la restricción de mantener el logging en order para que pueda leerse como el script del tutorial, puede usar tags. Tengo la printing de que las tags harían el mantenimiento más simple y más natural.

La pregunta Cómo crear un tutorial de encoding con instantáneas en Git describe el enfoque y apunta a un tutorial de AngularJS que usa tags. El tutorial proporciona enlaces con comparaciones de código: https://github.com/angular/angular-phonecat/compare/step-0…step-1

Estoy planeando usar este enfoque, así que tendré que familiarizarme más con el labeldo de git y con la actualización de la confirmación asociada a una label .