Version Control Software

Ben Finney ben+python at benfinney.id.au
Wed Jun 12 22:30:40 EDT 2013


cutems93 <ms2597 at cornell.edu> writes:

> I am looking for an appropriate version control software for python
> development, and need professionals' help to make a good decision.

> Currently I am considering four software: git, SVN, CVS, and
> Mercurial.

These days there is no good reason to use CVS nor Subversion for new
projects. They are not distributed (the D in DVCS), and they have
specific design flaws that often cause insidious problems with common
version control workflows. As a salient example, branching and merging
are so painful with these tools that many users have learned the
terrible habit of never doing it at all.

Bazaar, Git, and Mercurial are all excellent DVCS systems (and all have
excellent branching and merging support). For someone new to version
control, I would highly recommend Bazaar, or Mercurial if that's not an
option. I would not recommend Git for new work.

It helps that all of these are free software. Avoid proprietary tools
for development work, especially tools that control access to your data.

> What version control software do you like the most and why?

Bazaar. It has, in my experience, by far the easiest default workflow to
learn. It is also very flexible for the odd wrinkles in preferred
workflow that most beginners don't even know enough to realise they have.

(Examples of Bazaar features that make it IMO superior are: default to
view only the main-line revisions without the “merge noise” that would
happens with other VCSes; easily serve a branch from just about any
shared file storage; easily choose a centralised repository for
particular purposes without any other user needing to do anything
different).

Mercurial is relatively easy to learn, and full-featured; it is somewhat
more restrictive than Bazaar but not enough to recommend against.


Git is hugely capable and is the most popular, but still has some
annoying restrictions (e.g. it can't hide merged revisions, encouraging
poor practice like re-writing history when merging a branch).

But my main reason to recommend against Git is that its native interface
is far too baroque: it exposes its innards and requires the user to know
a huge range of internal concepts to avoid making mistakes.

You should be wary of GitHub, a very popular Git hosting site. It uses
what amount to proprietary protocols, which encourage using GitHub's
specific interface instead of native Git for your operations and hide a
lot of the needless complexity; but this results in a VCS repository
that is difficult to use *without* being tied to that specific site,
killing one of the best reasons to use a DVCS in the first place.

Gitorious is a Git hosting site that does not have this problem, and may
for that reason be a good choice for hosting your Git repositories. It
is also based on free software (unlike GitHub), so if the service goes
away for any reason, anyone else can produce a functionally identical
service from the same server code. This makes it a better bet for
hosting your repositories.

Neither Mercurial nor Bazaar suffer from Git's baroque complexity, and
with Bazaar's command interface being IME the easiest and most intuitive
to teach, I would recommend Bazaar for any new VCS user.


A sad caveat, though: Bazaar suffers from a foolishly limited
development pool (Canonical are the main copyright holder, and, instead
of accepting contributions under the same license they grant to others,
they obstinately insist on having special exclusive powers over the
code). Also, Bazaar's early versions did not impress large projects like
Linux or Python; improvements have long since erased the reasons for
that, but too late for widespread popularity.

So Bazaar's popularity never gained as much as Git or Mercurial. Worse,
development of Bazaar appears to have stagnated at Canonical — and,
because they insisted on being in a privileged copyright position,
no-one else is in a good position to easily carry on development.

Bazaar is still my recommendation of primary VCS tool, for its
flexibility, speed, wealth of plug-ins, ability to view revision history
sensible, and straightforward command interface. But you should go into
it aware that it may be a little more difficult to find fellow users of
Bazaar than of Mercurial.

-- 
 \           “The lift is being fixed for the day. During that time we |
  `\            regret that you will be unbearable.” —hotel, Bucharest |
_o__)                                                                  |
Ben Finney




More information about the Python-list mailing list