blob: 366828a51d621d6dc267fae4cb6ebc64cb423f18 [file] [log] [blame]
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
Git-review manages the code review process for Git changes using a Gerrit
server.
The git-review tool manages "change branches" in the local git repository.
Each such branch tracks a single commit, or "pending change",
that is reviewed using a Gerrit server.
Modifications to the pending change are applied by amending the commit.
This process implements the "single-commit feature branch" model.
Once installed as git-review, the tool's commands are available through git
either by running
git review <command>
or, if aliases are installed, as
git <command>
The review tool's command names do not conflict with any extant git commands.
This document uses the first form for clarity but most users install these
aliases in their .gitconfig file:
[alias]
change = review change
gofmt = review gofmt
mail = review mail
pending = review pending
submit = review submit
sync = review sync
The commands are:
change
The change command creates and moves between Git branches and maintains the
pending commits on work branches.
git review change [branchname]
Given a branch name as an argument, the change command switches to the named
branch, creating it if necessary. If the branch is created and there are staged
changes, it will commit the changes to the branch, creating a new pending
change.
With no argument, the change command creates a new pending change from the
staged changes in the current branch or, if there is already a pending change,
amends that change.
TODO: document -q, -a
gofmt
The gofmt command applies the gofmt program to all files modified on the
current work branch (TODO: is this right?).
git review gofmt [-a] [-c]
By default, the gofmt command leaves any formatting changes unstaged.
The -a option (TODO).
The -c option (TODO).
help
The help command displays basic usage instructions.
git review help
hooks
The hooks command installs the Git hooks to enforce code review conventions.
git review hooks
The pre-commit hook checks that all Go code is formatted with gofmt and that
the commit is not being made directly to the master branch.
The commit-msg hook adds the Gerrit "Change-Id" line to the commit message if
not present. It also checks that the message uses the convention established by
the Go project that the first line has the form, pkg/path: summary.
hook-invoke
The hook-invoke command is an internal command that invokes the named Git hook.
git review hook-invoke <hook>
It is run by the shell scripts installed by the "git review hooks" command.
mail
The mail command starts the code review process for the pending change.
git mail [-f] [-r email] [-cc email]
It pushes the pending change commit in the current branch to the Gerrit code
review server and prints the URL for the change on the server.
If the change already exists on the server, the mail command updates that
change with a new changeset.
The -r and -cc flags identify the email addresses of people to do the code
review and to be CC'ed about the code review.
Multiple addresses are given as a comma-separated list.
The mail command fails if there are staged changes that are not committed. The
-f flag overrides this behavior.
pending
The pending command prints to standard output the status of all pending changes
and unstaged files in the local repository.
git review [-l] pending
The -l flag causes the command to use only locally available information.
By default, it contacts the Gerrit server for code review information.
submit
The submit command pushes the pending change to the Gerrit server and tells
Gerrit to submit it to the master branch.
git review submit
The command fails if there are modified files (staged or unstaged) that are not
part of the pending change.
After submitting the change, the change command tries to synchronize the
current branch to the submitted commit, if it can do so cleanly.
If not, it will prompt the user to run 'git review sync' manually.
sync
The sync command updates the local repository.
git review sync
It fetches changes from the remote repository and merges changes from the
upstream branch to the current branch, rebasing the pending change, if any,
onto those changes.
*/
package main