Gitiles - A simple JGit repository browser
==========================================

Gitiles is a simple repository browser for Git repositories, built on JGit. Its
guiding principle is simplicity: it has no formal access controls, no write
access, no fancy Javascript, etc.


BUILDING

Gitiles requires Buck (http://facebook.github.io/buck/) to build.

  sudo apt-get install ant
  cd ${HOME}
  git clone https://github.com/facebook/buck.git
  cd buck
  ant
  sudo ln -s ${PWD}/bin/buck /usr/bin/buck
  cd /path/to/gitiles
  git submodule update --init
  buck build all


TESTING

  cd /path/to/repositories  # Don't run from the gitiles repo.
  /path/to/gitiles/tools/run_dev.sh

This will recompile and start a development server.
Open http://localhost:8080/ to view your local copy of gitiles, which will serve
any repositories under /path/to/repositories.


ECLIPSE

If you'd like to use Eclipse to edit Gitiles, first generate a project file:
  ./bucklets/tools/eclipse.py && ./bucklets/tools/eclipse.py --src

Import the project in Eclipse:
  File -> Import -> Existing Projects into Workpace

The project only needs to be rebuilt if the source roots or third-party
libraries have changed. For best results, ensure the project is closed in
Eclipse before rebuilding.


CODE REVIEW

Gitiles uses Gerrit for code review:
https://gerrit-review.googlesource.com/

Gitiles uses the "git push" workflow described here:
http://gerrit.googlecode.com/svn/documentation/2.0/user-upload.html
With the server https://gerrit.googlesource.com/gitiles
You'll need a password from: https://gerrit.googlesource.com/new-password

Gerrit depends on "Change-Id" annotations in your commit message.
If you try to push a commit without one, it will explain how to
install the proper git-hook:

curl -Lo `git rev-parse --git-dir`/hooks/commit-msg \
    https://gerrit-review.googlesource.com/tools/hooks/commit-msg
chmod +x `git rev-parse --git-dir`/hooks/commit-msg

Before you create your local commit (which you'll push to Gerrit)
you will need to set your email to match your Gerrit account:
git config --local --add user.email foo@bar.com

Normally you'll create code reviews for pushes to master:
git push origin HEAD:refs/for/master
