Steve Scaffidi wrote:
Tom Metro wrote:
Steve Scaffidi wrote:
   - "the Zen of git - unlearn what you know"
I recommend that you use that as your talk title. :-)

It's apt, but perhaps not in the way you're thinking - At $work I
recently posted a wiki page about using git with our svn-based source
control and it attracted some attention - mostly from people who
simply don't see the value in distributed version control systems,
especially git. I tried explaining *why* I've grown to prefer using it
over svn... but most of these people seemed stuck on the fact that git
is new, and very much hyped-up and _supports_ a model of development
that they are not used to, never mind comfortable with.

However, if one forgets everything they think they know about git...
it turns out that just like SVN is a better CVS, git can be a better
SVN! And... when you need to do some things that SVN can simply never
support (at least not without substantial effort)... chances are you
*can* with git.

So your point was not to unlearn what you know about past version control systems, but to unlearn the hype you've heard about git?

What I've found is that you can be a casual user of git, and hardly notice the difference between it and svn. Sure, the commands are different, but that's where the "svn to git" cheat sheets that are floating around on the web will get you by. I used git in this fashion for a few years, because that's all I really needed from it at the time. I wasn't an active developer on the projects, so as long as I could get at the desired revision of the source, it suited my needs.

More recently I worked on a project using git as an active developer, where all the usual functionality becomes required, like branching and merging, and this is when I started having disagreements with git. It didn't take long to develop an intuition about how CVS, and later SVN was going to behave, and develop a mental picture of how it worked. I've been told that you have a better chance of developing a similar intuition of git by reading about its internals, so I read "Git Internals"[1], but while the book started off good at explaining the more basic internals (the elegance of storing complete snapshots, rather than diffs; , it fell short once it started talking about branching and merging, and never really tied that back to the underlying functionality.

1. http://peepcode.com/products/git-internals-pdf

As a result, I find a number of thing that git does to be unintuitive. For example, when you add a file in git, it doesn't just queue that file to be included in the next commit (as would happen in SVN). It commits the current state of the file to your local "index" (a misnamed database or storage area) immediately. If at some time later you run 'git diff' you'll only see changes made to the file since it was added. Not only does this not make intuitive sense to me, I've yet to see an explanation for why such behavior is useful. This applies equally to a number of other git behaviors.

Git also has a lot of terminology baggage. Version control is a mature space, with a lot of well established terms. It feels like git developers tried to come up with new terms for common operations in an attempt to make it clear that they have different behaviors from what you're used to in other VCSs, but as a result there also seems to be a bunch of things that are misnamed and misleading.

The reason why I think your "the Zen of git - unlearn what you know" phrase is appropriate, is because if you start with the assumption that at least a good portion of the git fans are using it because it works better, than there must be a tipping point where you reach your "ah ha" moment, and then git feels intuitive and provides tangible benefits that speed development.

You sometimes hear learning object oriented programming as having such a tipping point, where the programmer starts to thing intuitively in terms of objects, instead of procedures. A similar experience can be found when going from C to Perl. You can write very C-like Perl code, but not until you internalize the Perl way of doing thing are you really gaining the benefit of the tool.

So while I can now do multi-branch development with git, and it doesn't get in my way for the most part, I haven't reached a "Zen state" with git such that I feel it is providing any improvement for me over past VCSs.

 -Tom

--
Tom Metro
Venture Logic, Newton, MA, USA
"Enterprise solutions through open source."
Professional Profile: http://tmetro.venturelogic.com/

_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to