This page describes how to maintain a copy of Moodle on your production server which can easily be upgraded using Git. If you have customisations of Moodle core code, you are advised to follow the instructions in the Git for developers guide.
To get the most of of Git it is worth making the effort to understand its basic concepts - see the section below. It can be a bit of a steep learning curve, especially if you are used to CVS or Subversion.
Getting hold of Git (Windows, OSX, Linux and others)
Support for Git was, up until recently, mostly confined to Linux but builds are now available for most popular operating systems:
- List of downloads from Git site - http://git-scm.com/download
Once you have downloaded and installed your OS relevant git installation, the git commands in this document should work with your operating system.
Obtaining the code from Git
The command line version of Git is discussed here. Graphical clients are little more than wrappers around the command line version, so you should be able to deduce the correct parameters quite easily.
You can find the official Moodle git repository at git://git.moodle.org/moodle.git (with an official clone at git://github.com/moodle/moodle.git). To initialize your local checkout, use
$ cd /path/to/your/webroot $ git clone git://git.moodle.org/moodle.git (1) $ cd moodle $ git branch -a (2) $ git branch --track MOODLE_28_STABLE origin/MOODLE_28_STABLE (3) $ git checkout MOODLE_28_STABLE (4)
- The command (1) initializes the new local repository as a clone of the 'upstream' (i.e. the remote server based) moodle.git repository. The upstream repository is called 'origin' by default. It creates a new directory named moodle, where it downloads all the files. This operation can take a while as it is actually getting the entire history of all Moodle versions
- The command (2) lists all available branches.
- Use the command (3) to create a new local branch called MOODLE_28_STABLE and set it to track the remote branch MOODLE_28_STABLE from the upstream repository.
- The command (4) actually switches to the newly created local branch.
Note that Git has a huge number of options for each command and it's actually possible to do the above process with a single command (left as an exercise!!).
Git from behind a firewall
Git uses a read-only protocol that may be blocked by your firewall (port 9418). If this is a problem, you can use Github's http version https://github.com/moodle/moodle.git. It's a bit slower, so use the Git protocol if you can.
Updating your installation
The Moodle development team performs integration and testing of fixed bugs every Monday and Tuesday. On Wednesday you can install all patches by updating your code. Check the shortlog to see if the official repository has been already updated or not.
To update your code to the latest version (on the MOODLE_28_STABLE branch) all you have to do is:
$ cd /path/to/your/moodle/ $ git pull
If this is a production site you should still consider the Upgrade instructions (e.g. take backups).
Installing a contributed extension from its Git repository
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.
For example, let us say we want to install the Certificate module from its Git repository into our Moodle 2.8.
$ cd /path/to/your/moodle/ $ cd mod (1) $ git clone https://github.com/markn86/moodle-mod_certificate.git certificate (2) $ cd certificate $ git checkout -b MOODLE_28_STABLE origin/MOODLE_28_STABLE (3) $ git branch -d master (4)
The command (1) changes the current directory into the mod folder of your local Moodle clone. The command (2) creates a new subdirectory certificate and makes a local clone of vanilla Certificate repository. The command (3) creates a new local branch that will track the remote branch with a Certificate version for Moodle 2.8. The command (4) deletes the master that was created automatically by git-clone in (2) as we do not want it in this production checkout.
Note: you should check first the compatibility of a module with your Moodle branch by asking directly to the Maintainer before cloning the repo or - if you want to guess it - by issuing the command below before running the command (3), in order to verify what is available among the branches:
$ 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/master
This will avoid an error message when you issue the command (3) against a nonexistent branch, e.g.:
§ git checkout -b MOODLE_28_STABLE origin/MOODLE_28_STABLE fatal: git checkout: updating paths is incompatible with switching branches. Did you intend to checkout 'origin/MOODLE_28_STABLE' which can not be resolved as commit?
Now it is wise to put the new directory mod/certificate/ to the list of ignored files of the main Moodle clone, otherwise a status of the main clone will keep reminding you that the new code has not been checked in.
$ cd /path/to/your/moodle/ $ echo /mod/certificate/ >> .git/info/exclude
To update your Moodle installation now, you must visit both Git repositories and pull changes from upstream.
$ cd /path/to/your/moodle/ $ git pull $ cd mod/certificate $ git pull
Writing a shell script with these lines in the root of Moodle installation is a very good idea. Otherwise it is easy to forget what Git repositories are there within the main Moodle repository.
See also
- Moodle Docs
- Git FAQ
- Windows installation using Git
- Git for Mac
- dev:Moodle versions
- For some screenshots see Frank Ralf/Git (still work in progress)
- For fixing a Tracker Issue (MDL) / Forking Moodle / CONTRIButing code https://docs.moodle.org/en/User:Sam_Hemelryk/My_Moodle_Git_workflow
- Case study Git + Moodle from Technical University Berlin
- Moodle forum discussions
- Github and Moodle deployment for production
- Got GIT installed on my site- here's how!
- GIT help needed
- Best way to manage CONTRIB code with GIT
- Handy Git tip for tracking 3rd-party modules and plugins
- Moodle Git repositories
- Git and CVS
- GIT for dummies
- Git and upgrading misunderstanding
- Clear git guide for Admins (not developers)
- External resources