Using git to Contribute to OSS
There are plenty of resources out there to learn how to use git... but I'd say a good percentage of those focus on using git from git init
and on -- that is, starting a new repository from scratch.
This post is going to focus on using git to contribute to an existing, established project on github. I'm assuming no prior knowledge of git/GitKraken/SourceTree. That said, I'm going to assume you are using at least GitKraken or SourceTree and not the CLI.
Example Project
I encourage you to follow along. For my screenshots, I'll be using my "pg-migration" project but you can use any GitHub project you desire. I strongly encourage you to follow along.
Preparation
- SourceTree or GitKraken installed; all screenshots here will be with GitKraken
- Github: Create account and log in.
Lets Go
Open the "project" for GitHub. You want to fork the target repository. What this does is create a copy of the project to your GitHub account. This becomes your "remote working" space.
Upon clicking this, you see something like the following.
After the process, you'll be taken to the forked instance which will appear quite identical to the original. For example, the readme will be showing.
At this point, you clone the repository with git. Cloning is similar to check out used in TFS or Subversion; there is more to it but for now consider them the same thing. You want to clone your fork and not the original in order to be prepared to publish changes for a pull request later.
With GitKraken, there are several ways to close a repository but the most direct are to select File -> Clone. You'll be presented with a dialog like the following. You may use the URL option or the GitHub.com option. For simplicity, I'll show a screenshot of the URL section.
Once you've cloned you'll be on the default branch master, before doing anything you should create a branch specific to your current efforts. The common branch naming convention is:
- feature:
feature/feature-name-or-id
- issue/bug:
issue/issue-id
- explore or hacking[1]:
hacking
Click on "branch" and enter a name for it and hit enter. If you're just doing the steps to follow along, use hacking
as the branch name otherwise select accordingly. Upon creating the branch, your working copy will be set to the branch. The working copy is the source code that you can edit.
If you open the folder in Finder or Windows Explorer, you should see the source files as, well, files.
In GitKraken, the active branch has a green checkmark next to it.
You are now ready to work. You can put comments or make changes. If you want to keep the changes, commit them. When you commit in git you are only committing to your clone -- that is, the git repository on your computer. Git works by keeping a full copy of the version control repository locally. There is a complete copy on the server as well but the two are only indirectly linked -- you have to give it the push
command to send the changes to the server.
Consider the git repository on your computer to be temporary. Any changes you want to truly keep should be "pushed" to Github. This makes hacking in a throwaway branch on your local repository super easy but it also means that you can lose work you want to keep. Be mindful of this and push when appropriate.
Make a few changes or add notes for yourself -- anything really -- and save the modification. Let's commit these changes. In GitKraken, the command becomes present when it detects changes to your working copy. Select the line that says // WIP
and you'll see something like the following. Note that the UI changes layout depending on the size of the window.
Move your modified files to staged -- this indicates your intent to include these files in your commit -- fill in the summary and click "Commit".
The UI updates to reflect that hacking
has moved forward one node from master and you'll see your notes. From here, I encourage you to explore the UI of GitKraken or SourceTree.
Once you are ready, I encourage you to push your changes to the repository on GitHub. Remember that you forked the project and so:
- You have write access to the repository.
- Changes to your forked repository are not going to affect the source project.
Click the push
button in the toolbar and you'll be presented with the following dialog. Simply click Submit.
This dialog is indicating you're going to send this to the remote called origin (automatically assigned to the clone source) / branch hacking.
On the GitHub side of things, you'll see the following:
Should you want the author of the source project to include your changes in the main project (and assuming you've followed the project's contributing documentation), you can issue a pull request.
For now, that is the basic usage of git to collaborate on an existing project. There are other things you need to be aware of such as merging and overall branch management but I'll be covering those in future articles. For now, this should get you started.
Enjoy hacking.
I've invented this. It's a convention I use to avoid contaminating master. ↩︎