GitHub is a platform that hosts code for a Version Control System (VCS) called Git. It helps manage many features of Git that involve repositories, branches, commits, and Pull Requests. Encourages collaboration on projects with features like bookmarking repositories (using stars) or get notifications about updates (watch). Makes it easy to Fork a repository to provide a way for external parties to contribute to a codebase. Also provides labels for issues and Pull Requests to keep things organized.
GitHub offers tools for project management including issues, wikis, pulse and graphs. Teams can be configured to track features and progress, similar to Pivotal Tracker. README documentation, CONTRIBUTING guidelines, CODE_OF_CONDUCT, PULL_REQUEST_TEMPLATE, ISSUE_TEMPLATE, CHANGELOG, and LICENSE are all great for estabilshing agreements around a project, especially when it is public.
An Organization
allows repositories and people to be grouped together and makes it easy to manage permissions.
Teams using Git should establish a branching workflow to introduce changes into a codebase. There are many workflows that can address different issues with software development. The workflow should be agreed upon ahead of the project implementation and adhere to the rules with very few exceptions. This strategy helps minimize conflicts between changes in the code.
One basic pattern documented by GitHub is called GitHub Flow
- Create a branch
- Add commits
- Open a Pull Request
- Review and discuss the changes
- Deploy
- Merge
GitHub can notify external services when specific events occur on a repository using Webhooks
.
- CircleCI - Build and test project code
External tools and applications can be configured to extend GitHub with new features.
- Slack - Send change notifications to Slack channels
- Markdown - A markup language to format text
- Gists - Store public and private files such as code snippets, guides or even full applications as a Git repository
- GitHub Pages - A place to publish public webpages like documentation or example applications
- GitHub API - API to integrate a custom application or service with GitHub
- GitHub Business - Host repositories on GitHub or on private servers