Designing a New Version Control System? 538
tekvov asks: "When Linus Torvalds decided to use BitKeeper as the version control system for Linux there seemed to be a lot of controversy and many challenges to create a better system than CVS. My question is exactly what would this 'better system' look like? How is the subversion project, Tigris, doing at creating a new version control system? Basically, does the Open Source Community need new tools in this aspect of development? And if so, how should these new tools look?"
pretty gui's (Score:3, Funny)
Re:pretty gui's (Score:2)
I must admit it's better than SourceSafe from MS.
Re:pretty gui's (Score:3, Informative)
From a licensing standpoint, they have a problem with the code that validates you. We went through some layoffs and backed off the number of users upon renewal. Even though users didn't exist in the database, the licensing reports said they were there. It took me a few days to demonstrate this was actually happening and get them to admit to it -- don't trust their logs!
Re:pretty gui's (Score:2, Informative)
Re:pretty gui's (Score:2, Insightful)
Shome mishtake? (Score:4, Informative)
Shurely, the Tigris project subversion (http://subversion.tigris.org/)??
Simple answer. (Score:3, Insightful)
You said it, BitKeeper. It's there, it's very good, don't people have anything better to do than nagging about other people just charging for their own work?
If you want to give away your work, please do (I'm happy to use it) but you are not BitMovers (the company) mom and have no business telling them what to do.
Re:Simple answer. (Score:4, Funny)
I nominate:
'ByteLoser'
Who wants to slap up the SourceFarce page and start working on the icon?
We use Perforce at work (Score:5, Interesting)
Re:We use Perforce at work (Score:5, Informative)
And in case you don't like their fortcomming linux GUI (I hadn't heard about that before, thanks WPIDalamar) they do provide you with an API so you can make one of your own (KPerforce ^_^), which shouldn't take that long really.
The pricing seems very high for an individual, but their pricing is real cheap for this kind of software (for companies) and you can use it without a license but then with max two client specifications. They also have good support (something that is not common unfortunatly).
http://www.perforce.com -- go there and check it out. If you hate paying and want to make your own set of tools you can learn a lot from Perforce.
And I agree, source safe is icky, and so is CVS and source offsite. I haven't had a reason to try out BitKeeper so I unfortunatly don't know how it stacks compared to Perforce.
Re:We use Perforce at work (Score:5, Informative)
Re:We use Perforce at work (Score:2, Interesting)
Re:We use Perforce at work (Score:2, Insightful)
Creating a branch is very much like copying all the source to another directory (e.g. you had all your source in mysoft directory, which is your trunk.. when you branch, you copy that to mysoft2 directory and now you have a branch.. best of all, every new branch takes up a miniscule amount of disk space, storing only the files you actually change). And then Perforce supplies you with powerful integration tools to let you synch changes across branches.
It has some flaws, like no version control on client, branch and label specs, so if somebody messes up the definition of a branch, you can't step back to the last version, but otherwise it's an excellent source code management (or whatever the right term is) system.
If anyone's curious about P4, they can read the manual [perforce.com].
Re:We use Perforce at work (Score:3, Informative)
Plus it's so easy to install on a linux server. There's a bit of a learning curve with how the system works but in less than a day you'll be checking in and out and branching without a problem.
Re:We use Perforce at work (Score:2, Informative)
Besides the Emacs integration, there are integrations for Developer Studio, Windows explorer, Perl, Python, Forte, Eclipse, etc. These are all available at Perforce User Interfaces & Integrations [perforce.com].
Re:We use Perforce at work (Score:3, Interesting)
I talked with the p4 staff and they said they would help me do it (tweaking the tools if need be, I assume). I was just a little too nervous, though, about not being able to try it before I committed all those $'s.
To be fair to the conversion tools, I believe since my repository is so old, that the format of the RCS files is slightly different than what would be created today by CVS. Back then, CVS actually used the external RCS programs to operate on the
Re:We use Perforce at work (Score:3, Informative)
Re:Merging Rocks? (Score:3, Informative)
http://www.perforce.com/perforce/branch.html
Which explains the merge process in Perforce.
The choice is clear (Score:5, Funny)
Comment removed (Score:5, Informative)
Re:More open-source revision control systems (Score:2, Interesting)
Re:More open-source revision control systems (Score:2)
Not choosing Microsoft's products is not a shot in one's own foot. It is a shot in theirs.
History repeats itself, and the versioning in
For something so fundamental as version control, it is best to go with proven things: SCCS and CVS are decent and free, and there are companies such as Rational and BitKeeper when you need something decent and not free. Honestly, even something as simple as SCCS and shell scripts can go a long way for small to medium-sized projects with almost no risk that SCCS will suddenly go out of fasion (it's probably 15 to 20 years old by now and still useful).
Re:More open-source revision control systems (Score:4, Informative)
Re:More open-source revision control systems (Score:3, Informative)
Just a minor correction: Stellation is now out, open-source. The
correct website for our open-source project is
http://www.eclipse.org/stellation [eclipse.org].
Re:More open-source revision control systems (Score:4, Informative)
There's also Vesta [vestasys.org], which has some pretty cool features [vestasys.org]
one word: patchsets (Score:3, Interesting)
add that to cvs and make it actually work correctly and it would be pretty good.
at least that's what I miss the most when using cvs - the ability to change several files and commit them at once and when I do an update on a file it sould figure out all the dependencies on all other files ant update those as well. how sould it figure this out? simple - all the files that were commited at one time sould be also updated together, because it is bloody likely that they depend on each other.
of course this process should be repeated on all files that are a part of the patchset so that after updating a single file to a new version all the other files are compatible with it.
and yes, I know this could be theoretically done with tagging but then I would have to tag all files when commiting every time and it still does not handle the case when one file of the patchset depends on some other patchset.
Re:one word: patchsets (Score:2)
Not true. CVS allows you to create the so-called modules, which can be groups of files or a directory. Then you can use commands like `cvs ci modulename' or `cvs co modulename' in order to update/checkout only certain sets of files.
Not sure about your second case, but it sounds more like bad organization than anything else -- have in mind that CVS allows you to create module aliases which refer to groups of modules. Not exactly detecting if a single file in a module depends on files in another module, but still...
Re:one word: patchsets (Score:2)
OK. So when you do cvs update in a directory that has been checked out, CVS is going to update all files that were modified and committed in the repository after the checkout you made in the current directory. Did that make sense?
Here's an example:
[server2]$ cvs co dir1 # check out source code on server2
[server1]$ cvs ci b c # commit b and c on server1
[server1]$ cvs ci a c # commit a and c on server 1
[server2]$ cd dir1; cvs update
cvs server: Updating
U a
U b
U c
All three files that we just committed were updated on server2. If we don't want to update _all_ modified files in a directory, we can specify a module comprised of only the subset of files we're interested in, and work with this subset instead.
object changes on tasks (Score:2, Informative)
One thing must exist (Score:4, Interesting)
Re:One thing must exist (Score:2, Interesting)
The time spent learning an IDE whose scope is pretty narrow is time that could have been spent learning general widely-useful tools, such as vi or emacs, make, and sh.
Like VB6 (Score:2)
Need new languages (Score:5, Interesting)
Most people will probably hate this, but for instance, if a comment for a specific line/block of code always had to appear in a specific area or syntactically consistant way such that the version control system can recognize that if a piece of code changed, but not the comments for that code, it could ask if the comments for the code need to be updated as well. Or if a function's parameters or return value have changed, whether or not all instances/uses of that function have also been changed, etc.
That is not to say that you cannot create a great system on top of existing languages, but that perhaps making some minor tweaks in the language to make the language itself easier to manage/version, then this may open up new tool possibilities.
Re:Need new languages (Score:2, Interesting)
Especially with Java and cvs I am always frustrated that CVS does not know the difference between a
Re:Need new languages (Score:3, Interesting)
I think coders would be a lot better at commenting their code, and writing documentation if it was all integrated.
The ability to easily document a functions purpose, used data, and other information would be nice.
Re:Need new languages (Score:2)
I agree completely. One of the goals of the system that I'm
working on (Stellation [eclipse.org]) is the integration of pluggable
semantic components for particular programming languages.
Our basic idea is that if you don't know the language that
something is written in, you treat it as text, providing all
of the capabilities of a system like ClearCase. But if you
do know the language, take advantage of that support, and
provide extra, language specific capabilities.
-Mark
Re:Need new languages (Score:2)
There is a natural extension to this which is just begging to happen: dependancy analysis and locking and/or approval mechanisms on a sub-file basis.
Essentially, if the SCM can parse the language, it can figure out what its looking at (classes, members, functions, etc), and what other parts of the entire source code use what its looking at.
Combined with an approval mechanism, the potential for code auditing is staggering: audit a function and mark it as such. No function can be considered audited if it calls a function which is not audited. If a function which was audited is updated, all functions which call it (in the new project revision) are no longer considered audited.
Functions and function documentation are audited as a unit. The should be obvious, because the idea of invalidating the stamp of approval on functions which call altered code is based on the idea that pre/post conditions may not have been properly disclosed or checked.
A class cannot be considered audited until all members are audited, and a file requires all contents to be audited.
Implementing a system like this for a languge like Java would not be tremendously difficult; but C++ (especially) is a very complex language to parse and analyse in this manner.
Version control system minimum requirements (Score:5, Interesting)
1. atomic commits - your change happens only if all the
files can be processed. This prevents a corrupted workspace
when CVS processes half your files in a commit and then exits
on an error throwing the other half of your files on the floor.
2. change list management - all commits have a unique
reference number. CVS process files by directory instead of
by workspace, so it is impossible to tell which files are
associated with a commit.
3. access control by workspace or workspace directory - the
ability to give certain users or groups access to certain
workspaces or directories. Ideally, access control can be by
done by bug id.
4. graphical resolve of conflicts - a graphical three-way
diff is the only way to resolve complex conflicts
5. The ability to move files and directories and maintain
file history and label integrity from the client. CVS
requires the whole workspace to be locked so that moves can
be performed on the server side and does not maintain label
integrity.
6. web viewer and graphical difference viewer - the ability
to browse via the web change set lists to see what files
changed and what the actual differences were.
7. the ability to integrate workspaces across projects - the
ability to arbitrarily merge/integrate any source code from
any project to any other project.
8. powerful labeling features (parallel development and
prior version support).
9. rollback or undo multiple changes - this is great way to
recover from a developer commit disaster.
10. multi platform support - must run on all platforms.
11. command line and graphical interface. Command line for
scripts and graphical interface for those who can't work
without it.
12. push and pull notifications - built in support for e-mail
and news group notification of changes in the workspace.
Your humble build servant
Re:Version control system minimum requirements (Score:5, Interesting)
13. Version control on a sub-file granularity.
While I agree that this is a difficult problem, a typical use case is the "split a file" problem, which is supported by none of the available VC systems.
Most renames of files I have seen in large projects are not simple renames, but splits, where a file's code is moved to separate files due to a refactoring. Only one of those files can be associated with the old file using a rename-aware version control system. The revision histories of the functions in the other files are lost.
I don't have experience with implementing version control, so I don't know how solvable this is, but I can dream, no?
C-C
Re:Version control system minimum requirements (Score:2)
Re:Version control system minimum requirements (Score:2, Interesting)
Re:Version control system minimum requirements (Score:2, Insightful)
I'll add a couple things:
Here's a good question that you raised - is a three-way graphical merge really the best way to do a complex merge? I've done a lot of them and it mostly works, but at times it still seems like a sub-optimal solution. Does anyone else have a better system for complex merges that they do?
Re:Version control system minimum requirements (Score:5, Funny)
Re:Version control system minimum requirements (Score:2, Insightful)
By processing the 'commits' as a transaction it guarantees that only one person is committing at a time.
With both 'Transactions' and 'change list management' commits can be rolled back in reverse order to revert the system to any previous state should a major commit (with many files) go wrong.
I think good basic operations would be 'Catch up' (merge changes into local workspace) then you can run tests and check everything is ok. Then the atomic 'Commit'. The system would also needs to check that no other transactions has been processed between the 'Catch Up' and 'Commit', or the developer should be forced to catch up again.
Why do most version control clients have 6 million options but don't contain just these simple 2 operations you want? Probably mainly for historic reasons I guess.
I think the version control system on VisualAge for Java MicroEdition had a system like this called 'Team Streams'.
Re:Version control system minimum requirements (Score:3, Insightful)
Atomic commits -- if perforce can't process all your files in your changelist, it won't submit them. this means if one of hte files in your list is out-of-date with the server version (your revision number is lower than the one on the server, which means you have to resolve the merge) or if you've done something that perforce doesn't like with a file. you can't force it either.
changelist and access control - perforce sets up "clients" which map it's depot on your local computer. you can create as many changelists as you need and as you check out files add them to various change lists, submit one changelist while you have others open, submit some files from a directory and keep others checked out
web viewer/graphical diff - there's a web viewer and the windows version has a diff program.
it does labelling, it supported on EVERYTHING thing (including Mac os pre-X via the Macintosh Programmers Workshop via the Command Line, and OS X via command line)
Re:Version control system minimum requirements (Score:2)
You have to connect to the central database for EVERYTHING. All files are locked until you manually checkout a file. If you have a slow network connection or disconnect periodically, you have to reconnect every time you want to make a change (add a file, edit a file, change attributes on a file, see what files have changed, etc).
For open source development this can be a major problem.
Further, a centralized database can be problematic for separate development trees (not branches). The best you can do is copy the database to a new machine and run from there.
One feature I like of "arch" is that you can have decentralized development with independent trees/databases, and merge them back into the main database at a later date. There are several frustrations/limitations with arch so I'm not recommending it, just showing that someone else has solved this problem.
In general, I like CVS's (and arch's) view-private meta-data which allows a subset of operations to be performed. Not least of which is which files have been changed,and the ability to modify files without central authority. Other than that, I like just about all the features of perforce.
Re:Version control system minimum requirements (Score:3, Informative)
A couple other posts have mentioned Vesta [vestasys.org], which goes a long way towards meeting the requirements you lay out. (For the sake of disclosure, it's only fair to mention that I am currently the primary maintainer of Vesta, and am somewhat responsible for getting it released as free software.)
Vesta absolutely does this.
Vesta does not explicitly provide this, however it's very easy to get with a simple diff command. The Vesta repository has a filesystem interface which makes it possible to directly access all versions past and present. A simple diff -r will show exactly what changed between any two versions. The also has other fun uses (e.g. greping across versions).
Vesta's access controls are essentially UNIX file permissions. Through the repository's filesystem interface, you can control who can read and write (commit new versions) at a variety of granularities with chown, chgrp, and chmod.
Vesta provides no direct help here, but again, because of the filesystem interface to the repository, it's easy to apply standalone diff/merge/conflict resolution tools.
Vesta's unit of version control is a directory. Between versions, files and subdirectories can be added, removed, renamed, etc.
Not built-in, but already implemented on top [scooter.cx].
Vesta includes sophisticated cross-site features, including replication and remote checkout/checkin. It's been successfully applied before by a team spread across the US east and west coasts with hundreds of megabytes of sources.
Vesta really shines in these areas. Vesta is also a build tool, and every build neccessarily includes a complete specification of the set of immutable versions it uses. Builds are also themselves immutably versioned. This makes it easy to determine which source componenets have changed between two versions of a build. Also, since it's as easy to select any historical version as it is the latest one, rolling back changes is trivial.
We're still working on it (at the moment just Linux and Tru64 work), but hey, it's free software, and we'd love to have more developers/porters.
At this point there's a command-line interface and some rudimentary support for repository operations in the web interface [scooter.cx]. Again, it's free software, and we'd love to have somebody contribute more layered tools.
Nothing built-in yet, but we've been talking about doing it, and it may happen soon.
There's a short summary of Vesta's excellent capabilities on it's web site [vestasys.org] (which includes several points not mentioned here), that I would recommend anybody interested in better version control/configuration management check out.
some thoughts (Score:3, Insightful)
Generally speaking, stuff like commit emails need the addition of specific wrappers (see http://cvsreport.sourceforge.net for instance), and CVS doesn't scale well to big projects
It's quite usable
Yes, it is time for a new tool... (Score:5, Informative)
And if that doesn't convince you, well, it's not for nothing that some of the primary developers of CVS are now working on subversion.
Now, of the new crop of tools, the only one I've played with extensively is subversion---but I am absolutely blown away by how well it seems to make common operations simple. Even with its documentation in a very rough state, and despite its many architectural differences from CVS (with which I have several years of experience), I was able to figure out how to maintain a vendor branch and local modifications, perform updates on both, merge them, tag releases, etc., very quickly and easily. Its developers have obviously looked at CVS to see what things it does not do well that people do frequently, and designed accordingly.
Is subversion for you? Who knows. But if you use CVS a lot---especially if you find yourself cursing CVS a lot---you should do yourself a favor and look at some of the alternatives. A lot of lessons have been learned, and you should avail yourself of the benefits.
Re:Yes, it is time for a new tool... (Score:2, Funny)
Can you back this up? I'm interested to see.
I have to admit I'm biased to CVS. I love it so much that I used to sleep with a floppy containing the binary under my pillow for a month. (ok slight exageration).
Anyway I see a big breach in the "open source" way of doing things. In the past a simple project would grow as needed. If features didn't exists or bugs were around. Someone would fix it.
CVS has been the de facto standard for version control in the "open source" community especially in say SourceForge. Now it's being abandoned like a poor basterd child. I would like to see just why a proven software that in many ways is one of the best, known to out beat VSS the lord and ruler (MicroSoft), is now now a heap of garbage not worthy of the "open source" way of collaborative enhanchments.
Instead of throwing it away reuse it. If RCS isn't possible rewrite it. Convert CVS to a new and better way. But why destroy the one faithfull servent because it's old or doesn't live up to expectstions. We're smart people. If Linux had the same problem would we abandon it at a whim? No, I'd like to belive we would make it better. Did the GIMP give up when they were faced with a crappy Windows ToolKit?
It sounds as if it is a tempermental thing that many people are assamed of the CVS name. I, who belives in CVS and sometimes worships CVS; who in my many years of administration have never seen a problem can't fathom why it would be so ridiculed and persicuted in a world that pride themselves on co-operation and "freedom" to enhance and superiorize software at will. A huge efort to give CVS up is underway and no effort to bring CVS to the top of the ladder. It seems counter productive and contrary to what "free software" or "open source" ideals used to be.
I think the question is wrong (Score:4, Insightful)
Now, what an ideal system would be? I don't think one size fit all. You need very quick local net access (bye bye CC), and you need infrequently, losely connected internet developpers. But not at the same time. So I don't think tere is one unique response to your question.
From my perespective:Need Windows Support (Score:4, Insightful)
Re:From my perespective:Need Windows Support (Score:3, Informative)
There is quite a mature native Windows port of cvs [cvsnt.org] that we've been using for quite some time.
john
Re:From my perespective:Need Windows Support (Score:3, Informative)
Key Feature: directory awareness (Score:5, Informative)
There's a big difference between (Score:4, Interesting)
Everytime a version control system tries to combine things you run into problems. Take the GUI version of PVCS, which called Projects a collection of files (from different directories) -- which ended up enforcing that all filenames had to be unique, even if in different directories. And what they call Views is actually a subset of the list of available filenames.
Ever get the idea developers are so into archiving versions of a file that they gloss over the fact the file organization itself is a structure that also needs preserving?
Look to ClearCase for some pointers (Score:5, Informative)
However ClearCase has some -very- good features, and here is what I would arrive at (ideally):
1) Make your repository a mountable file system, supporting multiple types of connection, NFS, SMB, Active Directory, FTP, etc.. When connecting you must specify a profile to be used.
2) Make every user have a number of profiles (Min:1) (like ClearCase views), these profiles contain -all- the info needed to access file versions correctly. They should allow sharing ('base my profile X on the profile Y created by user Z'). And support concepts such as labelling, conditional branching, etc..
3) All profiles are managed from a central server (redundancy?) via a web interface (to achive cross-platform conformity) and command-line interface (SSH based) for scripting/power-users.
I could go on forever, but I think the three above points are the things that matter most to me. Obviously you also need security, administration, storage, etc.. but I think that making files available simultaneously via many common file sharing protocols would produce the greatest benefit.
Finally: MAKE DIRECTORIES VERSIONABLE/BRANCHABLE!, yes it causes some potential headaches, but it's benefits easily outweigh them.
Re:Look to ClearCase for some pointers (Score:2)
As someone pointed out, many of the types of issues questioned in this tread are configuration management issues, not version control issues. Case in point, as powerful as clearcase was, we developed a MASSIVE set of wrapper scripts to automate many regular and complex tasks. These scripts would have been portable to many styles of version control (though probably not CVS).
The main thing I didn't like about clearcase was it's dependence on the central server. I personally hate operating off mounted file systems. They're great for sharing info, but I've flat out refused to make my home directory nfs'd for a good reason.. It's slow and unreliable. There's always a point where something goes wrong or some administration is going on behind the scenes, and your desktop freezes. Likewise compilations are many times slower due to massive accesses to medium to small sized files.
It is great for administrators though.. Backups are a sinch (since distributed data is all really stored centrally). It's also somewhat scalable since you can have separate servers perform different functions.
It is expensive, however; both in licensing and hardware.
My 10b cents.
-Michael
Two different useage models (Score:2, Informative)
I think in designing a source control system you have to be aware that there are two different usage models.
CVS has been designed and mostly used for the latter. Tools like SourceSafe and Clearcase were designed, and are almost exclusively used for the former.
One of the obvious differences in approach is file locking on checkout. Obviously there are others as well.
I don't see any reason why one tool could address both models, with suitable ruleset configuration for the administrator. But you have to recognise, and design for, one or the other or both models from the start.
How many features are needed? (Score:2, Insightful)
Trying to maintain a huge source database with hundreds of developers is basically impossible if there isn't a well established team structure with source managers. When there are fewer than 6 developers working on the same project, it is fairly smoothe. With 12 or more developers, it gets exponentially harder to figure what's going on. Unless there are very few check-ins or changes and the source is in maintenance mode.
In active development phase, there may be dozens to hundreds of checkin's and changes per day, which may cause an unknown number of effects. It doesn't matter which development style you use, because in the end it comes down to whether or not the product is divided into small manageable chunks. Distributed development is a management artform and very few managers know how to do it effectively. I would put forth the idea that the tool for source management is really only 20% of the equation of distributed development/source management. Trying to address the problem by focusing on the symptons isn't a solution to the real cause of the illness.
10 problems with CVS (Score:5, Interesting)
2. Updates don't always work as expected. They won't grab new directories and a few other quirky things.
3. Empty directories should be pruned by default in a checkout or update.
4. I'm tired of seeing a CVS directory everywhere I look. How about
5. Access control is poorly handled. It's good that you can map virtual user names, but it would also be useful to control access by groups.
6. Local CVS tree file ownership is by user, not the CVS owner. This opens up all manner of problems for users with a local CVS repository. Repository data should be in a non-user account, checkout should force authentication, and the server should handle who has access to what. This would not be tremendously hard to manage, since in the general case a user has access to a project or not. Fine-grained access control of the repository isn't a common necessity.
7. Plays badly with (most) IDEs. When I want to work on a project in an IDE, it floods my checked out directories with all manner of crap I don't want in the repository. You can set up refuse files to clean these out, but it might break your IDE project. This is more a fault of IDEs than CVS, really.
8. Needs smarter add functionality. I don't like writing stuff like 'find
9. CVS is a boring acronym.
10. I can't think of a tenth thing.
Requirements of a decent version control system (Score:2)
What Exactly IS Wrong With CVS? (Score:5, Interesting)
Re:What Exactly IS Wrong With CVS? (Score:2)
Re:What Exactly IS Wrong With CVS? (Score:5, Interesting)
But a couple of day-to-day common tasks are painful (or just plain impossible).
Personally, sharing source files across multiple projects is a real pain. We do it with soft links in the repository (gag) so it can be done, but it's ugly.
Let's say you want to reorganize your directory structure without screwing up your history. Well, that's hard to do with CVS, so instead we'll just let the organization continue to be cluttered and confusing.
Heck, let's say you just want to rename a file, let alone a directory:
cp foo.c bar.c
cvs add bar.c
cvs remove -f foo.c
cvs ci -m "renamed foo.c to bar.c"
It just gets really annoying, and now bar.c can't be reverted version-wise unless you KNOW that its previous contents were in foo.c. It's a manual, error-prone, and tedious process if you ever need to do that.
I've been running a subversion server for months now just to test out. I can't wait to move to it. I like being able to say:
svn mv foo.c bar.c
svn ci -m "renamed foo.c bar.c"
and keep my history intact.In fact, writing this makes me want to just start migrating stuff by hand today! Subversion's important bugs (it is still alpha I think, it's slashdotted so I can't check the status as of right now) are almost all in features that CVS doesn't have anyway.
That said, I haven't really tried any of the other open source projects such as arch which have similar features. The main draw of subversion for me is the fact that I had to learn almost nothing to use it. As an experienced CVS user, subversion is trivial to learn. The effort they have put in to keeping things the same as long as there is no good reason to do otherwise is well-spent (at least from my point of view).
Plus, the subversion code is super readable and well-commented--honestly the best source I've seen.
Re:What Exactly IS Wrong With CVS? (Score:2, Insightful)
For example:
Lets say you are working on a large project 20 or so developers. And you create a little utility class for the area you are working in. You check in the code to your module (or package ) and use it. A few of you buddies are running into some problems that your utility can solve so the end up using the class. Now a few months later a large amount of code now uses your little utility, and the leads want to move your class to the global utility package. Tools [intellij.com] exist that can quickly move the class and change all of the references that use that class. But to check in this change is a nightmare.
The thing is in Java this type of operation is common, and is good for the project (keeps the code clean). But until a version control system has proper code refactoring support it will always be hard to do.
Re:What Exactly IS Wrong With CVS? (Score:2)
BTW, one thing that can help is to use a GUI interface to CVS. Eclipse integrates with CVS, and on Windows, WinCVS does a good job.
Too Complex (Score:2)
Why "The Open Source Community?" (Score:3, Interesting)
Why only ask about the open source community. Do programmers need new configuration management tools?
CVS works fine for me. BitKeeper seems nice too. What I hate is that there's so much controversy just because BitKeeper isn't open source.
I once started coding a version control system... (Score:3, Funny)
I've never seen my code since...
The Problem Is... (Score:2)
I haven't looked at all of the new revision control systems, but they all seem to be evolutionary modifications rather than revolutionary changes to how things are done.
I don't think we'll see a truly successful next-generation revision control system until somebody tackles the problem from the ground up in an imaginative way.
Re:The Problem Is... (Score:2)
Take a look at Stellation. [eclipse.org]
Our long-term goal is to fundamentally
change the way that programmers view and store thier code.
If you want to use a CVS lookalike, Stellation can do that. But
in its full-blown form, source files become an illusion. You can
still edit them, save them, etc... But the versioning is happening
at a finer grain. Refactor your code to move a method, and Stellation
preserves the full history of that method. Need to look at a bunch
of code that's scattered through many files? Issue a query to generate
a file containing exactly what you want to see. Edit it there,
and then when you commit the change, it shows up in all of the
other files where that code lives.
-Mark
Specific File Types (Score:2)
I would love this: (Score:3, Interesting)
Of course a strict bug submission policy would be required to make this possible, but surely something like this could be done?
An added benefit would be clearer bug submissions which would help development to no end...
Look at VESTA (Score:2, Interesting)
It is also easy to work concurrently.
I believe that you can also do the following: User X checks out and edits file A.
User Y checks out and edits file B.
User X calls user Y to test file A's changes with file B's changes.
User Y tells vesta to build with the checked out version (X's checkout) of file A.
User Y builds and tests the two edits together.
One other important feature for large projects is that Vesta intelligently caches created files. So, if User X and Y are working on the same project, then they can save on compile time by only creating files once and sharing them if possible. This is a necessary feature in large projects.
Anyhow, check out the webpage at http://vesta.sourceforge.net.
Yet Another useless discussion about CVS. (Score:5, Informative)
Yes, King.
I would not hesitate to say that it has it's share of difficulties, but there is no way anything is going to replace it anytime soon. There are many meta-features of CVS that make it unable to be replaced:
1. Multi-platform: I don't mean 3 or 4 or even 5 or 6, bla bla bla. I mean EVERYWHERE. I've seen CVS on more places that anything besides emacs and gcc. And really, anyplace gcc or emacs goes, cvs is the third guy there.
2. Massive Acceptance: CVS is everywhere. 10 million people use it with sourceforge. Another few million elsewhere. It is the common thread that binds us together (kinda like the force!)
3. Massive, Massive Tool support: This is my favorite. You can use it about a hundred different ways. Not 1 gui, but 50!. It goes into command line apps like great!. Show me another tool that has integration with the windows explorer (via TortoiseCVS) like it has. You Can't. (Don't even try that god-awful Bitkeeper's integration:yuk!)
4. SimplicityIt's REALLY simple to use. It's not that complicated. If CVS throws you for a loop, maybe software devleopment really isn't where you should be working. The incompetence among developers is what makes all software look bad.
5. Protocols: You can run CVS thru SSH, RSH, PServer, File Access, and more... It fits into every environment. It works across any damn network. It can jump tall buildings in a single bound!
Really, until someone makes something that trounces CVS in all those areas, AND provides features that "I can't live without" CVS will Rule.
Re:Yet Another useless discussion about CVS. (Score:3, Funny)
Look, Windows is king.
Yes, King.
I would not hesitate to say that it has it's share of difficulties, but there is no way anything is going to replace it anytime soon. There are many meta-features of Windows that make it unable to be replaced:
1. Massive Acceptance: Windows is everywhere. 50 million people use it every day. Another few million elsewhere. It is the common thread that pulls us apart (kinda like the government!)
2. Massive, Massive Application support: This is my favorite. You can use it about a hundred different ways. Not 1 gui, but 500000!. It doesn't have command line apps, like great!. Show me another OS that has integration with the windows explorer like it has. You Can't. (Don't even try that god-awful WINE's integration:yuk!)
3. SimplicityIt's REALLY simple to use. It's not that complicated. If Windows throws you for a loop, maybe anything involving computers really isn't where you should be working. The incompetence among users is what makes all software look bad.
4. Protocols: You can run Windows with SSH, RSH, SMB, File Access, and more... It fits into every environment. It works across any damn network. It can jump tall buildings in a single bound!
Really, until someone makes something that trounces Windows in all those areas, AND provides features that "I can't live without" Windows will Rule.
This is NOT a troll. 100,000 lemmings CAN be wrong.
burn some karma (Score:2)
RCS: primitive, but ok
CVS: hated it. hate, hate, hate automatic merges; don't trust 'em. And WinCVS...man, my Milton's Ant Farm had fewer bugs.
VSS: not bad, actually. I love file locking, it seems pretty easy to tag various milestone releases, a reasonably clean interface, and easy access to pretty much everything I want to do. Some quirks but nothing major, very usable.
ClearCase: jury's still out but so far I don't like. Very complex and proccess heavy; it's out to be the manager's buddy, not the engineer's. Everything has to be done in the context of a distict "activity" (plus we've had some trouble settling on rules for if a checkin automatically closes the said activity...) and concepts like "VOBs" and "Integration streams" and "development streams" are hard to keep your head around. And it's slow and generally process heavy.
EveryOnceInAWhileCopyEverythingToABackupDir: this is the one I usuaslly end up with when I'm on my own.
CVS much better than nothing (Score:2)
When things cool down (yeah, right), I'll look at the other projects. Until then, I'll live reasonably happily with CVS.
When I first read the story title... (Score:3, Funny)
Can you hear me now? Good...
What about Aegis? (Score:4, Informative)
Every time the issue of version control and source code management comes up here, I've never seen anyone mention Aegis [sourceforge.net], which appears to have been designed to address the missing functionality in tools such as CVS which focus solely or mostly on simply maintaining multiple versions of a source base concurrently. Here's an excerpt from the CVS comparison in the CVS Transition Guide [sourceforge.net]:
1.5.1. Why should I change from CVS to Aegis?
The software seems to be pretty mature (currently at version 4.5, first released in 1991). Has anyone here used it?
Subversion limitations (Score:2)
Re:Subversion limitations (Score:3, Informative)
Subversion is, basically, changeset based. Their storage model is a bit.... wierd. But they capture the set of changes in a checkin
as a single, atomic change unit.
On the other hand, when we started implementing Stellation, we used PRCS. To say that it's a frustating, annoying, glitchy mess
is an epic understatement. When we finally moved to self-hosting
(inside IBM; we don't yet have strong enough access control to
put up a public Stellation server, so we shadow our internal
repos to an external CVS for the moment), it was an enormous
relief.
PRCS generates thousands upon thousands of unnecessary questions,
phrased in obtuse and easily misinterpreted ways. It requires you
to manually maintain the map between filenames and repository
artifacts, by manually editing a cryptic configuration file. It
constantly mucks up that configure file, adding hundreds of carriage
returns for no apparent reason. Echh. The versioning model
is very nice; the implementation is solid, but frustrating.
-Mark
One word (Score:4, Informative)
SpeeDev anybody? (Score:2)
The product demo was impressive. Seems to a complete SCM tool. The problem with most source code tools like SourceForge and CVS is that they don't really address the entire SCM process in one integrated tool. Why is that? What tools to you use for Requirements tracking? Defect tracking? Testing?
Get rid of the file system completely - simplify! (Score:5, Interesting)
Let's get rid of the file system/directory stucture schema and go with a completely revamped code storage method.
This has a ton of implications, but one thing that everyone seems to ask for that is difficult to solve on the old model is easy to work with if you remove the files and directories - sub-file VC. Being able to move modules from file to file, split files, move directories, etc.
The files and directories are there to help us understand the structure of the project, they were not meant to dictate the structure to us. We've locked ourselves into them so much so that we can't restructure the project without losing a lot of the benefits of VC.
Let's stuff our code into a database (which is like a more powerful file system, if you can't get your head around the idea). Atom updates can be built in. Symlinks are simple. Shifting a piece fo code to another 'file' is simple and the VC is not lost.
I can't be the first person to have thought of this - why hasn't it been done? Possible cons are:
Until the compilers and IDEs understand the new schema (regarding header files, includes, etc) the VC will also have to provide scripts to combine portions of code into files that the compilers can use.
How do we store the data in the database - it would depend largely on the language. Would we put a function in a blob of a record, or maybe even do line by line records. In highly OO languages (java) we could structure the database so there are class records that link to member records that link to variable and function records, etc.
Eventually the toolchains will attach to the DB directly.
Consider how this would aid huge and tiny projects alike.
I swear, the sooner we get rid of the file system (as is) the better - not just for this, but for all our information. But let's not get ahead of ourselves.
-Adam
Re:Get rid of the file system completely - simplif (Score:3, Interesting)
That's part of what we're doing in Stellation [eclipse.org]. Our basic
view is that source files combine storage and organization
in unfortunate ways. So we want to break that linkage: code
lives in the database, stored as small pieces. Pseudo-files
are generated to give you organizational views of the system.
Because storage and organization are distinct, there's
no reason that a given chunk of code can't be viewed in multiple
pseudo-files.
The big catch is that there
are an awful lot of very useful tools out there, and they're
not going to give up their filesystems overnight. So you need
to be able to both discard the file notion when it's appropriate,
but at the same time to preserve the ability to use a filesystem
when necessary. Stellation pseudo files can always be exported
into a real filesystem to work with tools that don't understand
it's database storage model.
-Mark
Aegis (Score:2, Informative)
Aegis enforces a development process which requires that change sets ``work'' before they may be integrated into the project baseline. Works includes requiring that change sets build successfully, and (optionally) that they include and pass tests. It also ensures that code reviews have been performed.
Re:Clearcase... (Score:5, Informative)
(Try scaling a clearcase server and you'll see how bad the design is... Hint: Adding more CPUs won't help you.) No, most people won't care, but you do if you need to scale it to several thousands of active developers.
Even though I dislike the product, its has more functions than you'll ever need. Integration with different platforms and products are superb, if you're willing to pay...
However it lacks in areas where the developer isn't fully connected (i.e. with LAN access to the view and vob servers).
IMNHO, what the open source community, by definition, needs is something that'll work in a distributed (and disconnected) environment. Clearcase does NOT come even close to delivering that, CVS does, but functionality wise, BitKeeper blows them both away.
I haven't looked at SubVersion in a long time (before it was self hosting) and it looked promising, but IIRC it lacked some of the more advanced functionality that BitKeeper has.
Personally I'd much prefere using a completely free version. Not because I don't like to support the BitKeeper team (I'll buy the product if I use it commercially!), but because of the open logging function.
It just comes down to the fact that I like my privacy...
-oswa
Re:Clearcase... (Score:2, Informative)
Re:Clearcase... (Score:2)
Clearcase scales well across multiple projects (well, DUHH!), but not well within a project.
Been there, done that.
Re:Clearcase... (Score:2, Interesting)
ClearCASE rocks in terms of scriptability, built-in triggers, etc. Also I much prefer branching individual files and using views, to the typical Open Source CM scheme of having separate trees. Too bad that the ClearCASE *nix GUI has gotten progressively worse for two major releases since their high-water mark (IMHO), ClearCASE 2.1. They've never fixed the problem where sometimes you click to select a version and it looks selected but isn't really, and in many cases have introduced GUI bugs, made the whole thing slower by using a special "properties browser", etc. I have a bunch of hacks in ~/.grp to get it customized back to the way that it used to work so that it's even halfway usable.
Re:Clearcase... (Score:2, Informative)
Of course, corporate policy forbids us to use CVS.
Re:Clearcase... (Score:2)
Re:Clearcase...sucks! (Score:2, Informative)
Like in in many other areas of sw development, simplicity is often the best choice you can ever make. CVS is simple. It works. It's easy to audit, it's really cross platform and with so many OSS projects using it, it's worth learning the 5 or 6 commands you'll ever need. The thing that the cvs documentation explains really well is that the key to successful CM lies no in the tool but in the processes and the communication between team members.
Re:Clearcase...sucks! (Score:2)
You roll your own when you really want for fork something off the main branch and need to preferentially select your changes over mainstream development.
You get into trouble when you have inexperienced Clearcase admins not knowing what they're doing (and this is understandable, given the learning curve steepness), or worse, developers left to their own devices.
Clearcase really is a tool for a team lead to use to manage the various forks of their project.
Re:Locking files, maybe? (Score:2, Insightful)
CVS does handle locks. It is based off of RCS, which uses locks. The option wasn't removed, just made hard to find. Look at the admin command. Locks are requrired when you have concerent development on binary files, which can't be merged.
Useing locks on text files is normally counter-productive.
C 113
...
http://www.cvshome.org/docs/manual/cvs_16.html#SE
-l[rev]
Lock the revision with number rev. If a branch is given, lock the latest revision on that branch. If rev is omitted, lock the latest revision on the default branch. There can be no space between `-l' and its argument.
-L
Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with CVS, strict locking must be set; see the discussion under the `-l' option above.
Using Inertia (Score:2)
Consultants usually argue that new doesn't work (a solid trend in hisotry), but we try it any way because of hope this time it may be different. And it usually isn't.
By Linus making this decision, he's effectively forcing a user base, and there by excercising the SCM tool fairly heavily.
Lots of usage, combined with small, incremental revision, is the best way to get controlled quality. Since the product is "new," people are going to be more likely to stand up and rattle a little louder when request a fix.
At the 50,000ft view, this may be the way Linus gets a SCM system of decent quality that operates the way he thinks it should. Frankly, I can't say that's a bad thing.
Let your input be your output (Score:2)
That's because they have a personal invested interest in what gets produced, and that's a strong motivation for fixing problems.
One should only be allowed to pollute upsteam.
Re:Any one used Vesta? (Score:3, Informative)
I can only assume you're talking about some other Vesta from the one I'm familiar with [vestasys.org], because: