The process defined below is the adopted approach to managing the development for the principal internal repos in the Ably organisation; ie realtime
, infrastructure
, and website
. For other repos, this approach is also recommended, although there might be specific requirements or constraints in other repos that make a different approach more suitable.
The approach described here is pretty close to that described for One Flow.
There is a single primary long-lived branch, main
.
We aim to keep history reasonably linear, as much as is practical. That is: you should rebase your working branch against the current main
prior to raising a pull request. (And if the PR process takes sufficiently long that main
has advanced a good deal by the time you come to merge it, you should rebase again — and let CI run again! — prior to merging it). This has several advantages. For example:
main
HEAD
, rather than against an ancestor that no longer represents the current state of the code (with the mismatch then only exposed and dealt with when resolving conflicts in a merge commit, left separate from the main commits and excluded from the GitHub code review process)git merge-base --is-ancestor
PRs may be merged with –ff-only (github: ‘rebase and merge’, github automatically rebases for you) or –no-ff (github: ‘create merge commit’, after manually rebasing) according to your judgement. Generally, if a bunch of commits are related and it would help legibility for that to be obvious from the git history, you should use a merge commit (after rebasing). If not (eg PRs that are just one commit, or which are a roundup of not-really-related fixes), fast-forward merges (‘rebase and merge’) are fine.