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 Porcelains
-----------------------------------

   - *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* (shipped with git-core)

   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.

   - *tig* (http://jonas.nitro.dk/tig/)

   tig by Jonas Fonseca is a simple git repository browser
   written using ncurses. Basically, it just acts as a front-end
   for git-log and git-show/git-diff. Additionally, you can also
   use it as a pager for git commands.


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

   - *git-svn* (shipped with git-core)

   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.


   - *hg-to-git* (contrib/)

   hg-to-git converts a Mercurial repository into a git one, and
   preserves the full branch history in the process. hg-to-git can
   also be used in an incremental way to keep the git repository
   in sync with the master Mercurial repository.


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.


http://git.or.cz/gitwiki/InterfacesFrontendsAndTools has more
comprehensive list.
