Git Workflow

Getting Started

Install the command line client, download a GUI and have a look at the basic Atlassian tutorial.

GUI

Documentation

  • Atlassian git tutorials - easy and recommended.
  • Official git manual - complete but more advanced.

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”.

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 or git rebase, don’t just push more changes onto the history.
  • Always split functional changes and style changes, including whitespace changes, into separate 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