UCLA Git Walkthrough (for Moodle)
Very basic guide how to get GIT set up on Windows or OSX.
Documentation:
Setting up the Environment
- Windows: http://help.github.com/win-set-up-git/
- Mac OSX: http://help.github.com/mac-set-up-git/
- Linux: http://help.github.com/linux-set-up-git/
Configure Line Endings
- In order to avoid issues with line endings when cloning on to Windows machines, follow the directions here: Dealing with line endings
Setting up Git global configs
Before making commits, it is useful to add your name and email:
git config --global user.name "Your Name"git config --global user.email "Your email address"
Set these git config settings
git config --global push.default current // only push current branch to remotegit config --global core.ignorecase false // makes sure that git is case sensitivegit config --global pull.rebase true // rebase by default when doing a pull
If you want to connect to github without SSH you need a token:
- Follow the directions here: Email and Github Tokens
Setting up your Github repository:
Clone the repository
- With Github Token
- git clone https://YOUR_GITHUB_USERNAME@github.com/ucla/moodle.git ./YOUR_LOCAL_MOODLE_FOLDER/
- With SSH RSA-key
- git clone git@github.com:ucla/moodle.git ./YOUR_LOCAL_MOODLE_FOLDER/
Work on a new feature/patch/test/update
Our workflow is similar to the workflow mentioned in this article: http://nvie.com/posts/a-successful-git-branching-model/
Name your git branch using our naming convention:
- type/jira ticket-short description
- The type, for now, should either be:
- feature (something that has never existed before or an improvement to a current feature)
- patch (a bug fix, can either come from internal or external sources)
- tests (For Behat or PHPunit only branches)
- update (reserved for core Moodle version and external plugin updates)
git checkout mastergit pull origin mastergit submodule update --init --recursivegit checkout -b feature/CCLE-<JIRA ticket number>-<feature-name>- Repeat the following steps as necessary:
- change file(s) -git commit -a -m "CCLE-#### - A useful short comment summarizing what you did."
git push -u origin <branch_name>- Merge task onto TEST
git checkout developmentgit pull origin developmentgit merge --no-ff <branch_name>git push origin development
If you run into merge conflicts when merging to development or it’s been a while since your development branch has been branched off of master, run the following command on your working branch:
git rebase origin/master
-Start- TEST machine ONLY
At this point, there could be more than one feature that is being tested! Once a feature/patch has passed testing, then merge it to the rc branch.
Creating rc branch
git checkout mastergit checkout -b <release_number>-rc- Now merge in several branches with fixes/features that passed review
git merge --no-ff feature/<feature_name>git push -u origin <release_number>-rc
-End- On TEST machine ONLY
-Start- On STAGE machine ONLY
git checkout -b <release_number>-rc origin/<release_number>-rc- Once rc passes testing on TEST/STAGE, merge it into master so it can go to prod
-End- On STAGE machine ONLY
Once the feature(s) has been successfully test on STAGE and is ready for PROD:
- The numbers M.m.v.rr should be the same as the numbers for the RC branch.
git checkout master git merge --no-ff origin/<release_number>-rc -m "Release <release_number>-gm: Description of what was in this release/use JIRA version description" git push origin master git tag M.m.v.rr-gm -m "Release <release_number>-gm: Description of what was in this release/use JIRA version description" git push origin master
git push origin M.m.v.rr-gm-Start- On PROD machine ONLY
- The numbers M.m.v.rr should be the same as the numbers for the RC branch.
git fetch git checkout M.m.v.rr-gm Validate things are working… Finished with release cycle!-End- On PROD machine ONLY
Pulling from a version from Moodle.org
git checkout -b update/M.m.vgit remote add core https://github.com/moodle/moodle.gitgit fetch core-
git merge -Xtheirs -m "CCLE-<ticket> - Upgrade to Moodle M.m.v" <version tag>- Might first want to try without the -Xtheirs if upgrading between minor versions.
- Resolve conflicts
git add <conflicted_file>- If needed, continue the merge
- Finish the pull.
- Push to development, test on TEST, push to STAGE then release on PROD.
- Be sure to notate the new RC and GM tags with the updated Moodle version M.m.v.00
- To upgrade to a major release of Moodle, follow the instructions in this guide: http://tjhunt.blogspot.com/2014/01/moving-ou-moodle-code-to-moodle-261.html