Git para Administradores

De MoodleDocs

Nota: Esta es una traducción de una página de la documentación en idioma Inglés (Docs), que se considera particularmente importante, y que en su versión original se actualiza frecuentemente. Por ello, se le recomienda que revise la página original en idioma inglés: Git for Administrators.

Esta página describe como mantener una copia de Moodle en un servidor de producción, que pueda ser actualizada fácilmente usando Git. Si hay personalizaciones del código del núcleo (core) de Moodle, se recomienda seguir las instrucciones de Guia de Git para desarrolladores (en inglés).

Para obtener el mayor provecho de Git, vale la pena el esfuerzo para entender sus conceptos básicos (ver también la sección inferior). Aunque la curva de aprendizaje puede ser difícil al principio, especialmente si estás acostumbrado a usar CVS o Subversion.

Obtención de Git (Windows, OSX, Linux y otros)

Para información sobre como descargar e instalar Git ver https://git-scm.com/download

Una vez hayas descargado e instalado la versión de Git para tu sistema operativo, los comandos git de este documento deberían funcionar con tu sistema operativo.

Nombres de las ramas de Moodle

Nota: Desde 2022 se recomienda utilizar main en lugar de master para denominar la rama común de Git. Mas información (en inglés): [1]


Cada versión de Moodle tiene:

  • una tag (o etiqueta), que indica la versión de la publicación, con la letra v de prefijo (por ejemplo, v5.2.0), y
  • una branch (o rama), por ejemplo MOODLE_502_STABLE que estará activa durante todo el ciclo de vida de esa versión principal (en este caso la 5.2)

Las principales versiones de Moodle tienen cada una su propia rama en Git. Por ejemplo, MOODLE_38_STABLE (3.8), MOODLE_405_STABLE (4.5), MOODLE_500_STABLE (5.0), MOODLE_501_STABLE (5.1), MOODLE_502_STABLE (5.2). El desarrollo se realiza en la rama 'main'. Toda la vida de una versión se conservará en su rama. Cada versión de Moodle liberada es designada al añadir una etiqueta (tag), como por ejemplo v5.2.0-beta, v5.2.0-rc1, v5.2.0

Desde la versión 4.0, los códigos de versión de Moodle utilizan 3 dígitos: 400, 401, ..., 405, 500, 501, 502, ...

Las etiquetas (tags) de git se usan especificamente para identificar publicaciones de Moodle y son la fuente de las publicaciones oficiales, como los archivos .zip o tar descargables.

Se recomienda que los sitios Moodle en producción usen siempre la versión oficial publicada usando la tag, por ejemplo v5.2.0 o v5.0.4.

Aunque se puede utilizar la rama para la versión mayor, algo como MOODLE_502_STABLE para la versión mayor 5.2, en general no se recomienda. Si bien las nuevas funciones y mejoras son generalmente creadas para la rama de desarrollo main, la rama de la versión mayor recibe actualizaciones semanales que no son adecuados para entornos de producción.

Nota: La palabra STABLE en el nombre de la rama es intencionado ya que indica que es la rama de una versión publicada de Moodle.

Importante: No se debe utilizar versiones alpha, beta, release-candidates, o el código de la rama main para sitios en producción, ya que puede tener bugs importantes.

Obteniendo el código desde Git

A continuación se muestra el uso de Git a través de la línea de comandos. En la mayoría de los casos, los clientes gráficos ofrecen la misma funcionalidad y utilizan una terminología similar. Para obtener más información, consulta la documentación del cliente en cuestión.

Puedes encontrar el repositorio git oficial de Moodle en git://git.moodle.org/moodle.git (con un clon oficial en https://github.com/moodle/moodle.git).

Para inicializar tu repositorio local, utiliza

$ git clone -b v5.2.0 https://github.com/moodle/moodle.git /ruta/a/tu/moodle
  • El parámetro -b v5.2.0 indica a git que cambie a la rama v5.2.0 tras clonar el repositorio. Si se omite esta opción, git utilizará la rama predeterminada que es main.
  • El último argumento es la ruta donde quieres guardar la instalación de Moodle en tu servidor.

Quizás quieras considerar el crear tu propia rama para el sitio de producción (ver la sección más abajo)

Importante: Desde Moodle 5.1 en adelante no debes colocar el directorio de git en un lugar accessible públicamente. En su lugar, debes:

  • configurar el servidor web para que apunte al directorio public de tu instalación de Moodle; o
  • usar enlaces simbólicos (symlinking) para colocar el directorio public en la raiz de tu sitio web.

Actualización de la versión de Moodle

En la mayoría de los casos, estas instrucciones serán muy similares tanto si se trata de una actualización entre versiones mayores (por ejemplo, de la 5.1 a la 5.2) como de una actualización a una versión menor más reciente (por ejemplo, de la 5.1.0 a la 5.1.1).

Importante: Asegúrate siempre de tener una copia de seguridad completa de tu sitio Moodle (tanto del código como de la base de datos) antes de realizar cualquier actualización o cambio de versión.

Si has realizado alguna personalización en el código base de Moodle, debes seguir las instrucciones de la Git for developers guide.

Si tienes instalados extensiones propias, debe asegurarte de que sean compatibles con la versión de Moodle a la que va a actualizar. Es posible que se tengan que actualizar por separado.

Comprobando la versión de Moodle utilizada

Para comprobar la versión de Moodle usada actualmente, se puede ejecutar el siguiente comando:

# Si sigues una rama mayor:
$ git branch

# Si estás usando una etiqueta de git y estás usando Moodle 5.1 o posterior:
$ git log --oneline -1 public/version.php

# Si estás usando una etiqueta de git y estás usando Moodle 5.0 o anterior:
$ git log --oneline -1 version.php

Si estás siguiendo una etiqueta, deberias ver lo siguiente:

➜  examplesite git:(eb47eff071) git log --oneline -1 public/version.php
eb47eff071 (HEAD, tag: v5.1.0) Moodle release 5.2

Actualizando la instalación a una versión menor

Para actualizar la instalación de Moodle a la última versión menor existente, has de descargar los últimos cambios del repositorio git de Moodle y, a continuación, descargar la rama o etiqueta correspondiente.

Actualización a una versión menor: utilizando una etiqueta Git

Para actualizar a la última versión menor de la versión instalada, se han de ejecutar los siguientes comandos (sustituir v5.2.x por la etiqueta correspondiente a la versión a instalar:

$ cd /ruta/a/tu/moodle
$ git fetch origin
$ git checkout v5.2.x

Actualización a una versión menor: utilizando una rama de la versión mayor

$ cd /ruta/a/tu/moodle
$ git fetch origin
$ git rebase origin/MOODLE_502_STABLE

Si se trata de un sitio de producción, debes seguir teniendo en cuenta las instrucciones de Actualización (incluida la realización de copias de seguridad).

Actualización a una versión mayor

Cuando desees actualizar a una versión mayor más reciente, deberás indicar a tu instalación de Git que siga la versión más reciente en lugar de la que tienes instalada y estás siguiendo actualmente.

Asegurate de haber actualizado primero la instalación con la última versión menor de la versión de Moodle que tienes instalada actualmente (tal y como se describe en la sección anterior). Esto también descargará los cambios de las versiones más recientes de Moodle (pero aún no los utilizará).

El sitio debe estar en modo de mantenimiento, o desactivar el sitio web antes de iniciar la actualización.

Actualización a una nueva versión mayor: utilizando una etiqueta git

Para actualizar a una versión mayor más reciente utilizando etiquetas git, puedes emplear los siguientes comandos (sustituir v5.2.0 por la etiqueta correspondiente a la versión que se desea instalar):

$ cd /ruta/a/tu/carpeta/moodle
$ git fetch origin
$ git checkout v5.2.0

Actualización a una versión principal: si utilizas una rama de Git

Para cambiar a una versión principal más reciente utilizando ramas de Git, puedes emplear los siguientes comandos (sustituye MOODLE_502_STABLE por la rama correspondiente a la versión que desees):

$ cd /ruta/a/tu/carpeta/moodle

# Crea una rama local para la versión más reciente desde el repositorio remoto
$ git checkout -b MOODLE_502_STABLE origin/MOODLE_502_STABLE

El directorio de Moodle incluye los archivos de la versión más reciente, pero para completar la actualización de Moodle, deberás completar la actualización a través del navegador web o utilizar el script de actualización de la línea de comandos.

¡No olvides mover también las extensiones!

Si actualizas de Moodle 5.0, o anterior, a Moodle 5.2, también deberás actualizar cualquier extensión que haya instalada a la nueva ubicación en el subdirectorio /public. Esto “'no”' se hace automáticamente al descargar el nuevo código de Moodle 5.2.

Instalación de extensiones de Moodle

Instalación de una extensión de Moodle desde su repositorio Git

Esta es una forma de añadir extensiones de otros repositorios Git a tu repositorio de Moodle.

Por ejemplo, supongamos que queremos instalar el módulo Certificate desde su repositorio Git en nuestra versión Plantilla:Version de Moodle.

Una vez localizada la ubicación del código de la extensión deseada (en este caso, https://github.com/markn86/moodle-mod_certificate.git), puedes utilizar los siguientes comandos:

$ cd /ruta/a/tu/carpeta/moodle
$ git clone https://github.com/markn86/moodle-mod_certificate.git public/mod/certificate

Esto creará un nuevo directorio public/mod/certificate/ dentro de tu instalación de Moodle y copiará el código del repositorio Git de la extensión.

Si compruebas ahora el estado de tu repositorio de Moodle, verás que Git informa de un directorio no rastreado:

$ git status
HEAD detached at v5.2.0
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	public/mod/certificate/

nothing added to commit but untracked files present (use "git add" to track)

Puedes eliminar el aviso sobre el directorio no seguido añadiendolo a tu lista de archivos ignorados:

$ echo /public/mod/certificate/ >> .git/info/exclude

Actualizando extensiones desde su repositorio git

Para descargar las actualizaciones de la extensión, debes ir al directorio donde esté instalada la extensión y descargar los cambios desde su repositorio principal:

Para actualizar la instalación debes descargar los cambios.

$ cd /ruta/a/tu/carpeta/moodle
$ cd mod/certificate
$ git fetch origin
$ git rebase

Es muy recomendable escribir un script de shell con estas líneas en el directorio raíz de la instalación de Moodle. De lo contrario, es fácil olvidar qué repositorios de Git hay dentro del repositorio principal de Moodle.

Instalar y mantener extensiones de terceros usando submódulos Git

Los submódulos Git submodules son una buena manera de gestionar repositorios Git externos dentro de tu repositorio principal de Moodle, pero se trata de un concepto más avanzado de Git.

Se indica a continuación una explicación paso a paso, pero para seguir estos pasos es útil comprender qué hacen estos comandos.

Las opciones y comandos avanzados de Git pueden encontrarse en libro de Git.

Si tienes dudas sobre los submódilos Git, visita por favor el sitio anterior.

Instalando una nueva extensión en un sitio Moodle

Como ejemplo, usaremos la extensión Certificate module ya utilizada en la sección anterior.

$ cd /ruta/a/tu/carpeta/moodle
$ git submodule add https://github.com/markn86/moodle-mod_certificate.git public/mod/certificate

Nota que Git muestra dos nuevos archivos en el repositorio al ejecutar git status:

$ git status
Refresh index: 100% (61532/61532), done.
Not currently on any branch.
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   ../../.gitmodules
        new file:   public/mod/certificate

El archivo .gitmodules contiene la ruta local y la URL de todos los submódulos.

Es necesario realizar el commit si tienes intención de clonar el repositorio más adelante (consulta la página Moodle development environment with Git submodules en inglés).

Antes de realizar el commit, asegúrate de comprobar la configuración del repositorio Git de la extensión, ya que es posible que los ajustes generados automáticamente no sean suficientes.

Para futuras actualizaciones, resulta útil realizar un seguimiento de la rama remota que corresponda a la versión de Moodle de tu repositorio.

$ cd mod/certificate
$ git branch -avv
* (no branch)                      c197f31fd89 Moodle release 5.2
  remotes/origin/HEAD              -> origin/main
  ...
  remotes/origin/MOODLE_404_STABLE 67c80957df1 weekly release 4.4.12+
  remotes/origin/MOODLE_405_STABLE 6012130e108 Moodle release 4.5.11
  remotes/origin/MOODLE_500_STABLE c37648634ae Moodle release 5.0.7
  remotes/origin/MOODLE_501_STABLE ed028eb2292 Moodle release 5.1.4
  remotes/origin/MOODLE_502_STABLE c197f31fd89 Moodle release 5.2
  remotes/origin/main              402b31e357a weekly back-to-dev release 5.3dev

Git ha creado la rama main que sigue a origin/main automaticamente, porque se ha extraído el repositorio remoto main.

Por lo tanto, crea una nueva rama que siga la rama remota correspondiente. Pero esto solo es posible si el repositorio remoto dispone de la rama.

$ git checkout -b MOODLE_502_STABLE origin/MOODLE_502_STABLE
Branch MOODLE_502_STABLE set up to track remote branch MOODLE_502_STABLE from origin.
Switched to a new branch 'MOODLE_502_STABLE'
$ git branch -D main
Deleted branch main (was 345f5b1).

Realmente no es necesario eliminar la rama main, pero no es nada útil mantenerla. De hecho, estos ajustes no será necesario cambiarlos posteriormente.

El paso final es realizar el commit con los cambios en el repositorio principal.

$ cd /ruta/a/tu/carpeta/moodle
$ git commit -a -m "Nueva extension mod_certificate instalada"

Tienes que asegurar que le commit solo incluye los cambios del nuevo submódulo de git (-a aplica todos los cambios no marcados).

Manteniendo submódulos Git

Mantener un conjunto de submódulos git es muy sencillo. Imaginemos un repositorio de Moodle con varios submódulos instalados.

Ten en cuenta que la extensión «mod_mylittleextension» es una extensión ficticia, creada para un escenario de prueba con este ejemplo. No se trata de un módulo oficial de Moodle.

Para actualizar todos tus submódulos a la vez, escribe:

$ cd /path/to/your/moodle
$ git submodule foreach git pull
Entering 'block/coursefeedback'
Already up-to-date.
Entering 'mod/certificate'
Already up-to-date.
Entering 'mod/mylittleextension'
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From /local/repositories/mle
   89d9eae..64c122d  main     -> origin/main
Updating 89d9eae..64c122d
Fast-forward
 index.html  |    9 +++++++++
 version.php |    6 +++---
 2 files changed, 12 insertions(+), 3 deletions(-)
 create mode 100644 index.html
$ git status
# On branch MOODLE_502_STABLE
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   mod/mylittleextension (new commits)
#

El comando git submodule foreach [otro comando] recorre todos los repositorios de los submódulos y ejecuta el comando especificado en [otro comando]. En este caso, el comando es git pull.

Por tanto, la extensión mylittleextension se actualizó y el repositorio principal no estará limpio hasta que se confirmen los cambios:

$ git commit -a -m "Actualización de las extensiones"

Mantener las extensiones con submódulos Git simplifica su proceso de actualización.

A mayor escala, se puede utilizar para gestionar un proyecto de Moodle, en el que varios desarrolladores necesitan disponer de una copia exacta de Moodle sin tener que configurar manualmente las extensiones de terceros.

Puedes obtener más información sobre este tema en la página Moodle development environment with Git submodules (en inglés).

Conceptos avanzados de Git

Creando tu propia rama

Es una buena idea crar tu propia rama para el sitio de producción, incluso si no planeas hacer cambios. De esta manera, si necesitas realizar algún cambio en el futuro, podrás hacerlo sin afectar al código principal de Moodle y podrás


Es una buena idea crear tu propia rama para el sitio en producción, incluso si no planeas realizar cambios. De esta forma, si en el futuro necesitas realizar alguna personalización, podrás hacerlo sin afectar al código principal de Moodle y podrás integrar fácilmente las futuras actualizaciones desde el repositorio oficial.

Para crear tu propia rama, usa los comandos siguientes:

$ cd /ruta/a/tu/moodle
$ git checkout -b mi_rama_de_produccion

Reemplaza mi_rama_de_produccion por el nombre que hayas escogido para tu rama. Entonces podrás utilizar esta rama para realizar cualquir personalización que necesites.

También puedes crear una nueva rama para cada versión mayor de Moodle y poder actualizarla, por ejemplo:

git checkout -b 5.2-mi_rama

Ver también

Moodle forum discussions
Enlaces externos

[[2]] [[3]] [for Administrators]