That is an absolutely great summary !

-----Original Message-----
From: jenkinsci-users@googlegroups.com
[mailto:jenkinsci-users@googlegroups.com] On Behalf Of David Weintraub
Sent: Sunday, 11 March 2012 3:38 p.m.
To: jenkinsci-users@googlegroups.com
Subject: Re: Git vs SVN

Git is not "better" than Subversion. Distributed version control is
not "better" than centralized version control.

However, that doesn't mean that Subversion is better or that
centralized is better. It's all about circumstances. There are many
circumstances where Git excels. I use Git as my person version control
system, and I even have projects on GitHub (including several
Subversion hooks). Using Git is easier than using Subversion when I'm
the only one using it. No need for starting or stopping a Subversion
server. And, GitHub makes it ridiculously easy to share it.

Git has another advantage too. I've had people who've downloaded my
work, made changes, then sent me -- via email, the Git patches. I can
review them, and then add them back into my GitHub repository. Git
makes it easy because everyone has a repository, and each repository
can accept patches from other repositories. So, if I find Git so
useful, why don't I introduce it to our corporate environments?

Git has two main powers: Distributed repositories and a lackadaisical
attitude towards security. This works great for Linux. Torvalds only
has to accept changes from two or three people. Everyone else who
wants to contribute to Linux has to find a sponsor who will accept
their changes into their sponsor's repository. Those sponsors have
sponsors, and onwards to the official Linux repository. tens of
thousands of people might be making code changes in Linux, but all
Torvalds has to know are the two or three people he'll accept changes
from. It's a web of trust.

Now, let's look at a typical corporate environment. With an open
source project, if tens of thousands of people have your source code,
it's a smashing success. If you're a bank, and tens of thousands of
people have access to the source of your trading algorithms, it's not
a success. You need a centralized security system.

Let's look at how the corporate development works. There is one, and
only one repository that's official. All the desktop repos mean
nothing. All the shared team repos mean nothing. Unless it's in the
official corporate repository, it means nothing.

That means Git's true strengths, it's easy attitude towards security,
and the power of its distributed repository are rendered null and
void. The true advantages it would have over a centralized system like
Subversion just don't matter.

A long time ago, I was a ClearCase administrator. ClearCase uses the
idea of "streams" (branches really). Developers work on their private
"development stream", and then deliver (merge) their change onto the
"integration stream". It was the integration stream where builds would
take place. It's all the disadvantages of a centralized repository
system with all the disadvantages of a distributed repository system.

My job as CM was mother hen. I would walk around and pester the
developers to commit their changes or rebase their stream (i.e. merge
the changes in the integration code into their branch). If I was
lucky, we would somehow avoid the merge hell that release dates
became. I had QA on my back because they would never have enough time
to actually test everything.

My first job outside of ClearCase was at a shop with three dozen or so
developers all using CVS. How do they create developer branches? They
don't. Instead, they all work on the same mainline branch. In fact,
they rarely ever branches. Well, I thought, this wouldn't work.

I was wrong. I never saw a development shop run so smoothly.
Developers took small bites in their changes. They were more careful
in what they were doing and how those change might affect other
developers. Come release time, QA had already tested almost all of the
changes. Instead, they pointed out the bugs that were patched. When it
was time to release the code, it was tested and there was little last
minute crunch.

I suddenly realized what forcing everyone to work on a centralized
repository would do. It forced everyone to work together. It forced
people to communicate with each other. It forced developers to think
before they made any changes. And, that's why Subversion might be
better in a corporate environment.

In fact, in some ways, Git is worse than ClearCase UCM. At least under
ClearCase UCM I could peek at the developer's work and know what to
expect when the "delivery" took place. It was in their own branch, but
it was accessible in the repository. With Git, I wouldn't even have
that. A developer might be working on a walloping change, and I have
no way of knowing until they present it three days before the release.

Subversion is also simpler than Git. A public Git repository still
depends upon SSH for security which makes it harder to setup. With
Subversion, I can use Windows Active Directory. You know your Windows
account and password, you know your Subversion account and password.
If you are in the "development" Windows group, you have access to the
repository.

Git requires a commit and a push to get your code into the main
repository. In Subversion, a simple commit does the trick. If you do a
"svn status", you know whether your code is in the main repository or
not. A "git status" doesn't. There have been too many "whoops"
occasions when someone thought they had submitted their change to the
main repository with Git but forgot.

Git is just another tool in your toolbox - like a hammer. It can be
good to use sometime, but you can't treat everything like a nail. Git
isn't a miracle detergent that will get your clothes cleaner, make
your colors brighter and your whites even whiter. Let's look at what
you're asking:

* All developers will have to be retrained on Git.
* All Jenkins jobs will have to be modified to use Git.
* You're going to have to convert your repositories from Subversion to Git.
* If you're using a defect tracking system, you'll have to modify that
to use Git.
* If you're using Maven, there are going to be some changes in your
pom.xml files.

And all for what? Don't give me an evangelical list of advantages.
We're not saving souls. We're building software. What advantages will
Git offer at your company? What makes it so good that it's worth the
headaches that will accompany the change.

I've done this before taking companies from ClearCase to Subversion,
but I was able to easily convince all the stakeholders of the
advantages. Ask yourself what problems Subversion presents and what
problems Git will solve.

If the developers are happy with Subversion, and there aren't any
issues that Git will solve, then what are you trying to do?

-- 
David Weintraub
qazw...@gmail.com

Reply via email to