Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Failed to load latest commit information.
testdata commit parser and unit test
.gitignore ignore some subdirs
COPYING
Color.hs
Commit.hs
Commit_perftest.hs faster commit parser (no longer using parsec)
Commit_test.hs faster commit parser (no longer using parsec)
Delta.hs document Delta.hs
Delta_test.hs document Delta_test
Diff.hs diff bug
FileMode.hs first step towards real tree comparison
FileMode_test.hs better mode handling, with a test
Gat.hs
Index.hs
Log.hs
Makefile skip unhaddockable file
Microbench.hs perftest for commit parsing
Object.hs first step towards real tree comparison
ObjectStore.hs
ObjectStore_test.hs make tests pass
Pack.hs support deltas against hashes (the other delta format)
Pack_test.hs use binary search for v2 index lookup
Pager.hs catch exceptions while displaying pager
README README with what I'm trying to do here.
Refs.hs clean up refs
RevParse.hs
RevParse_test.hs support foo~4 ancestry
Setup.lhs
Shared.hs first step towards real tree comparison
State.hs
gat.cabal

README

Why?
- To learn how Git works.
- For fun.

Goals/principles:
- a Gat tree should always be usable by Git.
- be comparable, speed-wise, to Git.
- remove, unify, and simplify the UI; it's ok to be less "powerful" than Git.
- more options are not always better.
- it's ok to break backwards UI compatibility for greater consistency.  it's ok
  to remove features.
- liberally steal from other, better UIs (in particular darcs).

Ideas:
- represent the whole index/tree distinction by having a "stage" command,
  which stages files for commit.  then avoid it as much as possible.
- make "commit" like "commit -a", while "commit --staged" (or in response to a
  prompt if "commit" with stated content) like "commit".
- similarly, "diff" is always "diff HEAD", while "diff --staged" like
  "diff --cached".
- eliminate the many modes of reset.  flushing the index is a stage subcommand;
  resetting the tree is "revert", and fiddling with the branch pointers (reset
  --soft) is a separate command.
- figure out a better name / mode of operation for "rebase".  provide a more
  darcs-like interactive ui.
- in general, have the -i flag (for commit, stage, rebase) be interactive like
  darcs.
Something went wrong with that request. Please try again.