[cvsnt] Betr.: CVSNT to CVS
Tony Hoyle
tony.hoyle at march-hare.com
Wed Apr 8 19:13:31 BST 2009
Andreas Krey wrote:
> It comes close to the best thing since version control in general, IMHO.
> That way I can basically do everything offline, even complicated merges,
> and only need a connection for pushing back the results. I first considered
> it overkill just as well but then the whole git repository is typically
> smaller than all the 'pristine copy' files that svn puts in the sandbox.
Only for a new repository. Try pulling down something like redhat, for
example.
If you're working on the same data all the time then there's saving -
for an initial download of data you're avoiding a lot of the small ones
later (although of course you still need to update from the server to
get others changes, and commit to the server to send your changes, so
it's debatable how much you're actually saving). If you're only on a
project for a short period it's a huge waste especially if it's
happening remotely.
> With git you would just as well have an 'official' repo, but the funny
> thing is that every developer has a full backup. :-) What's more
> important to me is that I can continue working even when the
> central server is offline (like 'powered down for holidays').
Something we considered adding to cvsnt is offline commits, so you could
commit locally then sync later. It's not really a common case though -
it's rare you don't have *some* internet connectivity.
> That's the point I was tring to make: EVS can't come to a point where
> it mimics a git server so that you can treat it like one in all regards.
Under normal use you wouldn't be able to tell the difference. You're
talking about corner cases - the normal use case is everyone checks out
from the central server, works with stuff and checks back in. They're
not about to start sending entire repositories to other servers. git
might allow them to stay of the main development tree for a time - if
that's allowed by company policy - but it doesn't really change how they
work.
People use a lot less of version control systems than sometimes forums
like this would have you believe. They're a tool. They don't spend all
day debating the best way to work.. heck, a significant proportion never
even merge in the way you or I would.. the fire up WinMerge, view the
differences and merge manually, then commit the changes without any
merge information. That's the way they like it and they're happy like
that. Us going on about cool new features doesn't affect them in the
slightest (I believe Arthur has worked on ways to track that kind of
merge, but don't know how far he got).
If you get 90% of the functionality right then you cover 99% of the
users. The others are the noisy ones that complain on forums :)
> That is just as true for cvs and svn; a full copy (except for some
> metadata) is just one 'git cvsimport' or 'git svn clone' away.
.. and that would be logged in the central server, and be noticed, along
with IP and time/date.
Pulling down an entire cvs repository is a long process (even more so
for svn). We do it for migrate and it can take many hours.
For git the whole process is streamlined - even expected, so you
wouldn't think anything of someone doing it... so it would be much
harder to nail down one particular user as being the problem.
> Still, I'm amazed at the speed with which git came into existence and
> is running circles around svn (except in the gui department).
I presume git is based on arch, so had an existing system to base itself
around. svn always had its problems (I'm no fan of svn.. even less so
after I implemented the protocol) but is still extremely popular, and
will remain so for some years I expect.
No system will gain the ubiquity that cvs had a few years ago, simply
because there's so much choice now. A few years ago you had SCCS, RCS,
CVS and a whole bunch of expensive commercial ones, most of which didn't
even support concurrent development. It wasn't surprising that CVS
became so popular.
> git versions trees, not files. Hence you can't have file-wise merge arrows,
> and you can't represent them. This is a purposeful difference which affects
> the way you organize projects, as you can't just keep using the cvsnt way.
You'd have to derive them from the changes to the tree, but they're
there since a tree is made up of files. ie. just as you can say 'this
tree is a merge of these two trees' it's equivalent to saying 'the files
in this tree are merges of the files in these two trees'.
> It's broken, actually: http://blogs.open.collab.net/svn/2008/07/subversion-merg.html
Wonder how they screwed that up? I'd have never guessed from the
protocol - although requiring the entire merge history to be sent to the
client rather than just a mergepoint was probably a clue.
(aside: I note the technical language... a pet hate. When I put
mergepoints in cvsnt in 2002 I never used any word more techincal than
the word 'merge'. Even the word mergepoint was originally just a
corruption of branchpoint.. I think the most technical I ever got was
talking about points of equivalence - and that lost half the audience so
I stopped).
>> evs records the merges for all such commits. If the
>> client can't provide them, then.. it couldn't whether the server is evs
>> or anything else, so nothing is lost, it's just a consequence of the
>> choice of client.
>
> Which means that no client will behave the same way as with its
> native server? Or will there be one that actually maps all the
> features of EVS in one?
No that's not what I'm saying at all.. a client will behave as if it was
connected to its native server. Where there are differences they'll be
administrative (wrappers files, etc.).
OTOH if a client doesn't provide a means to store certain metadata, such
as a merge, and evs can't guess it from other sources, then that data
won't be stored. Ultimately that's down to the choice of client. The
server is perfectly capable.
Exactly how similar we are... I think you can get pretty close in cvsnt
and svn at least. Enough so someone that wasn't told it was an evs
server wouldn't know unless they went looking. We're already there with
the cvsnt stuff.. but that's largely because that our heritage and we
understand it better.
One of the things I sometimes say though is we implement the protocol
not the server. Some of the finer details won't be the same.. but the
aim is that the average user doesn't need to care about it. If they can
fire up Eclipse or Tortoise of Visual Studio, and get on with their work
rather than worrying about what's going on in the backend, then the few
differences don't matter.
> No, but if I have a svn repository that makes heavy use of svn:external,
> and EVS doesn't support it, I'm rather unlikely to switch.
That one we haven't done yet.. I don't see much (or any, really) use of
it in the wild. However if a customer really needed it we would
implement it.
The same goes for git support.. nobody's actually asked for it yet. It
hasn't been beyond the discussion stage.. maybe never will, or maybe a
customer will turn up with a 10,000 user order tomorrow and make it a
requirement. I can dream :p
> But you can't commit to each one of them when they are disconnected
> from each other?
Yes you can - it's designed for intermittent/poor connections. If they
were connected all the time anyway you wouldn't need two servers.
> Ehm, nope. He could have given me the patch but then the svn/evs
> commit would carry my name, not his.
Obviously the patch bears the name of the person who does the commit.
If he doesn't have commit rights then it could never have his name,
except perhaps in the comments.
They normal way to handle that kind of thing is to give certain people
their own branch and promote changes from that branch to the development
branch as permission is granted by the admin. That way everything is
recorded - the original change, and who by, with comments, the merge to
dev by the admin, with comments, and the dates that these happened.
Tony
More information about the cvsnt
mailing list