| > [!IMPORTANT] |
| > This page was copied from https://github.com/dart-lang/sdk/wiki and needs review. |
| > Please [contribute](../CONTRIBUTING.md) changes to bring it up-to-date - |
| > removing this header - or send a CL to delete the file. |
| |
| --- |
| |
| There are several ways to contribute code in GitHub, for example |
| |
| 1. Forking and creating pull request from a forked repo (https://help.github.com/articles/fork-a-repo) |
| 1. Branching within the main repo, and doing pull requests from one branch to another. |
| 1. Working on a local branch, creating a code review using Gerrit, push directly into main (this article). |
| |
| ## Step 1: get the source |
| |
| [Checkout the source](Building.md#source) |
| |
| Tip: if you want to get automatic backups of an NFS directory, but take advantage of fast git performance on a local directory, you can use the instructions above in an NFS directory and use a mirror in a local directory with git-new-workdir. |
| |
| Then work from the local directory. Files uncommitted are not backed up, but every commit you make is automatically backed up. The script 'git-new-workdir' is described in more detail here: http://nuclearsquid.com/writings/git-new-workdir/. |
| |
| ## Step 2: verify that git-cl is configured correctly. |
| |
| There is a `codereview.settings` file in the repo to configure things automatically, but it never hurts to check: |
| |
| > cat codereview.settings |
| # This file is used by gcl to get repository specific information. |
| GERRIT_HOST: True |
| CODE_REVIEW_SERVER: https://dart-review.googlesource.com |
| VIEW_VC: https://dart.googlesource.com/sdk/+ |
| CC_LIST: reviews@dartlang.org |
| |
| ## Step 3: Create a branch for your new changes |
| |
| Pick a branch name not existing locally nor in the remote repo, we recommend that you use your username as a prefix to make things simpler. |
| |
| > cd sdk # the repo created above |
| > git checkout -b uname_example # new branch |
| |
| ## Step 4: Do your changes and commit them locally in git |
| |
| > echo "file contents" > awesome_example.txt |
| > git add awesome_example.txt |
| > git commit -a -m "An awesome commit, for an awesome example." |
| |
| ## Step 5: Upload CL using 'git cl' (installed with gcl) |
| |
| > git cl upload origin/main |
| > git cl web |
| |
| Then click on the `Start Review` button to send email to the reviewers from the Gerrit website. |
| |
| ## Step 6: Make code review changes and publish new versions of your code |
| |
| > echo "better file contents" > awesome_example.txt |
| > git commit -a -m "An awesomer commit" |
| > git cl upload origin/main |
| |
| ## Step 7: Sync up to latest changes |
| |
| If new changes have been made to the repo, you need sync up to the new changes before submitting your code. You can do this in two ways: |
| |
| There are two ways to sync up: |
| * merging |
| |
| > git pull origin main |
| > git cl upload origin/main |
| |
| * rebasing |
| |
| > git pull --rebase origin main |
| (which is similar to first pull and merge in main, and then rebase: |
| > git checkout main |
| > git pull |
| > git rebase main uname_example) |
| > git cl upload origin/main |
| |
| ## Step 8: Submit your changes |
| |
| > git cl land origin/main |
| |
| This command will close the issue in Gerrit and submit your code directly on main. |
| |
| ## Step 9: Clean up the mess |
| |
| After submitting, you can delete your local branch so that the repo is clean and tidy :) |
| |
| > git checkout main |
| > git branch -D uname_example # delete local branch |
| |
| ## Step 10: Goto step 3 |