[PLUG-Devel] Rah, rah git! [Was: OT: sourceforge or codeplex or googlecode for OSS hosting]

voltagespike+plugdevel at fastmail.fm voltagespike+plugdevel at fastmail.fm
Thu Sep 18 13:54:45 MST 2008


On Sep 18, 2008, at 8:02 AM, Ted Gould wrote:

>>   * Far smaller repositories than any other tool
>
> This was true of the original repository format bzr used.  But, the
> newer formats are more efficient.  Since the repository formats are
> plugable, they get upgraded (see below).

I thought this made its way in 1.3, so this 1.5 test would be relevant:

http://vcscompare.blogspot.com/2008/06/git-mercurial-bazaar-repository-size.html

I see that there is a 1.6, though, so I'd appreciate a heads-up as to  
where the new format became standard.

>>   * Far faster than the other tools
>
> Most of that performance has been eclipsed with recent versions of  
> both
> tools also.  Git is still faster, but I wouldn't put it in the "human
> can notice" faster category.

Again, perhaps this changed with 1.6 so I'll give it another try.

I should have mentioned up front that for smaller repositories (let's  
say less than a few hundred megabytes and a history with less than 5  
digits) most people will not care about size or performance ... but  
it's nice to know that you can grow.

>>   * git rebase is superior to bazaar's mainline
>>
>
> Heh, well, I would say that this is a flaw of Git and find it
> interesting that you put it in the pluses category.  Basically the git
> log format is date based not taking into account merges.

By default it is date based, but you can easily call up a topology if  
you wish. I'm not certain off the top of my head how to show _only_  
merge commits (as in bzr). I think a date order makes more sense in a  
distributed system, but, you are correct, bzr works harder to be  
_like_ a centralized SCM while still offering the strengths of a  
distributed system.

> So there is a rebase command to move where your log is from so that  
> it can
> be readable again.  Bazaar solves this by having a readable log in the
> first place :)

I'm not sure I follow. Because it is date based, rebase doesn't change  
the log output. People rebase to linearize history and clean up their  
changes (most tools, including some git users, accomplish this through  
stacks of patches). It is more of a discipline than anything else with  
the goal of making sure that every commit is clean and functional.  
This is especially important when performing a bisect, but it also  
helps tremendously when performing code reviews.

>>   * git as everything built-in, I don't have to hunt for plug-ins
>
> Again, I'm surprised this is a plus.  Bazaar has a rich plugin  
> interface
> that allows for end users to add functionality easily.

It isn't the lack of a plug-in interface that is a plus. It is the  
fact that the I download the core package and get everything I need.

> One that makes it so that your laptop won't suspend while doing  
> Bazaar operations

In git, someone accomplished this same task a while back using the  
hooks[1] mechanism. Someone took it a step further and taught git to  
postpone CPU/disk intensive operations while on battery. :-P

[1] A hook is simply a program that git executes at certain stages of  
its operation (e.g., a verifier before committing to make sure that  
your code matches the formatting requirements). These are usually  
written as shell scripts.

> and the other that pops up a notification when long operations  
> complete.

Again, that sounds like a hook would work (although hooks are per- 
operation so you'd have to add the hook to the few potentially-long  
operations).

>>   * git instaweb! Single command web setup for browsing
>
> Cool.  I haven't heard that anyone cried installing Loggerhead ;)

Anything that makes my life easier is okay in my book.

>>   * git bisect: binomial search of history for find a bug fix/break
>>
>
> Yeah, and one-upped it.  There is now a bazaar search plugin that is
> really, really cool.  Plus Loggerhead support.

git has had such search capabilities for as long as I've been using  
it. I don't believe that gitweb supports change searching, though.

I'll have to check out this Loggerhead. Do you have a list of  
recommended plug-ins and external tools I should install along with  
bazaar?

>>   * git diff --color-words
>>
>>     - Amazingly wonderful when you have to work with reflowed text
>
> I guess I always do "bzr diff --using=meld" so that wouldn't effect me
> much :)  I really like the way that meld displays my diffs.

That's an external GUI tool, right? I'd try it out, but my development  
machine at the moment is missing almost all of the requirements to get  
that one going.

I am curious if it works how you say, though, because I've never  
encountered anything like color-words before. All I can find is a post  
from 2006 stating that it most definitely does _not_ work for diffing  
LaTeX files.

>>   * Individual hunk commits
>>
>
> Again, I would say that this is a negative on git.  For other folks,  
> the
> way that git works is that you create your own changeset.  So if you  
> do
> "git commit" it does nothing until you go along and build up your
> changeset so that it knows what to do.

Sort of true, yes. People should add the individual files pertinent to  
the commit, but "git commit -a" exists to check in all changes. Most  
people work this latter way because having a clean history and  
performing code reviews is seen as unnecessary (and I'm certainly not  
going to argue here what is best for a particular project).

What I refer to as "Individual hunk commits" is an interactive mode  
where, within the file, I can say "yes, I want to check this change  
in" or "no, that change shouldn't be seen by others". Note that it  
does this without touching the original file.

>>   * In-directory branching
>>
>
> Bazaar supports looms.  Which basically means you can do stackable
> branches, commit to them and build them at will.

Looms are patch stacks (more like Stacked Git) rather than different  
branches. It's really more of a development preference, but  
lightweight branching is one of those features that I didn't know I  
was missing until I used it.

>>   * Fantastic integration with other VCS (especially svn and p4)
>
> Bazaar also.  And someone is working on even getting Git repository
> integration -- so then you never actually have to use Git's  
> interface ;)

People are crazy. There is git-bzr, git-svn, and even a git-cvsserver.  
There was a project to implement git-svnserver and another to  
implement git as the backend storage mechanism for svn, but I'm not  
sure if they ever got anywhere.

For whatever reason, git users have been fanatic about using git  
subversively.

>>   * The documentation is all over the place
>>
>
> I guess I would describe this as: Git is by hacker for hackers.  End
> users are something they're planning for in version 2 ;)

That's not really fair, but git seems that the git people would rather  
describe how git works than publish documentation encouraging a  
particular way to work.

One might comment that git comes with all of the functionality but you  
have to seek the larger community for documentation, while bazaar  
comes with the documentation but you have to seek the larger community  
for functionality.

>>   * Submodule support is, in my opinion, horrendous
>>
>
> Honestly, I've never used a VCS where I've seen this work the way one
> would expect.  I don't understand why.

I expect to see patches (I kid, I kid).

A large part of the problem with git is that the maintainers actively  
prevent breaking backwards compatibility, so a feature that stinks is  
likely to remain a stinker (unless there is a clear migration path).  
This is especially problematic with submodules because none of the  
core developers use the feature.

> I think I also want to add a negative for some users.
>
>      * Git sucks on Windows.

Not for the past 9 months or so. Most of the limitations of the FAT  
filesystem (case insensitivity, limited charset, symbolic links, etc.)  
have workarounds that are nicer than I would have expected. What git  
lacks is a "compatibility" mode for Linux users interacting with  
Windows users. I'm not sure how well Bazaar handles this.

>      * As far as I know there is no one providing professional  
> services
>        based on Git.

Well, there is github and Codebase but I couldn't even begin to  
compare the commercial offerings.


>      * No project hosting using Git.

That's just silly. There's gitorious, github, git.or.cz, and a slew of  
others.

http://git.or.cz/gitwiki/GitHosting

> You can also get some comments from people that know better than I: http://bazaar-vcs.org/BzrVsGit

Warning! That link is extremely convincing in favor Bazaar.

It is also misleading, sometimes outdated, and decidedly one-sided. It  
does, however, highlight some of the fundamental differences in the  
two approaches.

>> That ended up being longer than expected, but it should give those
>> Bazaar supporters something to chew on. :-)
>
> Heh, and at the end of the day if people are choosing between Bazaar  
> and
> Git I'm happy.  As long as they don't choose Clearcase or Bitkeeper ;)

I agree, and I think every organization should switch to a distributed  
system. I thought it was a clear race between Mercurial and Git, but  
the Bazaar developer support is still there (even if it is shunned in  
the open source community) and the tools seem well done.

In the end, I think it comes down to mental inertia. Bazaar is quite  
clearly the most like a traditional, centralized tool while adding the  
features and benefits of a distributed system. Git is a distributed  
system that also introduces new, powerful features that may be  
especially confusing to those with SCM experience.



And for those we haven't lost yet, some weaknesses of the distributed  
approach:

   * It is easy for changes to be committed but not shared

     - Bazaar has "bound" branches but I've never used them

   * All of these systems track content, not files

     - This means no partial/sparse checkout. git has experimental
       support, but few are interested in developing it.

     - It also means that merging individual files can be problematic
       (merge one file from a commit and later merge the commit when
       there have been more changes made to the file). Perforce would
       never have a problem with that.

Others?

-- 
                                                         Voltage Spike
       ,,,
      (. .)
--ooO-(_)-Ooo--






More information about the PLUG-devel mailing list