A short git tools survey
========================


Introduction
------------

Apart from git contrib/ area there are some others third-party tools
you may want to look.

This document presents a brief summary of each tool and the corresponding
link.


Alternative/Augmentative Procelains
-----------------------------------

   - *Cogito* (http://www.kernel.org/pub/software/scm/cogito/)

   Cogito is a version control system layered on top of the git tree history
   storage system. It aims at seamless user interface and ease of use,
   providing generally smoother user experience than the "raw" Core GIT
   itself and indeed many other version control systems.


   - *pg* (http://www.spearce.org/category/projects/scm/pg/)

   pg is a shell script wrapper around GIT to help the user manage a set of
   patches to files. pg is somewhat like quilt or StGIT, but it does have a
   slightly different feature set.


   - *StGit* (http://www.procode.org/stgit/)

   Stacked GIT provides a quilt-like patch management functionality in the
    GIT environment. You can easily manage your patches in the scope of GIT
   until they get merged upstream.


History Viewers
---------------

   - *gitk* (shipped with git-core)

   gitk is a simple TK GUI for browsing history of GIT repositories easily.


   - *gitview*  (contrib/)

   gitview is a GTK based repository browser for git


   - *gitweb* (ftp://ftp.kernel.org/pub/software/scm/gitweb/)

   GITweb provides full-fledged web interface for GIT repositories.


   - *qgit* (http://digilander.libero.it/mcostalba/)

   QGit is a git/StGIT GUI viewer built on Qt/C++. QGit could be used
   to browse history and directory tree, view annotated files, commit
   changes cherry picking single files or applying patches.
   Currently it is the fastest and most feature rich among the git
   viewers and commit tools.



Foreign SCM interface
---------------------

   - *git-svn* (contrib/)

   git-svn is a simple conduit for changesets between a single Subversion
   branch and git.


   - *quilt2git / git2quilt* (http://home-tj.org/wiki/index.php/Misc)

   These utilities convert patch series in a quilt repository and commit
   series in git back and forth.


Others
------

   - *(h)gct* (http://www.cyd.liu.se/users/~freku045/gct/)

   Commit Tool or (h)gct is a GUI enabled commit tool for git and
   Mercurial (hg). It allows the user to view diffs, select which files
   to committed (or ignored / reverted) write commit messages and
   perform the commit itself.

   - *git.el* (contrib/)

   This is an Emacs interface for git. The user interface is modeled on
   pcl-cvs. It has been developed on Emacs 21 and will probably need some
   tweaking to work on XEmacs.
