threads / discuss / 11052

Adding Git to Better SCM Initiative : Comparison

Subject: Adding Git to Better SCM Initiative : Comparison

## tl;dr

11 messages between Nov 28, 2007 and Dec 3, 2007.

replies: 10people: 5as markdown or json

Jakub Narebski· Nov 28, 2007, 22:39 UTC · lore
I'd like to add Git to comparison table of SCMs at Better SCM
Initiative site:
  http://better-scm.berlios.de

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

(Yes, I know that such SCM comparisons are usually biased towards the idea of what are most important features of a version control system. Nevertheless...)

1. Ease of Deployment
   How easy it is to deploy the software? What are
   the depenedencies and how can they be satisfied?

There are binary packages for Linux (RPM, deb) and for MS Windows (msysGit). Git requires POSIX shell, Perl, and POSIX utilities (BTW. INSTALL file lacks full specification of dependences); although there is ongoing effort towards making all commands builtin, in C. Makefile contains ready configuration for many OS, and there is autoconf script to generate Makefile configuration.

I'm not sure if the problems with compiling documentation to HTML and manpage forms, which require AsciiDoc and xmlto toolchains should be also mentioned here. Well, that and the fact that there exist pre-build documentation in html and man forms.

2. Command Set
   What is the command set? How compatible it is with
   the commands of CVS (the current open-source defacto
   standard)?

Should it be: "Tries to follow CVS conventions, but deviates where there is a different design.", as for Mercurial and Monotone? If I remember correctly command set is patterned somewhat after BitKeeper.

"Large command set divided into plumbing (low lewel, to be used in
 scripts) and porcelain (high level commands)."
3. Portability
   How portable is the version-control system to various 
   operating systems, computer architectures, and other
   types of systems?
"Good.  Portable across all POSIX systems.
 There exists Win32 binary using MinGW."
>From the results of Git User's Surveys there are many OS on which Git

is used; but it doesn't tell us how hard was to deply Git on those exotic operatings systems.

4. Repository Permissions
   Is it possible to define permissions on access to different
   parts of a remote repository? Or is access open for all?
"Partial (?). It is possible to lock down repository
 (access to branches and tags) using hooks."

I don't know if it is possible to do finer level ACLs, i.e. if it is possible to lock subdirectories or files in Git. Although for distributed SCMs ACL doesn't matter much: check diffstat and merge or not from trusted people. We have "network of trust" (BTW. Karl Fogel in OSSBook recommends 'soft' control of access control to repository, on social rather than on technical level).

P.S. How do "svn diff" looks like?
-- 
Jakub Narebski
Poland
Robin Rosenberg· Nov 29, 2007, 01:48 UTC · re: Jakub Narebski · lore

Re: Adding Git to Better SCM Initiative : Comparison

onsdag 28 november 2007 skrev Jakub Narebski:
Show 11 quoted lines
> I'd like to add Git to comparison table of SCMs at Better SCM
> Initiative site:
>   http://better-scm.berlios.de
> 
> To do that, I need to fill in infomration about Git.  Most
> of questions / items didn't give much problem, but there
> are a few on which I would like your input.
> 
> (Yes, I know that such SCM comparisons are usually biased towards the
> idea of what are most important features of a version control system.
> Nevertheless...)
[...]
Show 14 quoted lines
> 4. Repository Permissions
> 
>    Is it possible to define permissions on access to different
>    parts of a remote repository? Or is access open for all?
> 
> "Partial (?). It is possible to lock down repository
>  (access to branches and tags) using hooks."
> 
> I don't know if it is possible to do finer level ACLs, i.e. if it
> is possible to lock subdirectories or files in Git.  Although for
> distributed SCMs ACL doesn't matter much: check diffstat and merge or
> not from trusted people.  We have "network of trust" (BTW. Karl Fogel
> in OSSBook recommends 'soft' control of access control to repository,
> on social rather than on technical level).

I think what is most interesting here is access to content for which git has just about nothing worth mentioning, Just admit it. "Truth in advertising".

I did start doing this so here's my version (pre-msysgit). Please try to bring up the defintion of "atomic" again with the author. I did complain a little but nothing happened. The issue is that Clearcase is listed as having "atomic" commits which is not true for any usable definition of atomic in SCM context. With the definition in use there I think CVS should be considered having atomic commits too, at least I've never seen a half-committed file there.

% svn diff
Index: src/comparison/scm-comparison.xml
===================================================================
--- src/comparison/scm-comparison.xml	(revision 290)
+++ src/comparison/scm-comparison.xml	(arbetskopia)
@@ -71,6 +71,9 @@
             <impl id="ls-sync">
                 <name>LibreSource Synchronizer</name>
             </impl>
+            <impl id="git">
+                <name>Git</name>
+            </impl>
         </implementations>
         <timestamp>
             $Id$
@@ -182,6 +185,13 @@
                     needs to be up-to-date before doing a rename/move operation. 
                     This operation will be committed directly.
                 </s>
+                <s id="git">
+                    Yes (or no depending on interpretation). Git typically detects
+		    renames and copies based on content regardless of whether the
+		    committer indicated the fact. The detection is content based
+		    rather than file-id based. There is explicit rename too, but
+		    it is not used much.
+                </s>
            </compare>
         </section>
         <section id="copy">
@@ -236,6 +246,10 @@
                   limitations in Windows environments)
                 </s>
                 <s id="ls-sync">No, copies will start there own history.</s>
+                <s id="git">Yes(or no depending on interpretation). Git detects
+			copies and moves based on content. It does not track
+			history on a file-id based scheme.
+                </s>
            </compare>
         </section>
         <section id="repos_clone">
@@ -288,6 +302,11 @@
                   Yes, but is not documented and its based on the dataflow feature of the
                   LibreSource Synchronizer.
                 </s>
+                <s id="git">
+                  Yes. This is a fundamental part of using Git. A Git user typically always
+		  has a full copy of the entire repostory (well compressed) that is initialized
+		  using a clone command.
+                </s>
             </compare>
         </section>
         <section id="push">
@@ -331,6 +350,7 @@
                 <s id="cmsynergy">Yes, as long as you have the (more expensive) Distributed package.</s>
                 <s id="clearcase">Yes, using Clearcase Multisite.</s>
                 <s id="ls-sync">Yes, it's what we call a dataflow.</s>
+                <s id="git">Yes. This is a fundamental part of using Git.</s>
             </compare>
         </section>
         <section id="permissions">
@@ -417,7 +437,8 @@
                   multi-platform environments.
                 </s>
                 <s id="ls-sync">Permissions are set for the whole repository or branch.</s>
-            </compare>
+                <s id="git">No, but bad changes can be reverted before they are published.</s>
+	</compare>
         </section>
         <section id="changesets">
             <title>Changesets' Support</title>
@@ -490,6 +511,11 @@
                   Partial support. There are implicit changeset that are generated on
                   each commit.
                 </s>
+            	<s id="git">Yes. Actually Git is snapshot based which means Git records
+			the full state in every commit, which means that any two
+			commits can be compared directly very quickly, although the
+			repository is typically browsed as a series of change sets.
+                </s>
            </compare>
         </section>
         <section id="annotate">
@@ -534,6 +560,9 @@
                     Yes locally without any server connection with the standard graphical
                     Java client.
                 </s>
+            	<s id="git">Yes. It can also detect the origin of copied and moved source
+			lines.
+                </s>
            </compare>
         </section>
     </section>
@@ -610,6 +639,12 @@
                    It is possible to commit only a certain directory. However, one must
                    check out the entire repository as a whole.
                 </s>
+            	<s id="git">No. However it is possible to commit only selected 
+			changes in the working tree rather than everything. Subproject
+			support makes it possible to split large projects into several
+			repositories and link them. Related repositories need not be
+			checked out or cloned.
+                </s>
            </compare>
         </section>
         <section id="tracking_uncommited_changes">
@@ -659,6 +694,10 @@
                   Yes, with the Synchronizer Studio (default Java client) or with the
                   standard diff command (diff -r . .so6/xxx/REFCOPY/)
                 </s>
+            	<s id="git">Yes. In addition commits are local and will not be seen
+			until he/she decides to publish them making it possible to
+			track multiple versions locally before publishing.
+                </s>
             </compare>
         </section>
         <section id="per_file_commit_messages">
@@ -714,6 +753,7 @@
                   for a per-changeset message.
                 </s>
                 <s id="ls-sync">No. Commit messages are per changeset.</s>
+                <s id="git">No. The same message applies the the commit as a whole.</s>
            </compare>
         </section>
     </section>
@@ -828,6 +868,11 @@
                   documentation. Installing and getting started with the GUI is very easy
                   though. (update/commit-next-next-next-finished)
                 </s>
+            	<s id="git">
+		  There a good tutorials manual pages and a supportive community.
+		  Basic usage is simple, but advanced usage requires understanding of
+		  what makes git different.
+                </s>
             </compare>
         </section>
         <section id="ease_of_deployment">
@@ -950,6 +995,10 @@
                   LibreSource repository web page. 
                   (links: create workspace, update, commit, studio...)
                 </s>
+            	<s id="git">
+		  Very simple to deploy on Unix-like systems. Windows installs
+		  is not fully developed yet. Installing in cygwin is simple though.
+                </s>
            </compare>
         </section>
         <section id="command_set">
@@ -1048,6 +1097,13 @@
                   Basic commands available (commit/update), but it's really simple to
                   use the GUI. Ant task are also available.
                 </s>
+            	<s id="git">Basic usage could be considered similar, but trying
+			to use Git like CVS would be counterproductive since many
+			cases of CVS usage is by design not possible in Git. The
+			number of command is large. ~140 but only ~20 commands
+			are typically used and less than ten will do for casual
+			users.
+                </s>
            </compare>
         </section>
         <section id="networking">
@@ -1152,6 +1208,13 @@
                 <s id="ls-sync">
                   Good. Use of HTTP to get through firwalls. 
                 </s>
+            	<s id="git">
+		  Excellent. Normal usage is off-line, but networking is
+		  used for sharing changes Networking including ssh, 
+		  a special git protocol http and mail can be used to share
+		  changes, both incoming and outgoing. Mail can be used
+		  via IMAP and mbox files.
+                </s>
             </compare>
         </section>
         <section id="portability">
@@ -1249,6 +1312,11 @@
                   Excellent. Clients and servers work on any Java 1.5-compatible
                   platform. (Windows, Linux and Mac OS X )
                 </s>
+            	<s id="git">
+		  Very good for POSIX compatible environments. A non-cygwin
+		  port for windows is underway. There are some graphical
+		  tools available for windows in cygwin.
+                </s>
             </compare>
         </section>
     </section>
@@ -1323,6 +1391,7 @@
                   Yes, without diff features but with a better awareness support.
                   (allow to know at any time on each version each one is working on) 
                 </s>
+                <s id="git">Yes. gitweb</s>
             </compare>
         </section>
         <section id="availability_of_guis">
@@ -1421,6 +1490,10 @@
                   is automatically launched from the repository web page and 
                   another one which is an Eclipse plugin.
                 </s>
+                <s id="git">
+		  A number of good GUI's are availble for basic usage, 
+		  but typical usage is command based.
+                </s>
            </compare>
         </section>
     </section>
@@ -1501,7 +1574,8 @@
               additional licensing.
             </s>
             <s id="ls-sync">QPL - The Qt Public License (OpenSource)</s>
-        </compare>
+            <s id="git">GPL</s>
+       </compare>
     </section>
 </section>
     </contents>


-- robin
Jan Hudec· Nov 29, 2007, 07:17 UTC · re: Robin Rosenberg · lore

Re: Adding Git to Better SCM Initiative : Comparison

On Thu, Nov 29, 2007 at 02:48:22 +0100, Robin Rosenberg wrote:
Show 5 quoted lines
> I did start doing this so here's my version (pre-msysgit). Please try to bring up the defintion
> of "atomic" again with the author. I did complain a little but nothing happened. The issue is
> that Clearcase is listed as having "atomic" commits which is not true for any usable definition
> of atomic in SCM context. With the definition in use there I think CVS should be considered
> having atomic commits too, at least I've never seen a half-committed file there.

Actually, I did. Or rather, I did see a commit, that didn't make it to the server, but the client thought it did!

Maybe instead of asking the author to change the definition of atomic, ask him to add an item for whole-tree commits. That more precisely describes what is the point.

-- 
						 Jan 'Bulb' Hudec <bulb@ucw.cz>
Jakub Narebski· Nov 29, 2007, 02:26 UTC · re: Jakub Narebski · lore

Re: Adding Git to Better SCM Initiative : Comparison

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
Alex Riesen· Nov 29, 2007, 20:07 UTC · re: Jakub Narebski · lore

Re: Adding Git to Better SCM Initiative : Comparison

Jakub Narebski, Thu, Nov 29, 2007 03:26:12 +0100:
Show 7 quoted lines
> +                <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
"Nevertheless" (two "s").

BTW, I wouldn't call the level of documentation "Medium" when compared to any commercial SCM. How can they earn more than "a little", when compared to any opensource program?

Show 8 quoted lines
> @@ -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).

I read this as: "Git requires all these programs for builtin commands". Which is a bit confusing. Just drop "(builtin)"?

> +                    Autoconf to generate Makefile configuration; ready
> +                    generic configuration for many OS. Compiling docs
> +                    requires asciidoc and xmlto toolchain, but prebuild.
"prebuilt" (with "t"). Maybe remove ", but prebuilt" completely?
Show 8 quoted lines
> @@ -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>

You forgot bundles (aka SneakerNet). Again, compared to everyone else it is "vastly superior" :)

Show 11 quoted lines
>                  <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>

"binaries": MinGW and Cygwin. And it is definitely "excellent" by the standards of the site.

Jakub Narebski· Nov 30, 2007, 00:18 UTC · re: Alex Riesen · lore

Re: Adding Git to Better SCM Initiative : Comparison

On Thu, 29 Nov 2007, Alex Riesen wrote:
> Jakub Narebski, Thu, Nov 29, 2007 03:26:12 +0100:
Show 13 quoted lines
>> +                <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
> 
> "Nevertheless" (two "s").
> 
> BTW, I wouldn't call the level of documentation "Medium" when compared
> to any commercial SCM. How can they earn more than "a little", when
> compared to any opensource program?
Source code is not [user level] documentation.
But perhaps it should be "Good" instead of "Medium", although I think
not "Excellent".
 
Show 11 quoted lines
>> @@ -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).
> 
> I read this as: "Git requires all these programs for builtin
> commands". Which is a bit confusing. Just drop "(builtin)"?

What I meant to say that some Git commands are scripts in Perl or POSIX shell, and that those Git commands requires POSIX utilities (which of those utilities are needed is unfortunately not mentioned explicitely in the INSTALL file); _but_ that there is ongoing effort to rewrite matured commands in C (as built-ins).

But this is perhaps too long explanation to put it in this comparison table.

Show 5 quoted lines
>> +                    Autoconf to generate Makefile configuration; ready
>> +                    generic configuration for many OS. Compiling docs
>> +                    requires asciidoc and xmlto toolchain, but prebuild.
> 
> "prebuilt" (with "t"). Maybe remove ", but prebuilt" completely?
Gaaah, it should be "but you can get prebuilt docs".
 
Show 11 quoted lines
>> @@ -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>
> 
> You forgot bundles (aka SneakerNet).
> Again, compared to everyone else it is "vastly superior" :)

Bundles and patches (peer review!) I think truly move it from "Good" to "Excellent".

>>                  <s id="mercurial">
>>                      Excellent.  Uses HTTP or ssh.  Remote access also
>>                      works safely without locks over read-only network

By the way, can Git be used with repository on lockless network filesystem? (Although with distributed SCM it perhaps be better to just use many distributed repositories...). How does it work with repository available via SMBFS / CIFS or NFS?

Show 11 quoted lines
>> @@ -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>
> 
> "binaries": MinGW and Cygwin. And it is definitely "excellent" by the
> standards of the site.

I'd say excellent on POSIX systems, good on Win32 (there are still as far as I remember some troubles). I hope that gitbox project would succeed, and one would need only single binary (plus perhaps wish for GUI, and DLLs) to use git on MS Windows.

-- 
Jakub Narebski
Poland
Johan Herland· Nov 30, 2007, 01:26 UTC · re: Jakub Narebski · lore

Re: Adding Git to Better SCM Initiative : Comparison

On Friday 30 November 2007, Jakub Narebski wrote:
Show 21 quoted lines
> On Thu, 29 Nov 2007, Alex Riesen wrote:
> > Jakub Narebski, Thu, Nov 29, 2007 03:26:12 +0100:
> 
> >> +                <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
> > 
> > "Nevertheless" (two "s").
> > 
> > BTW, I wouldn't call the level of documentation "Medium" when compared
> > to any commercial SCM. How can they earn more than "a little", when
> > compared to any opensource program?
> 
> Source code is not [user level] documentation.
> 
> But perhaps it should be "Good" instead of "Medium", although I think
> not "Excellent".

If we try to compare ourselves to what's closest, i.e. Mercurial, I would say that Git's documentation is probably on par with what Mercurial has to offer. Their "Documentation" entry in the comparison is as follows:

"Very good. There's an overview and tutorial on the web site, and integrated help for every command."

I say we go for something similar.
Have fun!
...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Jakub Narebski· Nov 30, 2007, 01:53 UTC · re: Johan Herland · lore

Re: Adding Git to Better SCM Initiative : Comparison

On Fri, 30 Nov 2007, Johan Herland wrote:
Show 31 quoted lines
> On Friday 30 November 2007, Jakub Narebski wrote:
>> On Thu, 29 Nov 2007, Alex Riesen wrote:
>>> Jakub Narebski, Thu, Nov 29, 2007 03:26:12 +0100:
>> 
>>>> +             <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
>>> 
>>> "Nevertheless" (two "s").
>>> 
>>> BTW, I wouldn't call the level of documentation "Medium" when compared
>>> to any commercial SCM. How can they earn more than "a little", when
>>> compared to any opensource program?
>> 
>> Source code is not [user level] documentation.
>> 
>> But perhaps it should be "Good" instead of "Medium", although I think
>> not "Excellent".
> 
> If we try to compare ourselves to what's closest, i.e. Mercurial, I would
> say that Git's documentation is probably on par with what Mercurial has to
> offer. Their "Documentation" entry in the comparison is as follows:
> 
> "Very good. There's an overview and tutorial on the web site, and integrated
> help for every command."
> 
> I say we go for something similar.

Well, at least according to surveys results people perceive "The Mercurial Book" (hgbook) as better documentation than "Git User's Manual" + tutorials. See for example frequent requests for "The Git Book" patterned after hgbook and/or svnbook.

BTW. the list was meant to be updated by contributors who added SCMs, but it doesn't liik lik it is...

-- 
Jakub Narebski
Poland
Alex Riesen· Nov 30, 2007, 07:16 UTC · re: Jakub Narebski · lore

Re: Adding Git to Better SCM Initiative : Comparison

Jakub Narebski, Fri, Nov 30, 2007 01:18:27 +0100:
Show 8 quoted lines
> >>                  <s id="mercurial">
> >>                      Excellent.  Uses HTTP or ssh.  Remote access also
> >>                      works safely without locks over read-only network
> 
> By the way, can Git be used with repository on lockless network
> filesystem? (Although with distributed SCM it perhaps be better
> to just use many distributed repositories...). How does it work
> with repository available via SMBFS / CIFS or NFS?

Works fine. CIFS/SMBFS is slow as hell when hosted on windows, but I figure it is not problem of Git.

Jan Hudec· Nov 30, 2007, 18:34 UTC · re: Alex Riesen · lore

Re: Adding Git to Better SCM Initiative : Comparison

On Thu, Nov 29, 2007 at 21:07:10 +0100, Alex Riesen wrote:
Show 10 quoted lines
> Jakub Narebski, Thu, Nov 29, 2007 03:26:12 +0100:
> > +                <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
> 
> "Nevertheless" (two "s").

I think it's not amount of documentation that's insufficient, but rather the organization. The problem is not that the information is not there, but that it's sometimes not easy to find.

> BTW, I wouldn't call the level of documentation "Medium" when compared
> to any commercial SCM. How can they earn more than "a little", when
> compared to any opensource program?

I don't know that many commercial SCM, but clearcase does have more than "a little" documentation.

Show 13 quoted lines
> [...]
>
> > @@ -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>
> 
> You forgot bundles (aka SneakerNet).
> Again, compared to everyone else it is "vastly superior" :)
In fact at least darcs and bzr can also do SneakerNet.
-- 
						 Jan 'Bulb' Hudec <bulb@ucw.cz>
Jakub Narebski· Dec 3, 2007, 19:57 UTC · re: Jakub Narebski · lore

Below there is email I want to send to Shlomi Fish to have him include GIT in "Better SCM Initiative : Comparison page".

Please check it and send comments and corrections. TIA.
-- >8 --
I have noticed that your SCM comparison at "Better SCM Initiative" website
  http://better-scm.berlios.de/comparison/comparison.html
misses GIT, version control system which is used to manage Linux kernel.

GIT was created by Linus Torvalds in response to the change of BitKeeper licensing, as a tool to manage Linux kernel sources. It is based on three years of Linus experience with BitKeeper, and inspired by Monotone architecture. It was designed for Linux kernel, and is used by various projects, including X.Org, various Freedesktop projects, WINE, OLPC (One Laptop Per Child), Samba.

<blurb src="http://git-scm.org"> Git is a popular version control system designed to handle very large projects with speed and efficiency; it is used mainly for various open source projects, most notably the Linux kernel.

Git falls in the category of distributed source code management tools, similar to e.g. GNU Arch or Monotone (or BitKeeper in the proprietary world). Every Git working directory is a full-fledged repository with full revision tracking capabilities, not dependent on network access or a central server.

Git is an Open Source project covered by the GNU General Public License v2. It was originally written by Linus Torvalds and is currently maintained by Junio C Hamano. </blurb>

Below there is patch to the sources for the site.

BTW. when asking about updating GIT info for comparison, please CC git mailing list, git@vger.kernel.org

Index: src/comparison/scm-comparison.xml
===================================================================
--- src/comparison/scm-comparison.xml	(revision 290)
+++ src/comparison/scm-comparison.xml	(working copy)
@@ -38,6 +38,9 @@ <implementations>
             <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 @@ <title>Atomic Commits</title>
                 <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,13 @@ <title>Files and Directories Moves or Renames</title>
                 <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">
+                    Yes (or no depending on interpretation). Git detects
+                    renames based on content regardless of whether the
+                    committer indicated the fact.
+                    You can follow history of file across renames using
+                    'git log -M --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 +225,13 @@ <title>File and Directories Copies</title>
                     Yes. Copies are supported.
                 </s>
                 <s id="aegis">No. Copies are not supported.</s>
+                <s id="git">
+                    Yes (or no depending on interpretation). Git detects
+                    copies (when requested) based on content regardless
+                    of whether the committer indicated the fact.
+                    You can follow history of file across copies using
+                    'git log -C -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 +285,7 @@ <title>Remote Repository Replication</title>
                 <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 +332,7 @@ <title>Propagating Changes to Parent Repositories</title>
                 <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 +393,10 @@ <title>Repository Permissions</title>
                 <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 +479,13 @@ <title>Changesets' Support</title>
                 <s id="darcs">
                     Yes. Changesets are supported.
                 </s>
+                <s id="git">
+                    Yes. Changesets are supported.<br />
+                    Actually Git is snapshot based which means Git records
+                    the full state in every commit.  This means that any two
+                    commits can be compared directly very quickly, although the
+                    repository is typically browsed as a series of changesets.
+                </s>
                 <s id="mercurial">
                     Yes. Changesets are supported.
                 </s>
@@ -509,6 +540,11 @@ <title>Tracking Line-wise File History</title>
                 <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).
+                    It can also detect the origin of copied and moved source
+                    lines, and can ignore whitespace changes.
+                </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 +606,11 @@ <title>Ability to Work only on One Directory...</title>
                     whole.
                 </s>
                 <s id="aegis">No. All changes are made repository-wide.</s>
+                <s id="git">
+                    No. All changes are made repository-wide.  However
+                    it is possible to commit only selected changes in the
+                    working tree rather than everything.  You can also
+                    use submodules (subproject) support.</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 +677,10 @@ <title>Tracking Uncommited Changes</title>
                     Yes, using "darcs whatsnew".
                 </s>
                 <s id="aegis">Yes. Using aediff</s>
+                <s id="git">
+                    Yes, of course. 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 +726,11 @@ <title>Per-File Commit Messages</title>
                 <s id="darcs">
                     No.
                 </s>
+                <s id="git">
+                    No.  The message applies to the commit as a whole.
+                    But you can tag (with description) given contents
+                    of a file (blob).
+                </s>
                 <s id="mercurial">
                     No.
                 </s>
@@ -782,6 +832,15 @@ <title>Documentation</title>
                     and the client contains a help tool that offers
                     an integrated help system.
                 </s>
+                <s id="git">
+                    Good. There's Git User's Manual, manpages, some
+                    technical documentation and some howtos.  All
+                    documentation is also available
+                    <a href="http://www.kernel.org/pub/software/scm/git/docs">online</a>
+                    in HTML format; there is additional information (including
+                    beginnings of FAQ) on a
+                    <a href="http://git-scm.org/gitwiki">git wiki</a>.
+                </s>
                 <s id="mercurial">
                     Very good. There's an overview and tutorial on the
                     web site, and integrated help for every command.
@@ -894,6 +953,16 @@ <title>Ease of Deployment</title>
                     to install the subversion perl bindings and a few modules
                     from CPAN.
                 </s>
+                <s id="git">
+                    Very good.  Install from RPM or deb on Linux; use
+                    msysGit or Cygwin install on Windows.  Git requires
+                    zlib; also POSIX shell and utilities and Perl for some
+                    commands.
+                    Installing from sources is easy: Makefile has ready
+                    configuration for many OS, you can also use autoconf
+                    to generate Makefile configuration.  Compiling docs
+                    requires asciidoc toolchain, but you can use prebuild.
+                </s>
                 <s id="mercurial">
                     Excellent.  Binary packages are available for all
                     popular platforms.  Building from source requires
@@ -1006,6 +1075,13 @@ <title>Command Set</title>
                     but since the model is different most commands are
                     unique.
                 </s>
+                <s id="git">
+                    Tries to follow CVS conventions, but deviates where there
+                    is a different design (following BitKeeper for DVCS).
+                    Large command set (~140) is divided into plumbing commands
+                    (low lewel, to be used in scripts) and porcelain (high level).
+                    It is easy to add new commands as scripts, or as git aliases.
+                </s>
                 <s id="mercurial">
                     Tries to follow CVS conventions, but deviates where there
                     is a different design.
@@ -1106,6 +1182,13 @@ <title>Networking Support</title>
                     There exists some HTTP-functionality, but it is quite
                     limited.
                 </s>
+                <s id="git">
+                    Excellent.  Uses HTTPS (with WebDAV) or ssh for push
+                    (to publish changes to server) and HTTP, FTP, ssh or custom
+                    "git" protocol for fetch (read from server).  There is also
+                    git-bundle for offline transport, and tools to exchange
+                    (create and apply) patches via email.
+                </s>
                 <s id="mercurial">
                     Excellent.  Uses HTTP or ssh.  Remote access also
                     works safely without locks over read-only network
@@ -1203,6 +1286,11 @@ <title>Portability</title>
                     Very good. Supports many UNIXes, Mac OS X, and Windows,
                     and is written in a portable language.
                 </s>
+                <s id="git">
+                    Good to very good.  Portable across all POSIX systems.
+                    There exists Win32 binary using MinGW (msysGit),
+                    or you can use binary provided by Cygwin.
+                </s>
                 <s id="mercurial">
                     Excellent. Runs on all platforms supported by
                     Python.  Repositories are portable across CPU
@@ -1300,6 +1388,10 @@ <title>Web Interface</title>
                     is included in the distribution.
                 </s>
                 <s id="aegis">Yes.</s>
+                <s id="git">
+                    Yes, gitweb is included in git since version 1.4.0.
+                    Other web interfaces exists: 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 +1464,12 @@ <title>Availability of Graphical User-Interfaces.</title>
                 <s id="aegis">
                     There is tkaegis.
                 </s>
+                <s id="git">
+                    There is history viewer 'gitk' and commit tool 'git-gui';
+                    both in Tcl/Tk.  There also exists a number of third-party
+                    GUIs, including: qgit (Qt), GitView (GTK+), Giggle (GTK+),
+                    tig (ncurses).
+                </s>
                 <s id="mercurial">
                     History viewing available with hgit extension;
                     check-in extension (hgct) makes committing easier.
@@ -1453,6 +1550,7 @@ <title>License</title>
                 GNU GPL (open-source)
             </s>
             <s id="svk">Perl License. (open source)</s>
+            <s id="git">GNU GPL v2 (open source)</s>
             <s id="mercurial">GNU GPL (open source)</s>
             <s id="monotone">GNU GPL (open source)</s>
             <s id="opencm">

← back to recent threads