mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
contributing.md: update git instructions
This commit is contained in:
parent
f6db36d7f0
commit
95e67c9502
106
CONTRIBUTING.md
106
CONTRIBUTING.md
@ -58,31 +58,83 @@ maps), `time/`, `os/`, etc. Their documentation is pretty clear.
|
||||
username will be referred to later as 'YOUR_GITHUB_USERNAME'. Change it
|
||||
accordingly in the steps below.)
|
||||
|
||||
1. Clone https://github.com/vlang/v in a folder, say nv (`git clone
|
||||
https://github.com/vlang/v nv`)
|
||||
1. `cd nv`
|
||||
1. `git remote add pullrequest git@github.com:YOUR_GITHUB_USERNAME/v.git` #
|
||||
(NOTE: this is your own forked repo of: https://github.com/vlang/v - After
|
||||
this, we just do normal git operations such as: `git pull` and so on.)
|
||||
1. When finished with a feature/bugfix, you can: `git checkout -b fix_alabala`
|
||||
1. `git push pullrequest` # (NOTE: the pullrequest remote was setup on step 3)
|
||||
1. On GitHub's web interface, I go to: https://github.com/vlang/v/pulls Here
|
||||
the UI shows a nice dialog with a button to make a new pull request based on
|
||||
the new pushed branch. (Example dialogue:
|
||||
https://url4e.com/gyazo/images/364edc04.png)
|
||||
1. After making your pullrequest (aka, PR), you can continue to work on the
|
||||
branch... just do step #5 when you have more commits.
|
||||
1. If there are merge conflicts, or a branch lags too much behind V's master,
|
||||
you can do the following:
|
||||
1. `git checkout master`
|
||||
1. `git pull`
|
||||
1. `git checkout fix_alabala`
|
||||
1. `git rebase master` # solve conflicts and do git rebase --continue
|
||||
1. `git push pullrequest -f`
|
||||
1. Fork https://github.com/vlang/v using GitHub's interface to your own account.
|
||||
Let's say that the forked repository is at
|
||||
`https://github.com/YOUR_GITHUB_USERNAME/v` .
|
||||
2. Clone the main v repository https://github.com/vlang/v to a local folder on your computer, say named nv/
|
||||
(`git clone https://github.com/vlang/v nv`)
|
||||
3. `cd nv`
|
||||
4. `git remote add pullrequest https://github.com/YOUR_GITHUB_USERNAME/v`
|
||||
NB: the remote named `pullrequest` should point to YOUR own forked repo, not the main v repository!
|
||||
After this, your local cloned repository is prepared for making pullrequests,
|
||||
and you can just do normal git operations such as: `git pull` `git status` and so on.
|
||||
|
||||
The point of doing the above steps to never directly push to the main V
|
||||
repository, only to your own fork. Since your local master branch tracks the
|
||||
main V repository's master, then `git checkout master; git pull --rebase origin
|
||||
master` work as expected (this is actually used by `v up`) and it can always do
|
||||
so cleanly. Git is very flexible, so there may be simpler/easier ways to
|
||||
accomplish the same thing.
|
||||
1. When finished with a feature/bugfix/change, you can:
|
||||
`git checkout -b fix_alabala`
|
||||
2. `git push pullrequest` # (NOTE: the `pullrequest` remote was setup on step 4)
|
||||
3. On GitHub's web interface, go to: https://github.com/vlang/v/pulls
|
||||
|
||||
Here the UI shows a dialog with a button to make a new pull request based on
|
||||
the new pushed branch.
|
||||
(Example dialog: https://url4e.com/gyazo/images/364edc04.png)
|
||||
4. After making your pullrequest (aka, PR), you can continue to work on the
|
||||
branch `fix_alabala` ... just do again `git push pullrequest` when you have more commits.
|
||||
5. If there are merge conflicts, or a branch lags too much behind V's master,
|
||||
you can do the following:
|
||||
1. `git pull --rebase origin master` # solve conflicts and do `git rebase --continue`
|
||||
2. `git push pullrequest -f` # this will overwrite your current remote branch with the updated version of your changes.
|
||||
|
||||
The point of doing the above steps, is to never directly push to the main V
|
||||
repository, *only to your own fork*. Since your local `master` branch tracks the
|
||||
main V repository's master, then `git checkout master`, as well as
|
||||
`git pull --rebase origin master` will continue to work as expected
|
||||
(these are actually used by `v up`) and git can always do it cleanly.
|
||||
|
||||
Git is very flexible, so there are other ways to accomplish the same thing.
|
||||
|
||||
## Using Github's hub CLI tool
|
||||
|
||||
You can download the `hub` tool from https://hub.github.com/ . Using
|
||||
`hub`, you will not need to go through the (sometimes) slow website
|
||||
to make PRs. Most remote operations can be done through the `hub` CLI
|
||||
command.
|
||||
|
||||
NB: You still need to have a GitHub account.
|
||||
|
||||
### Preparation:
|
||||
(steps 1..3 need to be done just *once*):
|
||||
|
||||
1. `hub clone vlang/v my_v`
|
||||
2. `cd my_v`
|
||||
3. `hub fork --remote-name pullrequest`
|
||||
|
||||
4. `git checkout -b my_cool_feature` # Step 4 is better done *once per each new feature/bugfix* that you make.
|
||||
|
||||
### Improve V by making commits:
|
||||
|
||||
5. `git commit -am "math: add a new function copysign"`
|
||||
|
||||
### Testing your commits locally:
|
||||
You can test locally whether your changes have not broken something by
|
||||
running: `v test-compiler`
|
||||
|
||||
### Publishing your commits to GitHub:
|
||||
|
||||
6. `git push pullrequest`
|
||||
|
||||
### Making a PR with `hub`:
|
||||
(so that your changes can be merged to the main V repository)
|
||||
|
||||
7. `hub pull-request`
|
||||
|
||||
Optionally, you can track the status of your PR CI tests with:
|
||||
|
||||
8. `hub ci-status --verbose`
|
||||
|
||||
### Fixing failing tests:
|
||||
If everything is OK, after 5-10 minutes, the CI tests should pass for
|
||||
all platforms. If not, visit the URLs for the failing CI jobs, see
|
||||
which tests have failed and then fix them by making more changes. Just use
|
||||
`git push pullrequest` to publish your changes. The CI tests will
|
||||
run with your updated code. Use `hub ci-status --verbose` to monitor
|
||||
their status.
|
||||
|
Loading…
Reference in New Issue
Block a user