Git Product home page Git Product logo

git-rv's Introduction

status: inactive

This project is no longer actively developed or maintained.

git-rv

git-rv is a command line tool for syncing local git clients with code reviews hosted on a Rietveld code review server such as codereview.appspot.com.

git-rv Basics

Using git-rv, you can create micro-commits locally, export them for review, and git-rv will create a single commit once your patch has been approved by your reviewers.

When you begin your review, git-rv will track a specific git remote and a branch in that remote. Once a remote branch has been tracked for a review, all diffs sent for review will be relative to that remote branch. If that branch is updated by another commit during your review, you can bring your review branch up to date by running git rv sync.

NOTE: If there are multiple remotes associated with your local git repository and/or multiple branches in the selected remote, the tool will prompt you to make a choice.

To commit reviewed code, you'll never need to run git push; git rv submit will handle that for you. In this process, the tool combines your micro-commits into a single commit and makes sure it pushes your local code to the correct branch in the correct git remote.

Installation

To install git-rv, first clone this repository:

$ git clone https://github.com/GoogleCloudPlatform/git-rv.git

and then either copy the git-rv binary into a directory on your $PATH, create a symlink, or add the git-rv directory to your $PATH:

$ cp git-rv/git-rv /some/directory/on/your/path
$ # OR
$ ln -s git-rv/git-rv /some/directory/on/your/path/git-rv
$ # OR
$ PATH=${PATH}:/absolute/path/to/git-rv-directory

NOTE: No matter your choice, it is possible it will require sudo to copy or create a symlink for directories on your path.

Once you've installed, executing git rv {$COMMAND} from within a git repository will call git-rv.

Basic Workflow

git-rv supports many commands (run git-rv --help) so see them all, but the main ones needed for code reviews are export, submit and sync. For editing and committing your code, creating branches and doing work locally, you can use git as you usually would. It is only when interacting with your code review that you'll need to use git-rv.

A typical review may look like the following:

  1. Start a feature branch:

    $ git branch
    * master
    $ git checkout -b {$BRANCH}
    $ git branch
    * {$BRANCH}
      master
    
  2. Make an initial commit:

    $ emacs ... # Do some work
    $ git add .
    $ git commit -m "Adding super cool feature X."
    ...
    $ git rv export -r [email protected]
    Upload server: codereview.appspot.com (change with -s/--server)
    Loaded authentication cookies from {$HOME}/.codereview_upload_cookies
    Issue created. URL: http://codereview.appspot.com/{$ISSUE}
    Uploading base file for {$FILENAME1}
    Uploading base file for {$FILENAME2}
    ...
    Metadata update from code server succeeded.
    
  3. Address comments from your code review:

    $ emacs ... # Do some more work
    $ git add .
    $ git commit -m "Fixing the blerg typo per reviewer request."
    ...
    $ git rv export
    Upload server: codereview.appspot.com (change with -s/--server)
    Loaded authentication cookies from {$HOME}/.codereview_upload_cookies
    Issue updated. URL: http://codereview.appspot.com/{$ISSUE}
    Metadata update from code server succeeded.
    
  4. Find out someone else committed to master, sync their changes in:

    $ git rv sync
    ...
    Auto-merging {$FILENAME1}
    Auto-merging {$FILENAME2}
    ...
    Squash commit -- not updating HEAD
    [{$BRANCH} {$SYNC_COMMIT}] Syncing review {$BRANCH} at {$SYNC_COMMIT}
    2 files changed, ...
    ...
    Exporting synced changes.
    Upload server: codereview.appspot.com (change with -s/--server)
    Loaded authentication cookies from {$HOME}/.codereview_upload_cookies
    Issue updated. URL: http://codereview.appspot.com/{$ISSUE}
    Uploading base file for {$FILENAME1}
    Uploading base file for {$FILENAME2}
    ...
    Metadata update from code server succeeded.
    

    NOTE: This assumes the merge initiated by the sync was all peachy. If not, git-rv will do it's best to make sure you resolve the merge conflicts and get the review back on track.

  5. Time to submit:

    Trying to submit before one of your reviewers gives an LGTM (short for "looks good to me") will result in a failure:

    $ git rv submit
    This review has not been approved.
    

    Once the review has been LGTM'ed by one of your reviewers, you can submit your changes:

    $ git rv submit
    Checking out origin/review-{$ISSUE} at {$SYNC_COMMIT}
    Adding reviewed commits.
    
    Adding commit:
    Adding super cool feature X.
    
    Reviewed in https://codereview.appspot.com/{$ISSUE}
    
    Replacing review branch '{$BRANCH}' with newly committed content.
    
    Loaded authentication cookies from {$HOME}/.codereview_upload_cookies
    
    Message:
    
    Added in
    https://code.google.com/p/dhermes-projects/source/detail?r=7fb62f85b1209fb62d8181097bfb2529cc2fc875
    
    posted to code review issue.
    
    Issue {$ISSUE} has been closed.
    

Power Users and Committers

For more details on the other commands, simply execute git-rv --help or git rv {$COMMAND} --help.

Feel free to file new issues and feature request, comment on existing ones and fork this repository to your heart's content.

If you are working on changes to git-rv, you will need to be able to run make_executable.py to create a new git-rv binary based on your working copy of the repository.

In order to do this you'll need to initialize the Rietveld git submodule. Since Rietveld is a Mercurial project, we use git-remote-hg to include it as a git submodule. To pull it, run

$ # If you don't have git-remote-hg installed
$ sudo pip install --upgrade git-remote-hg
$ git submodule update --init

Using git-rv for Mercurial repositories

If you'd like to use git-rv to do code reviews for your hg repositories, this is fully supported. In the same fashion we use git-remote-hg to support the Rietveld submodule, it can be used to work on an hg repository.

For example, to work on google-api-python-client, we check out the repository with git by appending a dummy protocol hg::

git clone hg::https://code.google.com/p/google-api-python-client/

(This looks similar to the protocols we're used to: http:, https: and git:.)

After doing this, you can jump in right away and interact with the repository as if it were a git repository:

cd google-api-python-client
emacs ... # Do some work
git rv export -r [email protected]

After the review is complete, you can submit via git rv submit. For Google Code Hosting reviews (and other Mercurial hosting sites to follow), after submitting, a link to the newly pushed commit will be added to the Rietveld review.

git-rv's People

Contributors

danholevoet avatar dhermes avatar elibixby avatar fredsa avatar proppy avatar

Watchers

 avatar  avatar

git-rv's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.