How do I contribute to other's code in GitHub?

GitOpen SourceGithub

Git Problem Overview


I would like to contribute to a certain project in GitHub. Should I fork it? Branch it? What is recommended and how to do it?

Git Solutions


Solution 1 - Git

Ideally you:

  1. Fork the project
  2. Make one or more well commented and clean commits to the repository. You can make a new branch here if you are modifying more than one part or feature.
  3. Perform a pull request in github's web interface.

if it is a new Feature request, don't start the coding first. Remember to post an issue to discuss the new feature.

If the feature is well discuss and there are some +1 or the project owner approved it, assign the issue to yourself, then do the steps above.

Some projects won't use the pull request system. Check with the author or mailing list on the best way to get your code back into the project.

Solution 2 - Git

To add to Yann's answer, once you have forked a project, you can develop in any branch you want (a new one, or one from the original project)

Remember to:

Solution 3 - Git

To add to Yan and VonC's answers, this is a good resource from github themselves: http://help.github.com/forking/

Also be sure to look on the right sidebar under the "collaborating" heading.

Solution 4 - Git

There is a great Railscast video here that walks you through the process. It also has a number of good tips such as showing how to determine which branch you might want to work on when contributing, using tests, submodules, etc.

While this screencast is primarily focused on Rails developers most of the information is valid for contributing to any open source project.

Solution 5 - Git

Github has many ways of collaborating to a project. The model most project use is a pull request model. I've started a project to help people making their first GitHub pull request. You can do the hands-on tutorial to make your first PR here

The workflow is simple as

  • Fork the repo in github
  • Clone the repo to your machine
  • Make a branch and make necessary changes
  • Push your changes to your fork on GitHub git push origin branch-name
  • Go to your fork on GitHub to see a Compare and pull request button
  • Click on it and give necessary details

Solution 6 - Git

lornajane has a blog post that explains the process well: http://www.lornajane.net/posts/2010/contributing-to-projects-on-github

Solution 7 - Git

Technical workflow

I would suggest the following workflow:

  1. Fork the repository (via GitHub web interface: "Fork" button)

  2. In your forked repository, copy the URL

  3. Clone (in the command line)

    git clone <url-from-your-workspace>

  4. Enter the directory, that just got created, and create a branch

    cd <directory> git checkout -b <branchname>

  5. Now make your changes

  6. You can create one or more commits after each change:

    git add .; git commit

  7. When done, push your changes

    git push origin <branch>

  8. In your command line, you should see a URL to create the PR. Visit the URL and click the button to create a PR.

  9. If not, visit the repository in the browser and it will offer you a button for creating the pull request

That's it.

So, basically, you forked the repository to your workspace, created a new branch and pushed that new branch.

If you later make more PR from the same cloned repo, you should synchronize (get the latest changes from the original repository) before you create another branch for another PR:

git checkout master
git remote add upstream <url-of-original-repo>
git pull upstream master

Other considerations:

  • the project may have Contribution Guidelines: Look for a file CONTRIBUTING.rst or .md
  • you may want to follow the coding guidelines for the project
  • you may want to outline your idea as issue first
  • you may want to look at the Pull Requests tab for the project and check if there are open PR, merged PR

These suggestions are here to save you from the trouble of putting work into a PR that will not get merged. If there is activity in the project and PR get merged, this is a good sign. If there are Contribution Guidelines, follow them.

Always be courteous. Remember, the maintainers of the project are in no way obligated to merge your PR. Do you have something valuable to add to the project?

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionwizztjhView Question on Stackoverflow
Solution 1 - GitYann RaminView Answer on Stackoverflow
Solution 2 - GitVonCView Answer on Stackoverflow
Solution 3 - GitbrycemcdView Answer on Stackoverflow
Solution 4 - GitSnapShotView Answer on Stackoverflow
Solution 5 - Gitsudo bangbangView Answer on Stackoverflow
Solution 6 - Gitdan_nlView Answer on Stackoverflow
Solution 7 - GitSybille PetersView Answer on Stackoverflow