5  Repositorio upstream

Como sabes, cada estudiante tiene su propio repositorio de GitHub para el código de estas prácticas. Pero en algunas ocasiones, los profesores retocaremos el material docente: código fuente de PDRouter, nuevos escenarios, nuevos scripts, etc. Para distribuir estas actualizaciones usaremos un segundo repositorio.

5.1 Los dos repositorios

Queremos el repositorio de cada estudiante tenga dos remotos:

  • origin: es el repositorio propio del estudiante. Es donde trabaja habitualmente, guardando su trabajo de cada día.

  • upstream: es el repositorio oficial del curso. Contiene las actualizaciones que publican los profesores de vez en cuando.

Es terminología habitual en Git: origin suele identificar nuestro repositorio de trabajo y upstream el repositorio original o principal del que procede el código.

5.2 Instrucciones para el primer día

Cuando tengas tu repositorio de trabajo configurado (origin), tendrás que añadir el repositorio upstream. Eso basta con hacerlo una sola vez.

cd ~/pst2
git remote add upstream https://github.com/maop72/pst2-upstream.git

Para comprobar que todo está bien configurado, el comando

git remote -v

Debe mostrar algo como esto

origin  https://github.com/miusuario/pst2.git (fetch)
origin  https://github.com/miusuario/pst2.git (push)
upstream    https://github.com/maop72/pst2-upstream.git (fetch)
upstream    https://github.com/maop72/pst2-upstream.git (push)

Esto significa que, en principio, podrías bajar y subir cambios tanto desde/a origin como desde/a upstream. Aunque en realidad no tienes permiso para subir cambios a upstream, solo bajarlos.

A continuación descarga la información del repositorio oficial:

git fetch upstream

Finalmente incorpora sus cambios a tu repositorio:

git merge upstream/main --allow-unrelated-histories -X theirs

Una vez realizada la actualización, publica el resultado.

git push

5.3 Instrucciones para días posteriores

Cuando los profesores publiquemos nuevas modificaciones en upstream, ya no es necesario que vuelvas a configurar el remoto.

Simplemente ejecuta:

cd ~/pst2
git fetch upstream
git merge upstream/main
git push

git fetch upstream descarga las nuevas modificaciones, pero no modifica tu código.

git merge upstream/main incorpora esas modificaciones a tu rama main, conservando tu propio trabajo.

Finalmente, git push publica en tu repositorio de GitHub el resultado de la actualización.

5.4 Resumen

5.4.1 Primer día

cd ~/pst2
git remote add upstream git@github.com:maop72/pst2-upstream.git
git fetch upstream
git merge upstream/main --allow-unrelated-histories -X theirs
git push

5.4.2 Días posteriores

cd ~/pst2
git fetch upstream
git merge upstream/main
git push