Git & GitHub¶
We use git and GitHub for a lot of our collaborative work. Git is a version control system which allows contributors to view a full history of our work (whether it's source code for software, designs for our kit hardware or something else) as well as for their contributions to add to that history. GitHub provides us with an online platform which is openly readable by everyone as well as allowing for review of contributions to share knowledge and maintain quality.
A full user guide to either tool is well beyond the scope of the runbook, though it is worth outlining some aspects of our approach.
If you're just starting out, GitHub have some great guides about both git and GitHub. The Pro Git book is also very accessible.
Contribution¶
In general we prefer that published history is preserved. This means that while
you're free to use rebase
locally to tidy up your commits before review, any
commits which have been pushed should not be modified without very good reason.
Like the majority of open source projects the vast majority of contributions will be made through a personal clone on GitHub (what GitHub calls a "fork"), rather than directly to the repo. Maintainers who do have direct access to repos are strongly encouraged to follow this approach as well, in order to ensure that this workflow works for everyone rather than ending up with two classes of contributors.
Repositories¶
We have a large number of repositories and so consideration should be given
before any more are created. As we are in the process of moving from another
hosting solution (cgit
on a server of our own) to GitHub, this is
doubly the case as there may be an existing but not-yet migrated repository
which should be used.
For content which varies by year (for example the rules of the competition game
or arena layout) we prefer to have a single repository which either has a single
linear history (such as the rules) or a number of directories named for the year
(e.g: sr2019
). This allows for easy comparison of changes by year,
facilitating iterations for future years, as well as preventing a proliferation
of year-specific repositories.
A notable exception to this is the competition state ("compstate") repos, which
are unusual in that the compstate is the repo, rather than being within the
repo.