Learn Where GitHub Fits in the Development Lifecycle
After completing this unit, you’ll be able to:
- List the essential tools in the modern developer’s toolkit.
- Explain how Git and GitHub work together within the SDLC.
- Describe GitHub’s place in the center of the software development ecosystem.
Git and GitHub share a name and a mission, but they’re not the same thing. Distinguishing exactly where the line is drawn between Git and GitHub may take some time, and that's okay. You were introduced to each in the previous unit, but let's dig a little deeper to understand how they work together.
Simply put, Git is the application that keeps track of everything related to the changes on your project over time. Let’s start by defining a few key terms:
Repositories: A collection of source files used to compile your project.
Commits: A snapshot of your project as it existed at a specific point in time. You create commits as you work on your project to indicate points when you added and removed discrete units of work.
Branch: A series of commits that represent the changes in your project over time. Every repository has a default branch, which contains the production-ready version of your code. Create additional branches when you’re working on
new features, fixing bugs, or making other changes to your project. These branches keep your experimental code separate from your tested production code.
Merge: The combined history of two or more branches. Most of the time, you’ll merge your feature branch into the default or deployed branch of the repository in order to move the features into production.
- Tag: A pointer to a specific commit, which provides a persistent reference to an event. Typically, tags are used with semantic versioning to represent points when your application was released.
GitHub is a host for Git repositories with collaboration features that let you apply and test changes to your code. In Git terms, GitHub serves as a remote, giving developers an accessible source of truth for their shared work. In addition to having access to all of the Git data for your repository, GitHub has a few key terms of its own:
Issues: Have general discussions about your project, make plans for new features, and discuss bugs. An issue is only a discussion, no actual changes to code take place here.
- Pull requests: A pull request is a package of commits you’re requesting to be merged into the default branch. A pull request provides a place to discuss the changes you’re proposing and invite other team members to comment and complete code reviews. Pull requests also help you see the result of automated tests and many other cool integrations.
GitHub is designed to provide a highly transparent and contextual environment for developers to do their best work.
In short, Git handles version control and GitHub handles collaboration.
Together, Git and GitHub form the heart of the modern developer’s toolkit. Similar to Salesforce apps, hundreds of integrators have developed tools to customize and extend GitHub's functionality based on your preferences. This growing ecosystem performs essential tasks such as project management, continuous integration testing, deployment, code review, and more. A developer may use GitHub daily, but it would likely not be the only tool used.
Here are a few notable examples:
GitHub is not a complete development environment. While it does contain a simple UI for making changes, most developers prefer to work locally in an integrated development environment (IDE). Modern text editors such as Sublime Text, Atom, and Eclipse (using the Force.com IDE 2 for Salesforce developers) are becoming more popular as they apply the same customizable approach that combines simple text editing with thousands of user-created packages to enhance and customize workflows.
Continuous integration (CI) and continuous deployment (CD) applications are some of the most powerful tools you can add to your workflow. With GitHub, these CI and CD integrations test, build, and deploy your project based on specifications stored in the repository. These essential integrations cut down on time and frustration of running manual tests, the inconsistencies of “it works on my machine,” and waiting for others to perform simple reviews or tests.
The other types of integrations that pair with GitHub are endless, ranging from code quality checking tools to dependency management, and even automated security checks. GitHub’s API and webhooks make it easy for new integrations to be added and customized in whatever way developers need.
With a seemingly endless array of choices, you can customize GitHub to meet your project’s exact needs and preferences. Whether you prefer a lightweight project management solution like GitHub’s built-in projects, or something fully featured like the Waffle.io or ZenHub integrations, options abound in the GitHub Ecosystem. In the next unit, we introduce the foundational GitHub flow, but where you take it from there is up to you!