Hi Devs, Thought of sharing this since we have some new committers. These are some guidelines that I think we can adopt in Stratos project. This is only my personal view, and open to discussion :)
1. Always create a branch in your fork when developing a feature or fixing a bug. We tend to forget this or even deliberately ignore it because we might think that the fix being done is not worth it. But Git was made for branching and merging is very cheap. This will avoid many merge conflicts. Once you are done-done with your task, merge it back to master. 2. Know when to use Git rebasing and merging If you continuously rebase your commits, then the chronological order of commits will be lost. Meaning that it is very hard to trace a bug by going through Git history. If you want to know why then read this great article [1]. On the other hand if you continue to use Git merging for even simple changes, then it will clutter the Git history with lots of ugly merge commits. Always keep an eye on commit log [2] and try to keep it clean. This is another good article about rebasing vs merging [3]. 3. Incomplete features on the Master Branch Master branch is not your playground :) Only well tested and complete features should be merged to master branch. You can continue to work on new features in your own branch of your personal fork. If someone needs to try out the latest feature that you are working on then he/she can "pull" from your "personal" fork, not from our main repo. I don't see any reason why we should maintain separate branches for new features. If multiple people are working on a new feature then those people can pull/push from/to each others' personal forks. Once everything is done-done, that can be merged back to master. 4. No broken builds on the master branch, ever Please make sure you run a complete maven build "with tests" before you push major changes to upstream repo. Yes it takes time and resources but build breaks can negatively affect everyone. If you break the build, others won't be able to continue with their work and in most cases only you would know where/how to debug and properly fix it. Mistakes can happen, but if you happen to build the break please fix it ASAP or temporary revert the commit until it is resolved. Tip: keep a separate VM on the cloud to run complete builds against your personal branches. There are lots of free cloud offering these days. 5. All new features or major changes should be tracked in JIRA Please put adequate information when you create JIRAs. Also put the commit ID, fix version(s) in the JIRA when you resolve them. [1] http://geekblog.oneandoneis2.org/index.php/2013/04/30/please-stay-away-from-rebase [2] https://github.com/apache/stratos/commits/stratos-4.1.x [3] https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase/ Please share your thoughts. Thanks. -- Akila Ravihansa Perera WSO2 Inc.; http://wso2.com/ Blog: http://ravihansa3000.blogspot.com