Subject: Re: Adding Git to Better SCM Initiative : Comparison

From: Jakub Narebski <[email-masked]>
Date: Thu, 29 Nov 2007 03:26:12 +0100

Jakub Narebski wrote:

> To do that, I need to fill in information about Git.  Most
> of questions / items didn't give much problem, but there
> are a few on which I would like your input.

By the way, below is patch with the information I have filled.
Check out the TO DO items.

diff --git a/src/comparison/scm-comparison.xml b/src/comparison/scm-comparison.xml
index b459747..6f84190 100644
--- a/src/comparison/scm-comparison.xml	
+++ b/src/comparison/scm-comparison.xml	
@@ -38,6 +38,9 @@ TODO:
             <impl id="darcs">
                 <name>Darcs</name>
             </impl>
+            <impl id="git">
+                <name>Git</name>
+            </impl>
             <impl id="mercurial">
                 <name>Mercurial</name>
             </impl>
@@ -106,6 +109,7 @@ TODO:
                 <s id="svk">Commits are atomic.</s>
                 <s id="aegis">Commits are atomic.</s>
                 <s id="bitkeeper">Yes (but need to verify)</s>
+                <s id="git">Yes.</s>
                 <s id="mercurial">Yes.</s>
                 <s id="monotone">Yes.</s>
                 <s id="opencm">Yes. Commits are atomic.</s>
@@ -142,6 +146,11 @@ TODO:
                 <s id="darcs">Yes. Renames are supported.</s>
                 <s id="bitkeeper">Yes. Renames are supported.</s>
                 <s id="aegis">Yes. Renames are supported.</s>
+                <s id="git">
+                    N/A. Git does not track renames, but detects renames
+                    and copies.  You can follow history of file using
+                    'git log --follow'.
+                </s>
                 <s id="mercurial">Yes. Renames are supported.</s>
                 <s id="monotone">Yes. Renames are supported.</s>
                 <s id="opencm">Yes. Renames are supported</s>
@@ -214,6 +223,11 @@ TODO:
                     Yes. Copies are supported.
                 </s>
                 <s id="aegis">No. Copies are not supported.</s>
+                <s id="git">
+                    N/A. Git does not track copies, but detects renames
+                    and copies.  You can follow history of file using
+                    'git log -C --follow'.
+                </s>
                 <s id="mercurial">Yes. Copies are supported</s>
                 <s id="monotone">Yes. Copies are supported</s>
                 <s id="opencm">No. Copies are not supported.</s>
@@ -267,6 +281,7 @@ TODO:
                 <s id="darcs">Yes.</s>
                 <s id="bitkeeper">Yes.</s>
                 <s id="aegis">Yes.</s>
+                <s id="git">Yes.</s>
                 <s id="mercurial">Yes.</s>
                 <s id="monotone">Yes.</s>
                 <s id="opencm">No.</s>
@@ -313,6 +328,7 @@ TODO:
                 <s id="darcs">Yes.</s>
                 <s id="bitkeeper">Yes.</s>
                 <s id="aegis">Yes.</s>
+                <s id="git">Yes.</s>
                 <s id="mercurial">Yes.</s>
                 <s id="monotone">Yes.</s>
                 <s id="opencm">No.</s>
@@ -373,6 +389,10 @@ TODO:
                 <s id="svk">
                     Same as subversion.
                 </s>
+                <s id="git">
+                    Partial (?). It is possible to lock down repository
+                    (access to branches and tags) using hooks.
+                </s>
                 <s id="mercurial">
                     Yes. It is possible to lock down repositories,
                     subdirectories, or files using hooks.
@@ -455,6 +475,9 @@ TODO:
                 <s id="darcs">
                     Yes. Changesets are supported.
                 </s>
+                <s id="git">
+                    Yes. Changesets are supported.
+                </s>
                 <s id="mercurial">
                     Yes. Changesets are supported.
                 </s>
@@ -509,6 +532,7 @@ TODO:
                 <s id="arch">Not in the command line client, but ViewARCH,
                 a web-interface for Arch, has it.</s>
                 <s id="darcs">Yes. (darcs annotate)</s>
+                <s id="git">Yes. (git blame, git gui blame)</s>
                 <s id="mercurial">Yes. (hg annotate)</s>
                 <s id="monotone">Yes, as of version 0.19.</s>
                 <s id="aegis">Yes. aeannotate</s>
@@ -570,6 +594,9 @@ TODO:
                     whole.
                 </s>
                 <s id="aegis">No. All changes are made repository-wide.</s>
+                <s id="git">
+                    No. All changes are made repository-wide.
+                    But you can use submodules / subrpoject support for that.</s>
                 <s id="mercurial">
                     It is possible to commit changes only in a subset of the
                     tree. There are plans for partial checkouts.
@@ -636,6 +663,10 @@ TODO:
                     Yes, using "darcs whatsnew".
                 </s>
                 <s id="aegis">Yes. Using aediff</s>
+                <s id="git">
+                    Yes. Using git diff.
+                    Note that git uses staging area for commits (index).
+                </s>
                 <s id="mercurial">Yes. Using hg diff.</s>
                 <s id="monotone">Yes. In a similar fashion to CVS.</s>
                 <s id="opencm">Yes. Using cm diff</s>
@@ -681,6 +712,10 @@ TODO:
                 <s id="darcs">
                     No.
                 </s>
+                <s id="git">
+                    No.  But you can tag (with description) given contents
+                    of a file (blob).
+                </s>
                 <s id="mercurial">
                     No.
                 </s>
@@ -782,6 +817,15 @@ TODO:
                     and the client contains a help tool that offers
                     an integrated help system.
                 </s>
+                <s id="git">
+                    Medium. There's Git User's Manual, manpages, some
+                    technical documentation and some howtos.  All
+                    documentation is also available online in HTML format;
+                    there is additional information (including beginnings
+                    of FAQ) on git wiki.
+                    Nevertheles one of complaints in surveys is insufficient
+                    or fragmented documentation.
+                </s>
                 <s id="mercurial">
                     Very good. There's an overview and tutorial on the
                     web site, and integrated help for every command.
@@ -894,6 +938,14 @@ TODO:
                     to install the subversion perl bindings and a few modules
                     from CPAN.
                 </s>
+                <s id="git">
+                    TO DO. RPMs and deb packages for Linux. msysGit and
+                    Cygwin for Win32 - Git requires POSIX shell, Perl,
+                    and POSIX utilities for some commands (builtin).
+                    Autoconf to generate Makefile configuration; ready
+                    generic configuration for many OS. Compiling docs
+                    requires asciidoc and xmlto toolchain, but prebuild.
+                </s>
                 <s id="mercurial">
                     Excellent.  Binary packages are available for all
                     popular platforms.  Building from source requires
@@ -1006,6 +1058,13 @@ TODO:
                     but since the model is different most commands are
                     unique.
                 </s>
+                <s id="git">
+                    TO DO.
+                    Tries to follow CVS conventions, but deviates where there
+                    is a different design.
+                    Large command set divided into plumbing (low lewel, to be
+                    used in scripts) and porcelain (high level).
+                </s>
                 <s id="mercurial">
                     Tries to follow CVS conventions, but deviates where there
                     is a different design.
@@ -1106,6 +1165,10 @@ TODO:
                     There exists some HTTP-functionality, but it is quite
                     limited.
                 </s>
+                <s id="git">
+                    Good.  Uses HTTPS (with WebDAV) or ssh for push,
+                    HTTP, FTP, ssh or custom protocol for fetch.
+                </s>
                 <s id="mercurial">
                     Excellent.  Uses HTTP or ssh.  Remote access also
                     works safely without locks over read-only network
@@ -1203,6 +1266,10 @@ TODO:
                     Very good. Supports many UNIXes, Mac OS X, and Windows,
                     and is written in a portable language.
                 </s>
+                <s id="git">TO DO.
+                    Good.  Portable across all POSIX systems.
+                    There exists Win32 binary using MinGW.
+                </s>
                 <s id="mercurial">
                     Excellent. Runs on all platforms supported by
                     Python.  Repositories are portable across CPU
@@ -1300,6 +1367,9 @@ TODO:
                     is included in the distribution.
                 </s>
                 <s id="aegis">Yes.</s>
+                <s id="git">
+                    Yes.  The web interface is a bundled component.
+                    Other web interfaces: cgit, wit, git-php</s>
                 <s id="mercurial">Yes.  The web interface is a bundled component.</s>
                 <s id="monotone">No.</s>
                 <s id="opencm">No.</s>
@@ -1373,6 +1443,11 @@ TODO:
                 <s id="aegis">
                     There is tkaegis.
                 </s>
+                <s id="git">RO DO
+                    Bundled history viewer gitk and commit tool git-gui,
+                    both use Tcl/Tk.  There is also qgit (Qt) and Giggle
+                    (GTK+).
+                </s>
                 <s id="mercurial">
                     History viewing available with hgit extension;
                     check-in extension (hgct) makes committing easier.
@@ -1453,6 +1528,7 @@ TODO:
                 GNU GPL (open-source)
             </s>
             <s id="svk">Perl License. (open source)</s>
+            <s id="git">GNU GPL (open source)</s>
             <s id="mercurial">GNU GPL (open source)</s>
             <s id="monotone">GNU GPL (open source)</s>
             <s id="opencm">

-- 
Jakub Narebski
Poland