| # Contributing to Go Protocol Buffers |
| |
| Go protocol buffers is an open source project and accepts contributions. |
| The source of truth for this repository is at |
| [go.googlesource.com/protobuf](https://go.googlesource.com/protobuf). |
| The code review tool used is |
| [Gerrit Code Review](https://www.gerritcodereview.com/). |
| At this time, we are unfortunately unable to accept GitHub pull requests. |
| |
| |
| ## Becoming a contributor |
| |
| The first step is to configure your environment. |
| Please follow the steps outlined in |
| ["Becoming a contributor" (golang.org)](https://golang.org/doc/contribute.html#contributor) |
| as the setup for contributing to the `protobuf` project is identical |
| to that for contributing to the `go` project. |
| |
| |
| ## Before contributing code |
| |
| The project welcomes submissions, but to make sure things are well coordinated |
| we ask that contributors discuss any significant changes before starting work. |
| Best practice is to connect your work to the |
| [issue tracker](https://github.com/golang/protobuf/issues), |
| either by filing a new issue or by claiming an existing issue. |
| |
| |
| ## Sending a change via Gerrit |
| |
| The `protobuf` project performs development in Gerrit. |
| Below are the steps to send a change using Gerrit. |
| |
| |
| **Step 1:** Clone the Go source code: |
| ``` |
| $ git clone https://go.googlesource.com/protobuf |
| ``` |
| |
| **Step 2:** Setup a Git hook: |
| Setup a hook to run the tests prior to submitting changes to Gerrit: |
| ``` |
| $ (cd protobuf/.git/hooks && echo -e '#!/bin/bash\n./test.bash' > pre-push && chmod a+x pre-push) |
| ``` |
| |
| **Step 3:** Prepare changes in a new branch, created from the `master` branch. |
| To commit the changes, use `git codereview change`; |
| that will create or amend a single commit in the branch. |
| |
| ``` |
| $ git checkout -b mybranch |
| $ [edit files...] |
| $ git add [files...] |
| $ git codereview change # create commit in the branch |
| $ [edit again...] |
| $ git add [files...] |
| $ git codereview change # amend the existing commit with new changes |
| $ [etc.] |
| ``` |
| |
| **Step 4:** Send the changes for review to Gerrit using `git codereview mail`. |
| ``` |
| $ git codereview mail # send changes to Gerrit |
| ``` |
| |
| **Step 5:** After a review, there may be changes that are required. |
| Do so by applying changes to the same commit and mail them to Gerrit again: |
| ``` |
| $ [edit files...] |
| $ git add [files...] |
| $ git codereview change # update same commit |
| $ git codereview mail # send to Gerrit again |
| ``` |
| |
| When calling `git codereview mail`, it will call `git push` under the hood, |
| which will trigger the test hook that was setup in step 2. |
| |
| The [Contribution Guidelines](https://golang.org/doc/contribute.html) for the |
| Go project provides additional details that are also relevant to |
| contributing to the Go `protobuf` project. |