Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Looking to get the Mifos source code? You've come to the right place. Instructions on getting, and contributing to, the Mifos source code through our Git repository can be found below.

Effective use of version control is critical to effective team collaboration on Mifos. Our version control system is how we communicate code changes with one another.

Table of Contents
maxLevel2
outlinetrue

Browse Source

...

Download a snapshot

  • Download the latest code without version control

If you want to do download source code of some previous release then you should browse the repository and use "snapshot" link to download that code as a tar.gz archive.

Developer Setup

Follow Please follow this section completely before cloning any Mifos repositories!.

1. Install Git

...

The following sections outline how to install git on Windows, Ubuntu and the Mac OS:

Installing Git on Windows:

  • Install msysGit (look for a file named similarly to Git-1.7.0.2-preview20100309.exe)
  • select default components
  • in "Adjusting your PATH environment" select "Run Git from the Windows Command Prompt"
  • choose the default for the "Configuring the line ending conversions": "Checkout Windows-style, commit Unix-style line endings"

...

Installing Git on Ubuntu:

No Format
sudo apt-get install git-core
gitk

...

You may also find Step 4 of the Ubuntu install guide to be a handy reference.

Installing Git on Mac OS:

To install using macports, follow instructions here.

Alternately, an installer (.dmg) can be found at git's web site. However, at the time of this writing, a .dmg file for the latest version of git is available for Leopard-intel but not Snow Leopard.

...

(This .dmg file has been found to work just fine on Snow Leopard as well, despite being labeled as for Leopard.)

2. Configure Git line endings

Tell Git to handle line endings for you so folks on different platforms can live in harmony.

Configure line endings on Windows

...

":

Do this on the Git Bash MINGW msysGit command line:

No Format
git config --global core.autocrlf

...

Linux and Mac

...

 true

Configure line endings on Linux or Mac OS:

No Format
git config --global core.autocrlf input

More

...

information on line endings is available at the following URLs:

3. Configure Git Author Info

To make all commits clear/legible/accessible, please configure git to use your full, real name and email.

This means...means user.name must be your real/legal first and last name. Do not abbreviate either. If you have more than two names, pick the two you are most commonly known by.

...

No Format
git config --global user.name "Joe Example"

user.email must be a working email address. This address should be permanent, ie: not something that will change when you change jobs.

...

No Format
git config --global user.email joe@example.com

Day to day usage

For a quick summary, see the Git homepage.

Clone

...

4. Clone the codebase (read-only)

This is basically similar to a checkout operation - you'll get a read-only personal copy of the source code, which you can examine and modify .For read-only access:as you like.

In the following example, we clone the "head" repository, but you can clone any of the repositories listed at https://github.com/mifos (also see below for tables explaining purposes of the various repositories). 

No Format
git clone git://github.com/mifos/head.git.sourceforge.net/gitroot/mifos/REPOSITORY_NAME

...


Active repositories:

Repository

Purpose

bi

Mifos business intelligence code.

cloud

Code related to the Mifos cloud.

documents

Mifos documentation and various files that don't belong in head.

head

Most work on the Mifos MIS Java Web application happens here. Many development branches exist. Mifos release maintenance branches are also found in head, one for each release since 1.6.x.

maven

Maven-related code used for building code in the head repository.

plugins

Mifos plugins. Projects in this repository build plugins to assist with imports of various kinds of transactions into Mifos.

www

Code for mifos.com and mifos.org.

Archived/deprecated/old/inactive repositories:

repository

purpose

cheetah

A spike on a complete Mifos rewrite. Mostly incorporated into head.

htmlcss

Static version of Mifos UI used during a Summer of Code 2010 CSS redesign project.

marketplace

An old spike.

1.4.x

"master" in this repository is an old (1.4.x) release maintenance branch. See head for code for 1.6.x and later releases.

1.5.x

"master" in this repository is an old (1.5.x) release maintenance branch. See head for code for 1.6.x and later releases.

5. Fork the repository

To obtain a personal copy of the source code, which you can immediately commit to, head to Github (http://www.github.com/) and create an account there. You can fork the main Mifos repository by:

No Format
git clone gitgit@github.com:username//mifoshead.git.sourceforge.net/gitroot/mifos/head

Read-write access uses a url with an "ssh" schema, and permission granted by a current Mifos maintainer.

No Format
ssh://USERNAME@mifos.git.sourceforge.net/gitroot/mifos/head

Where USERNAME is your sf.net username.

Key-based auth

Unless you want to enter your password for every push, post your public SSH key on sf.net. Once you have logged onto your sourceforge account, navigate the the account/ssh page and paste your authorized public key on the form. To reach the edit ssh keys page on sourceforge, click on Account in the upper right corner, then click the Services Tab. Look for "Edit SSH Keys for Shell/CVS" link.

...


Add the Mifos repository as the upstream repository (the repository the fork came from):

No Format

git remote add upstream git://github.com/mifos/head.git

If, whilst you've been inspecting the code or making changes, other commits have been made to the Mifos repository that you cloned, you can pull in upstream changes from the original repository with:

No Format

git fetch upstream

More help is available here: https://help.github.com/articles/fork-a-repo

6. Commit to a local repository

Add files to the git "index" so they will be committed with "git add". Optionally, instead of running "git add", include -a when running "git commit" to commit all local modifications except new files. Then, commit:

No Format
git commit

In Git, the first 80 characters of the first line are, by convention, a summary of the rest of the log message. See Commit Log Guide.

7. Push your changes to a remote repository

If the remote repository is called "origin", you might do:

No Format
git push origin master

8. Update your master branch

No Format
git pull --rebase origin master

Using rebase is recommended to keep the commit history graph clean. Specifically, trivial merges cause a great deal of clutter. We may eventually institute a server side hook to prevent trivial merges.

9. Creating a patch

Instead of forking the Mifos repository you want to contribute to, you can create a patch. Here are two suggestions.:

1) Create an emailable (or JIRA-attachable) patch from your last local commit:

No Format
git format-patch 
origin/master

2) If you have a public git repository, create a pull request, with for example something like this:

No Format
git request-pull -p 5e5303a9328b4e620c58ec1f69fbb2118077d594 git://github.com/vorburger/mifos-head.git

Either way, send the output to the mifos-developer mailing list, and describe your patch following Commit Log Guide.

You can also action the pull request via the Github user interface - just update the Mifos bug ticket with a helpful notification. For example:

No Format

Submitted in github pull request #x (pending).

Branching basics

Please refer to Pro Git: Basic Branching and Merging.

...

No Format
git branch NAME_OF_BRANCH

Deleting a local branch

No Format
git branch -d NAME_OF_BRANCH

List branches

Local branches can be listed with:

No Format
git branch

To see all "remote" branches:

No Format
git branch -a

Note that "remote branch" really means a local copy of a remote branch.

...

No Format
git checkout BRANCH_TO_MERGE_CHANGES_TO
git merge OTHER_BRANCH

More on merging

...

Moving changes from one repository to another

I'm not sure which way is best.

Cut and Paste

Say you wanted to merge a change from "head" to "1.5.x". Create a patch with "git format-patch". Apply the patch to the other repository with "git am".

Branch and Merge

Say you're following Mifos "head", and you want to pull a change from the 1.5.x line of development. You first have to do:

No Format
git remote add 1.5.x ssh://USERNAME@mifos.git.sourceforge.net/gitroot/mifos/1.5.x

Then you mirror the branch "master" from the remote repository "1.5.x", pull in a change, and push it back up to "head":

No Format
git fetch 1.5.x
git cherry-pick 5948a92795197bc4e6577173445d0efac09130ae
git push origin master

Resolving merge conflicts

...

No Format
git tag -s 1.5.0 f32b705f09b879bc91324f31cbcbff87637d9fb3
git push --tags origin

Builds

Hudson automatically tags commits as they are built. These are currently only stored locally in Hudson's clones. It might be convenient to automatically propagate these tags elsewhere.

Where to get more help

Eclipse IDE Integration

EGit provides "Team" (version control) capabilities in Eclipse.

...

No Format
mkdir mifos-1.5.x && cd mifos-1.5.x
git svn init https://mifos.svn.sourceforge.net/svnroot/mifos/branches/v1.5.x
git svn fetch

This will take a while. While this is running, create a new git repository at sf net for the branch you are about to copy from Subversion.

...

No Format
git remote add origin ssh://meonkeys@mifos.git.sourceforge.net/gitroot/mifos/1.5.x
git push origin master

Mid-migration maintenance

...

No Format
git svn fetch
git merge remotes/git-svn
git push origin master

To move your changes past all svn changes in your local git-svn clone, do:

No Format
git svn rebase
git push origin master

If you lose your original git-svn clone of, say, /branches/1.5.x, you can do the following to hook a clone of the 1.5.x repo back up to the corresponding branch in svn:

No Format
git config svn-remote.svn.url https://mifos.svn.sourceforge.net/svnroot/mifos/branches/v1.5.x
git config svn-remote.svn.fetch ':refs/remotes/git-svn'

Then try rebase/push as mentioned above.

...

No Format
#!/bin/bash
set -o errexit

for repodotgit in `\ls $HOME/repositories/mifos`
do
    cd $HOME/repositories/mifos/$repodotgit
    repo=`basename $repodotgit .git`
    git fetch --quiet git://mifos.git.sourceforge.net/gitroot/mifos/$repo > /dev/null
    cd - > /dev/null
done

rsync --archive --delete --relative \
    mifos.git.sourceforge.net::gitroot/mifos/*/config \
    mifos.git.sourceforge.net::gitroot/mifos/*/description \
    mifos.git.sourceforge.net::gitroot/mifos/*/hooks \
    $HOME/extra_git_files

See also: http://kerneltrap.org/mailarchive/git/2010/5/20/30749

Test restores were performed by copying the backup back to sf.net and cloning.

We moved from sf.net to github https://groups.google.com/forum/#!topic/mifosdeveloper/ksIORnLVHlA/discussion|https://groups.google.com/forum/#!topic/mifosdeveloper/ksIORnLVHlA/discussion