[LLVMdev] Version Control Upgrade?
John Criswell
criswell at cs.uiuc.edu
Mon Jan 10 09:29:53 PST 2005
Reid Spencer wrote:
> John,
>
> Here's my list:
>
> 1. CVS is slow. Many of the other tools do bi-directional binary deltas
> on file changes they are transmitting. This is basically the technology
> that makes rsync so fast. CVS doesn't do this. Probably not a big deal
> when you're working at UIUC but its CRUCIAL when I'm on the road working
> from a hotel or airport wi-fi connection.
>
> 2. Related to 1 is diff speed. Subversion, at least, keeps a local copy
> of the original (unmodified) version of each file. This makes "svn diff"
> instantaneous and doesn't require it to go over the wire. That also
> helps make the server more scalable as it off loads work from the
> server.
>
> 3. CVS doesn't have atomic commits or the notion of a change set. This
> has bitten me several times when I'm doing a large commit .. users
> update and get .h files out of sync with .cpp files or other
> inconsistencies. That never happens with the tools that support atomic
> commit (most of them).
Okay. I guess this is happening because our CVS server is much slower
for you than it is for me, which is why I never have this problem. So
this is more important than I thought.
>
> 4. As you mentioned, file & directory copy/move aren't supported in CVS.
> This is a pain at times as I have to contact someone at UIUC to "copy
> the ,v file". This bit me over the holidays as no one at UIUC was
> available for a day or two. I'm sure you'd all rather not have to deal
> with such requests. Chris ends up taking the brunt of these requests.
> Many of the other tools support moving and copying files around.
Agreed. This is a pain, and I forgot that you can't just move stuff
around like we can here.
>
> 5. CVS doesn't support distributed development well. Tools such as Arch
> and Monotone work on a peer-to-peer basis. No one computer is "the
> repository". If the CVS server should ever go down (heaven forbid), we'd
> all be out of luck. With a peer-to-peer we'd just switch to the most
> relevant/up-to-date other repository. This also allows you to take the
> repository with you when you travel and still be able to
> commit/diff/checkout while not connected to a network. When you get back
> you can synchronize with the rest of the world and all your commits will
> be rolled into the other repositories. Note that Subversion has limited
> support for this via the svn-push and SVN::Mirror utilities. These
> essentially keep two repositories in synch. Not sure how scalable that
> is.
How important do you (and others) feel this feature is?
>
> 6. Authorization. Arch/Monotone/Subversion/Perforce all have fine
> grained authorization (permission) features. CVS does not. This means we
> can't say, "user xyz is given write access only in lib/System" .. we
> either give them write access to the whole repository (or a module) or
> not at all.
Agreed, but has this posed a serious enough problem (or do we forsee it
becoming a serious problem)? I tend to doubt that we'll be segmenting
access to various pieces of the LLVM codebase.
>
> 7. Authentication. CVS passwords are notoriously easy to crack and
> shipped over the net in plaintext when using pserver. Using SSH would
> help but that means giving every developer a login account on the CVS
> server. I'm sure UIUC doesn't want to do that. I'm not sure about the
> others but Subversion handles this really well via that WebDAV
> (Distributed Authoring and Versioning) Apache plug-in. All requests go
> via HTTP and the web servers authorization and authentication mechanisms
> can be used. This also helps with getting around firewalls.
So far this hasn't posed a serious problem, but as we get more external
developers, it will. And the firewall note is also a good point.
Thanks.
-- John T.
>
> My $0.02 worth.
>
> Reid.
>
> On Mon, 2005-01-10 at 07:52, John Criswell wrote:
>
>>Reid Spencer wrote:
>>
>>>LLVMers,
>>>
>>>The oversight group has been kicking around the idea of getting a better
>>>version control system than CVS. The problem is, we're not quite sure
>>>what "better" means. So, we thought we'd ask your opinions.
>>
>>I think before we begin discussing which software to use, we should
>>discuss what is really wrong with CVS (on a day to day basis) and how
>>important it is to fix it (and I apologize if it has been discussed; I
>>just haven't seen it discussed in this thread).
>>
>> From all the features listed below, file/directory renames and moves
>>are the only missing feature that, to me, warrants changing to another
>>program (and maybe access control, but I haven't looked into that much).
>> Everything else looks like something that would be nice to have, but
>>isn't critical.
>>
>>So, what exactly are people finding wrong with CVS on a day to day
>>basis, and is it important enough to fix it (fixing it will mean that
>>users will need to download a new program to use the repository, which
>>is a disincentive to using LLVM)?
>>
>>-- John T.
>>
>>
>>>If you're interested in this topic (and you should be if you're actively
>>>developing), please have a look at this site:
>>>_http://better-scm.berlios.de/comparison/comparison.html_
>>><http://better-scm.berlios.de/comparison/comparison.html#move> It has
>>>quite a nice comparison of key features that we're interested in. Some
>>>of the features we think are important are shown in the list below. The
>>>text in square brackets is the corresponding item at the comparison site.
>>>
>>> * [Atomic Commit] - all changed files in a change set get committed
>>> or none of them do.
>>> * [Repository Permissions] - control read/write access to the
>>> repository on a per-user basis, preferably allowing the
>>> authentication to be hooked into an apache server (like mod_webdav).
>>> * [Files and Directories Moves or Renames] - make sure moves and
>>> renames of both files and directories are tracked as well as edits.
>>> * [Remote Repository Replication] - ability to clone a repository
>>> and "take it with you" so you can commit changes while
>>> disconnected from the network. This supports distributed development.
>>> * [Change set support]. Groups together related changes in multiple
>>> files as a logical "change set". This helps when you need to back
>>> out (revert) a change or the change needs to be propagated to
>>> another repository because all the related changes are managed as
>>> a group.
>>> * [Tracking Line-wise File History] - basically support stuff like
>>> cvs annotate to see who modified the file and when on a
>>> line-by-line basis.
>>>
>>>
>>>Of the tools available, it seems that only subversion, arch, and
>>>monotone are suitable for our purposes. But, we'd love to hear your
>>>thoughts; especially if you have first-hand experience with these tools.
>>>
>>>Thanks in advance,
>>>
>>>Reid
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>_______________________________________________
>>>LLVM Developers mailing list
>>>LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>>http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>_______________________________________________
>>LLVM Developers mailing list
>>LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>------------------------------------------------------------------------
>>
>>_______________________________________________
>>LLVM Developers mailing list
>>LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list