-
Notifications
You must be signed in to change notification settings - Fork 754
docs: add working with gerrit section #7396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,110 @@ | ||
| # Using Jujutsu with Gerrit Code Review | ||
|
|
||
| JJ and Gerrit share the same mental model, which makes Gerrit feel like a | ||
| natural collaboration tool for JJ. JJ tracks a "change identity" across | ||
| rewrites, and Gerrit’s `Change-Id` tracks the same logical change across patch | ||
| sets. JJ and Gerrit's `Change-Id`s aren’t natively compatible yet, but they’re | ||
| philosophically aligned. `jj gerrit upload` bridges the gap today by adding a | ||
| Gerrit-style `Change-Id` while JJ keeps its own notion of change identity on the | ||
| client. In practice, that means small, clean commits that evolve over | ||
| time, exactly how Gerrit wants you to work. | ||
|
|
||
| This guide assumes a basic understanding of Git, Gerrit, and Jujutsu. | ||
|
|
||
| ## Set up a Gerrit remote | ||
|
|
||
| Jujutsu communicates with Gerrit by pushing commits to a Git remote. If you're | ||
| starting from an existing Git repository with Gerrit remotes already configured, | ||
| you can use `jj git init --colocate` to start using JJ in that repo. Otherwise, | ||
| set up your Gerrit remote. | ||
|
|
||
| ```shell | ||
| # Option 1: Start JJ in an existing Git repo with Gerrit remotes | ||
| $ jj git init --colocate | ||
|
|
||
| # Option 2: Add a Gerrit remote to a JJ repo | ||
| $ jj git remote add gerrit https://review.gerrithub.io/yourname/yourproject | ||
|
|
||
| # Option 3: Clone the repo via jj | ||
| $ jj git clone https://review.gerrithub.io/your/project | ||
| ``` | ||
|
|
||
| If you used option 2 You can configure default values in your repository config | ||
| by appending the below to `.jj/repo/config.toml`, like so: | ||
|
|
||
| ```toml | ||
| [gerrit] | ||
| default-remote = "gerrit" # name of the Git remote to push to | ||
| default-remote-branch = "main" # target branch in Gerrit | ||
| ``` | ||
|
|
||
| ## Basic workflow | ||
|
|
||
| `jj gerrit upload` takes one or more revsets, and uploads the stack of commits | ||
| ending in them to Gerrit. Each JJ change will map to a single Gerrit change | ||
| based on the JJ change ID. This should be what you want most of the time, but if | ||
| you want to associate a JJ change with a specific change already uploaded to | ||
| Gerrit, you can copy the Change-Id footer from Gerrit to the bottom of the | ||
| commit description in JJ. | ||
|
|
||
| > Note: Gerrit identifies and updates changes by the `Change-Id` trailer. When | ||
| > you re-upload a commit with the same `Change-Id`, Gerrit creates a new patch | ||
| > set. | ||
|
|
||
| ### Upload a single change | ||
|
|
||
| ```shell | ||
| # upload the previous commit (@-) for review to main | ||
| $ jj gerrit upload -r @- | ||
| ``` | ||
|
|
||
| ## Selecting revisions (revsets) | ||
|
|
||
| `jj gerrit upload` accepts one or more `-r/--revisions` arguments. Each argument | ||
| may expand to multiple commits. Common patterns: | ||
|
|
||
| - `-r @-`: the commit previous to the one you're currently working on | ||
| - `-r A..B`: commits that are ancestors of B but not of A | ||
|
|
||
| See the [revsets](revsets.md) guide for more information. | ||
|
|
||
| ### Preview without pushing | ||
|
|
||
| Use `--dry-run` to see which commits would be modified and pushed, and where, | ||
| without changing anything or contacting the remote. | ||
|
|
||
| ```shell | ||
| $ jj gerrit upload -r '@-' --for main --dry-run | ||
| ``` | ||
|
|
||
| ## Target branch and remote selection | ||
|
|
||
| There are a few way of specifying the target remote for your projects: | ||
|
|
||
| - Please run `jj config set --user gerrit.default-remote-branch <branch name>` to set your | ||
| default branch across all repos | ||
| - Please run `jj config set --repo gerrit.default-remote-branch <branch name>` to set your | ||
| default branch for this specific repo. | ||
| - Use `--remote-branch <branch name>` to override this for one specific occasion. | ||
|
|
||
| The remote used to push is determined as follows: | ||
DanieleSassoli marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| - If you have more than one origin, or the origin isn't called gerrit, run | ||
| `jj config set --repo gerrit.default_remote <gerrit remote name>` to set-up a | ||
| default remote. | ||
| - To upload to a specific remote as a one-off thing, use `--remote <remote name>` | ||
|
|
||
| ## Updating changes after review | ||
DanieleSassoli marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| To address review feedback, update your revisions, then run `jj gerrit | ||
| upload` again with the same revsets. Gerrit will add new patch sets to the | ||
| existing changes instead of creating new ones. | ||
|
|
||
| Examples: | ||
|
|
||
| ```shell | ||
| # Edit an earlier commit in the stack | ||
| $ jj edit xcv # position on the stack to edit | ||
| --- Apply needed edits --- | ||
| $ jj gerrit upload -r xcv | ||
| ``` | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.