Git Workflow¶
Getting Started¶
Install the command line client, download a GUI and have a look at the basic Atlassian tutorial.
GUI¶
- SourceTree - Windows or MacOS X.
- Gitg - Linux/GNOME.
Clone the SeqAn repository¶
SeqAn is hosted on GitHub. Execute the following command to get the last sources:
~ # git clone https://github.com/seqan/seqan.git seqan
SeqAn Workflow¶
The SeqAn workflow is based on the Gitflow workflow by Atlassian. The workflow is based on two persistent branches: master and develop. Almost all development occurs in develop.
The master branch is only updated before a new release, either by merging from develop which will create a new minor release [2.x+1.0] or through an emergency fix which will result in a patch level release [2.x.y+1]. Thus, the master branch is always stable and usually identical to the latest release, and the develop branch contains the latest development but might occasionally have breaking changes.
Develop a feature or fix a bug¶
Follow the steps in “Mary and John begin new features” and “Mary finishes her feature”.
- Create a new branch based on develop.
- Perform your changes and commit them onto your feature branch.
- Keep your commit history concise (see below) and write proper commit messages.
- When the development is complete, push the feature branch to your repository on GithHub.
- Make sure that you have signed the Contributor License Agreement
- Create a GitHub pull request to develop.
- Delete your branch once it has been merged.
What to include in a commit¶
The git history of your contribution should be concise. Please follow the following hints:
- A single commit should be a logical unit; don’t split a logical change over multiple commits and don’t address different issues in one commit.
- Do not include revisions to your changes in your history, i.e. if you receive comments on your PR, change your previous commits via
git commit --amend
orgit rebase
, don’t just push more changes onto the history. - Always split functional changes and style changes, including whitespace changes, into seperate commits.
- Follow our style for commit messages.
- If you don’t follow these rules your contribution will be squashed into a single commit by the project member doing the merge.
An example of a good git log:
[FIX-#666] fix bug in sequence i/o module
[INTERNAL] remove empty lines
[FIX] repair apps that depended on broken behaviour
[TEST] add test that triggers #666
An example of a bad git log:
[FIX] fix bug in sequence i/o module
[INTERNAL] remove empty line
[FIX] forgot to change foo/bar.h
revert previous changes
revert "revert previous changes"
[FIX] correctly this time
[INTERNAL] remove another empty line
[FIX,TEST] fix apps and add test