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.

   Cogito is no longer maintained as most of its functionality
   is now in core GIT.


   - *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.
