Git per Amministratori

Da MoodleDocs.
Attenzione: Pagina in costruzione


Questa pagina descrive come mantenere sul server di produzione una copia di Moodle facilmente aggiornabile via Git. Se si dispone di personalizzazioni del codice di base Moodle, si consiglia di seguire le istruzioni della (EN) Guida Git per sviluppatori.

Per ottenere il massimo da Git vale la pena comprendere i suoi concetti di base anche se può essere una curva di apprendimento un po' ripida, specialmente se si è abituati a CVS o Subversion.

Ottenere Git (Windows, OSX, Linux e altri)

Il supporto per Git era, fino a poco tempo fa, limitato principalmente a Linux, ma le build sono ora disponibili per i sistemi operativi più popolari:

Dopo aver scaricato e installato Git per il proprio sistema operativo, i comandi git in questo documento dovrebbero funzionare correttamente.

Ottenere il codice da Git

La versione da riga di comando di Git è discussa qui. I client grafici sono poco più di wrapper attorno alla versione da riga di comando, quindi si possono dedurre abbastanza facilmente i parametri corretti.

Il repository git ufficiale di Moodle è disponibile su git://git.moodle.org/moodle.git, con un clone ufficiale su git://github.com/moodle/moodle.git. Per inizializzare il checkout locale, utilizzare:

$ cd /path/to/your/webroot
$ git clone git://git.moodle.org/moodle.git                       (1)
$ cd moodle
$ git branch -a                                                   (2)
$ git branch --track MOODLE_35_STABLE origin/MOODLE_35_STABLE     (3)
$ git checkout MOODLE_35_STABLE                                   (4)
  • Il comando (1) inizializza il nuovo repository locale come clone del repository moodle.git upstream (cioè il server remoto). Il repository upstream è chiamato 'origine' per impostazione predefinita e crea una nuova directory chiamata moodle, dove scarica tutti i file. Poiché sta recuperando l'intera cronologia di tutte le versioni di Moodle, questa operazione può richiedere un po' di tempo.
  • Il comando (2) elenca tutti i rami disponibili.
  • Utilizzare il comando (3) per creare un nuovo ramo locale chiamato MOODLE_35_STABLE e impostarlo per tracciare il ramo remoto MOODLE_35_STABLE dal repository upstream.
  • Il comando (4) si sposta sul ramo locale appena creato.

Errore: Git Connection Refused

fatal: unable to connect to git.moodle.org: git.moodle.org[0: 34.210.133.53]: errno=Connection refused

Nota: Git ha un enorme numero di opzioni per ogni comando ed è effettivamente possibile eseguire il processo di cui sopra con un singolo comando (lasciato come esercizio).

Git da dietro un firewall

Git utilizza un protocollo di sola lettura che può essere bloccato dal firewall (porta 9418). Se questo è un problema, è possibile utilizzare la versione http di Github https://github.com/moodle/moodle. È un po' più lento, quindi utilizzare il protocollo Git se possibile.

Aggiornare l'installazione

Il team di sviluppo di Moodle esegue l'integrazione e il test dei bug corretti ogni lunedì e martedì. Mercoledì si possono installare tutte le patch aggiornando il codice. Controllare lo Template:EN shortlog per vedere se il repository ufficiale è già stato aggiornato o meno.

To update your code to the latest version (on the MOODLE_35_STABLE branch) all you have to do is:

Per aggiornare il codice all'ultima versione (sul ramo MOODLE_35_STABLE), tutto ciò che occorre fare è:

$ cd /path/to/your/moodle/
$ git pull

Se il sito è di produzione, si dovrebbero comunque considerare le istruzioni di Aggiornamento (ad esempio, prendere i backup).

Installare un'estensione di terze parti dal repository Git

This is one way to handle adding plugins from other Git repositories into your Moodle repository. Another way is to use Git Submodules. However, at the time of writing, this is one of Git's rougher features and should be regarded as an advanced option.

Questo è un modo per gestire l'aggiunta di plugin da altri repository Git nel repository Moodle. Un altro modo è usare Git Submodule. Tuttavia, al momento della stesura, questa è una delle caratteristiche più ruvide di Git e dovrebbe essere considerata un'opzione avanzata.


For example, let us say we want to install the Certificate module from its Git repository into our Moodle Template:Version. Ad esempio, supponiamo di voler installare il Modulo Certificato dal repository Git su Moodle 3.5:

$ cd /path/to/your/moodle/
$ cd mod                                                          (1)
$ git clone https://github.com/markn86/moodle-mod_certificate certificate     (2)
$ cd certificate
$ git checkout -b MOODLE_35_STABLE origin/MOODLE_35_STABLE        (3)
$ git branch -d master                                            (4)
  • Il comando (1) cambia la directory corrente nella cartella mod del clone Moodle locale.
  • Il comando (2) crea una nuova sottodirectory certificato e crea un clone locale del repository di certificati.
  • Il comando (3) crea un nuovo ramo locale che traccia il ramo remoto con una versione del certificato per Moodle 3.5.
  • Il comando (4) cancella il master che è stato creato automaticamente dal clone git in (2) poiché non lo vogliamo in questo controllo di produzione.
Nota: Occorre verificare prima la compatibilità di un modulo con il ramo Moodle chiedendo direttamente al Maintainer prima di clonare il repo o - se si vuole indovinarlo - emettendo il comando sottostante prima di eseguire il comando (3), per verificare cosa è disponibile tra i rami:
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/MOODLE_20_STABLE
  remotes/origin/MOODLE_21_STABLE
  remotes/origin/MOODLE_22_STABLE
  remotes/origin/MOODLE_23_STABLE
  remotes/origin/MOODLE_24_STABLE
  remotes/origin/MOODLE_25_STABLE
  remotes/origin/MOODLE_26_STABLE
  remotes/origin/MOODLE_27_STABLE
  remotes/origin/MOODLE_28_STABLE
  remotes/origin/MOODLE_29_STABLE
  remotes/origin/MOODLE_30_STABLE
 remotes/origin/MOODLE_31_STABLE
  remotes/origin/master

Ciò eviterà un messaggio di errore quando si invia il comando (3) a un ramo inesistente, ad esempio:

§ git checkout -b MOODLE_31_STABLE origin/MOODLE_31_STABLE
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/MOODLE_31_STABLE' which can not be resolved as commit?
Nota: Per correggere l'errore precedente, utilizzare: "git fetch origin MOODLE_31_STABLE:LOCAL_MOODLE_31_STABLE"


Ora è saggio aggiungere la nuova cartella mod/certificate/ all'elenco dei file ignorati del clone Moodle principale, altrimenti lo stato del clone principale continuerà a ricordare che il nuovo codice non è stato registrato.

$ cd /path/to/your/moodle/
$ echo /mod/certificate/ >> .git/info/exclude

Per aggiornare subito l'installazione di Moodle, è necessario visitare entrambi i repository Git e prelevare le modifiche da upstream.

$ cd /path/to/your/moodle/
$ git pull
$ cd mod/certificate
$ git pull

Scrivere uno script di shell con queste linee nella root dell'installazione di Moodle è un'ottima idea. Altrimenti è facile dimenticare quali repository Git ci sono all'interno del repository Moodle principale.

Installare e mantenere le estensioni di terze parti utilizzando i sottomoduli Git

Come è stato detto nella sezione precedente, questo è solo per utenti esperti. Pertanto è necessario che avere una certa esperienza con Git e i suoi comandi. Verrà fornita una spiegazione dettagliata, ma per seguire questi passaggi è utile capire che cosa fanno questi comandi.

Opzioni e comandi avanzati sono disponibili sul (EN) Git book. Per eventuali domande sui sottomoduli Git, consultare prima il sito qui sopra.

Installare una nuova estensione in un sito Moodle esistente

Ad esempio utilizziamo il Modulo Certificato della sezione precedente.

$ cd /path/to/your/moodle
$ git submodule add https://github.com/markn86/moodle-mod_certificate mod/certificate

Si noti che Git sta segnalando due nuovi file nel repository:

$ git status
# On branch MOODLE_29_STABLE
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#	new file:  .gitmodules
#	new file:  mod/certificate
#

Il file '.gitmodules' contiene il percorso locale e l'url di tutti i sottomoduli. Deve essere eseguito, se si intende clonare il repository in un secondo momento (consultare la pagina Ambiente di sviluppo Moodle con i sottomoduli Git). Prima di eseguirlo, assicurarsi di controllare la configurazione del repository Git del plugin, poiché le impostazioni generate automaticamente potrebbero non essere sufficienti. Per gli aggiornamenti futuri è utile tenere traccia del ramo remoto, che corrisponde alla versione Moodle del repository.

$ cd mod/certificate
$ git branch -avv
* master                          345f5b1 [origin/master] Replaced deprecated function
  remotes/origin/HEAD             -> origin/master
  remotes/origin/MOODLE_20_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_21_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_22_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_23_STABLE fe047de Check that the function exists rather than relying on the Moodle version
  remotes/origin/MOODLE_24_STABLE 1051f7d CONTRIB-4892 Fixed the email to others functionality
  remotes/origin/MOODLE_25_STABLE cdb221a CONTRIB-4946: Removed character from language file breaking AMOS
  remotes/origin/MOODLE_26_STABLE 696802a Increased version
  remotes/origin/MOODLE_27_STABLE d3c0379 Increased version
  remotes/origin/MOODLE_28_STABLE fa8df83 Increased version
  remotes/origin/MOODLE_29_STABLE 3f03740 Replaced deprecated function
  remotes/origin/master           345f5b1 Replaced deprecated function

Git ha creato il ramo 'master' che traccia 'origin/master' automaticamente, perché il repository remoto ha estratto 'master' . Pertanto, creare un nuovo ramo, che tiene traccia del ramo remoto appropriato. Naturalmente, questo è possibile solo se il repository remoto offre quei rami.

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

Non è necessario eliminare il ramo 'master' , ma è inutile tenerlo. In effetti, queste impostazioni non devono essere toccate in seguito.

Il passaggio finale consiste nel eseguire le modifiche nel repository principale.

$ cd /path/to/your/moodle
$ git commit -a -m "New extension mod_certificate installed"

È necessario garantire che l'esecuzione includa solo le modifiche per il nuovo sottomodulo Git (poiché '-a' esegue tutte le modifiche non effettuate).

Mantenere i sottomoduli Git

Mantenere una serie di sottomoduli è estremamente semplice. Si consideri un repository Moodle con diversi sottomoduli installati. Tieni presente che l'estensione 'mod_mylittleextension' è un plug-in falso, creato per uno scenario di test in questo esempio. Non è un modulo Moodle ufficiale. Per aggiornare tutti i sottomoduli in una sola volta, digitare:

$ 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  master     -> origin/master
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_29_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)
#

Il comando 'git submodule foreach [un altro comando]' cammina attraverso tutti i repository del sottomodulo ed esegue ciò che è specificato da '[un altro comando]' . In questo caso è 'git pull' . Pertanto il modulo mylittleextension è stato aggiornato e il repository principale non è più pulito fino a quando i cambiamenti non vengono eseguiti:

$ git commit -a -m "Plugin updates"

Mantenere i plugin con i sottomoduli Git ha anche un'altra applicazione rispetto al semplice processo di aggiornamento. In una scala più ampia può essere utilizzato per mantenere un progetto Moodle, in cui più sviluppatori devono avere una copia esatta del moodle senza organizzare manualmente i plugin esterni. Ulteriori informazioni su questo argomento sono disponibili su Ambiente di sviluppo Moodle con i sottomoduli Git.

Vedere anche

Discussioni sul forum
Risorse esterne