# How to contribute¶

To contribute to libNeuroML you need a github account then you should fork the repository at https://github.com/NeuralEnsemble/libNeuroML

Note: Fork is not a bad thing on a Github workflow. Fork basically means you have your own repository which is connected with upstream (the main repository from which official releases will be made). You can contribute back to upstream using Pull Request

## Setting up¶

Have a quick view at the doc: http://help.github.com/fork-a-repo/

1. Fork the repo (done on github website). Now you should have a libNeuroML under you username (mine for example sits happily here: https://github.com/mattions/libNeuroML)
2. Clone your repo locally (This is done once!)
git clone [email protected]:_username_/libNeuroML.git

1. Add upstream as remote branch which you follow
cd libNeuroML
git fetch upstream


You can check which branch are you following doing:

git branch -a


you should have something like:

[email protected]:libNeuroML(master*)$git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/upstream/master  This means you are currently on branch master and there are two remotes branches origin/master which is your origin master (the branch where you master gets pushed automatically and upstream/master which is the upstream master (the NeuroEnsemble one). ## Sync with upstream¶ Before starting to do some work, I’ll suggest to get the latest development going on the upstream repo git fetch upstream git merge upstream/master  If there are no conflict, you are all set, if there are some you can solve them with git mergetool  which will fire up your favourite merger to do a 3-ways merge. 3-ways means you will have your local file on your left, the remote file on your right, and the file in the middle is the conflicted one, which you need to solve. A nice 3-ways merger makes this process very easy, and merging could be fun. To see what you have currently installed just do git mergetool This is my response [email protected]:libNeuroML(master*)$ git mergetool
merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 emerge vimdiff
No files need merging


[Meld] (http://meldmerge.org/) is the first of the list and would be automatically picked up by git mergetool. Chose your favourite.

Well done, now you are all set to do some cool work!

## Working locally on a dedicated branch¶

Now you can work on your repo. The best way to do it is to create a branch with a descriptive name which indicate what are you working on.

For example, just for the sake of this guide, I’m going to close #2

git checkout -b fix-2


Now, I’m working on a different branch from master which is fix-2 This will come handy in a minute.

hack hack hack
git commit -am "some decent commit message here"


Now that I found how to fix this issue, I just want to push my branch online and open a pull request.

1. Push the branch online

git push origin fix-2

2. Open the pull request

Here I want to open a pull-request to integrate fix-2 into upstream/master

To do that I click Pull-Request and automatically a new Issue #3 is created where it is possible to comment.

If your code is not ready to be include, you can update the code on your branch and automatically the Pull Request will sync to the latest commit, so it is possible to change it after the Pull Request is started. Don’t be scare to open one.

## Release process¶

libNeuroML is part of the official NeuroML release cycle. As of 1/09/13 we are still ironing out the proecure. When a new libNueroML release is ready the following needs to happen:

• Update version number in setup.py
• update version number in doc/conf.py
• update release number in doc/conf.py (same as version number)