The OpenMRS community is currently in the process of evaluating Git as a replacement for SVN.
There is an OpenMRS organization on GitHub (http://github.com/openmrs) used to host community OpenMRS projects. All bundled modules managed within git are kept under this organization with the naming convention "openmrs-module-<moduleid>". All community-supportes modules are welcome and encouraged to be kept under the OpenMRS organization as well. Other organizations and authors who maintain OpenMRS modules under other accounts within github are encouraged to use the same naming convention.
When using Git for your project, please use the following naming conventions:
openmrs-module-htmlformentry); for contributions, use the name "openmrs-contrib-contribname" (for example:
When creating a new module or contrib, please e-mail email@example.com to request a module ID or contribution name, including your OpenMRS ID, a description of your module/contribution, and your proposed module ID or contribname. The conversation with the "code" e-mail group is used to avoid duplicates and maximize consistency of naming; you should expect a module ID to be decided within one day of your request. Eventually, we hope to create a more automated process for ensuring uniqueness of module identification & awareness of existing modules.
To get started with Git and GitHub you should read the documentation for your OS:
These pages explain adding SSH keys (better than passwords), and configuring your local git to use your GitHub credentials, e.g.
The tool that Github recommends is svn2git. It expects your project to be organized in the standard SVN way of trunk, branches and tags, so you should reorganize the project before conversion if necessary.
Copy the list of authors from Github Authors txt into an authors.txt file and from that folder, start with:
Be patient. The svn2git command can run for a while without any visual feedback. You can open another terminal and peek at the contents of the directory (most initial content goes into the .git folder which is hidden by default).
If you get an error from svn2git, it's possible that one or more users are missing from the authors.txt file. Checkout a local copy of the module from svn and list out all authors who contributed to the module:
Make sure each of these users has an entry in the authors.txt file. If anyone is missing, then find their corresponding git name and e-mail (if you cannot find these, e-mail the dev mailing list and ask for help).
Once the complete project is converted from svn to git format, you need to get it up to GitHub.
It's important to clearly indicate to other developers that the SVN project is no longer the active repository for the project. After successfully loading the code into github, rather than delete the project, you should:
Leaving the root folder with a MIGRATED text file pointing to the new location will allow any persons with old links to find the new location of the code.
As a courtesy, please notify OpenMRS developers with an e-mail to the developers mailing list (example).
It's preferable that older modules be mavenized prior to migrating to git, since it significantly reduces the size of the repository, making it easier for low-bandwidth developers to clone the repository locally. If your module is not yet mavenized, see Converting old code to Maven.
For Mavenized projects, IDE specific files should not be included in the repository. Git supports an ignore file similar to SVN called .gitignore, and so for a typical mavenized module project this will look like:
Mavenized projects do not include JAR files, but if your project was previously a normal project with JAR files, then these will still exist in the repository history, and will make your new Git repository much larger than it needs to be. However JAR files can be removed from the history of a project using the method described on this page:
Your pom.xml file also needs updated to refer to github instead of svn in the "scm" tags.
During the conversion, user accounts for the OpenMRS SVN repository can be mapped to personal GitHub accounts. This is done using a text file which lists account mappings as follows:
If authors list is not specified all the authors email id's will be randomly generated with the git hashes. The following command can generate a list of SVN accounts from an existing SVN repository:
We have a shared authors file. Please use and add to this as needed: Github Authors txt!
Here's the set of best practices to follow in distributed OpenSource projects.