|
Boost : |
Subject: [boost] Git and SVN do not coexist well
From: Daniel Herring (dherring_at_[hidden])
Date: 2011-02-04 13:39:15
Re: [boost] [Git] Moving beyond arm waving?
On Fri, 4 Feb 2011, Belcourt, K. Noel wrote:
> On Feb 3, 2011, at 8:47 PM, Emil Dotchevski wrote:
>> This may be a dumb question, but if a group of developers wants to
>> collaborate using git, do they really care if in the end they push to
>> a git or a svn repository?
>
> Probably not. I made the proposal in the spirit of experimenting and
> public access to a live git mirror, which might help people better
> understand the pros and cons of a migration to git.
Yes it does matter. Very much!
There is a common hope that this is not true, but SVN bindings hamstring
the usage of git. Getting data from one version-control system into
another is usually not that hard. Getting an accurate 1:1 mapping is well
nigh impossible.
I have burned myself badly by trying shared development on a git mirror
parallel to SVN. It only works if git can only see a single copy of
git-svn doing the sync. It is manageable with small numbers of git-svn
only because the pain is reduced when one mirror has to be rebuilt and its
private branches grafted (even my desktop and laptop have desynced several
times over a few years). It would be a complete disaster for a team of 5
or more.
Each user doing a commit from git necessarily has their own git-svn
configured, thus they cannot share their git repos naturally. There is no
way to have a central server for git-svn due to differences in the commit
semantics. Git pushes a new state and fails if the previous state changed
at all, SVN tries to merge and fails if there is a conflict (even though
other files may have changed). There are larger differences in merge and
branching semantics. I suppose you could have people attempt the
moderation of all commits (a real pain).
Once you have two or three people using git, all sorts of things can fail
when they share git repos with multiple git-svn links.
Users may have different URLs for the SVN repo (addressable via
--rewrite-root), and there are several other parameters that must be
manually set and agreed upon at all mirrors (e.g. --trunk=, --branches=,
--tags=, --prefix=).
On top of that, different versions of git-svn may do things differently,
causing the git views to artificially diverge.
These issues and more are alluded to in the "DESIGN PHILOSOPHY" and
"CAVEATS" sections of the git-svn manpage. Some of the information is
outdated, but the overall points still stand: git usage should be
linearized and only shared through SVN or via git-format-patch.
http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
In summary, a central git mirror can help individual developers seed their
own mirrors; but they cannot use normal git workflows as long as SVN
holds the master repository. All attempts to do otherwise will be
punished by the laws of nature.
Later,
Daniel
P.S. Sorry for the slight incoherence, I don't have time to edit things
properly.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk