Slashdot Mirror


Designing a New Version Control System?

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?"

18 of 536 comments (clear)

  1. We use Perforce at work by WPIDalamar · · Score: 5, Interesting

    I've used CVS and Visual Source Safe (ick) before. But at my current job we use Perforce (a commercial product) and it rocks. There's clients for just about every known platform, a slick graphical GUI for windows (and they're working on a linux one), and there's this local webserver gui that works for all the platforms if you need something graphical to look at. The interfact to it rocks, the merging and branching rocks, and it is super flexible. We have some scripts set up so we can close bugs in our bugzilla database from some special tags in the description of a changelist (a changelist is what gets submitted when you check stuff back in).

    1. Re:We use Perforce at work by forgoil · · Score: 5, Informative

      I agree, Perforce is a very solid product indeed. And all the commandline tools are there for Linux, and so are the servers. I've used it both on Windows and Linux (both servers and clients) and it works like a charm.

      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.

    2. Re:We use Perforce at work by digerata · · Score: 5, Informative

      Also, they do open source licensing. If you are a certified open source project (I guess they just checkout the project???), you can get licenses for free.

      --

      1;
  2. The choice is clear by BoBaBrain · · Score: 5, Funny

    Shouldn't we just use whatever source control system the CVS developers use?

    --
    I am a Karma Library.
  3. More open-source revision control systems by dglo · · Score: 5, Informative

    Subversion isn't the only open-source revision control system out there. Check out these projects as well:
    OpenCM
    arch
    Stellation
    PRCS

  4. Need new languages by Bookwyrm · · Score: 5, Interesting

    Probably to make the 'next leap', so to speak, in version control systems for programming is to design or modify a language so it is more version control friendly, or add much more language-sensitivity to the version control system.

    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.

  5. Version control system minimum requirements by Anonymous Coward · · Score: 5, Interesting

    IMHO, these are the bare minumum requirements:

    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 :-)

    1. Re:Version control system minimum requirements by C-C · · Score: 5, Interesting

      While I agree pretty much with the anonymous post above (which suspiciously matches with BitKeeper's features :-), at least one thing is missing:

      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

    2. Re:Version control system minimum requirements by Mika_Lindman · · Score: 5, Funny

      13. allows version numbers larger than 1. I'm tired of all open source being with version numbers like 0.997

  6. Yes, it is time for a new tool... by mdorman · · Score: 5, Informative

    Regardless of where your particular alliegances lie---whether it be with arch or subversion or opencms or bitkeeper or whatever---it does seem obvious that the open source community is asking things of CVS that it is just not able to deliver. One need only look at some of the problems large projects like GCC have with it to realize that some alternative is needed.

    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.

    --
    Urgle.
  7. Re:Clearcase... by Anonymous Coward · · Score: 5, Informative

    Clearcase might cut it for most corporate types. Sure it's got tons of features, but you'll get a groetesque design and a bad implementation for free.
    (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

  8. Key Feature: directory awareness by antony · · Score: 5, Informative
    The most serious flaw in CVS, IMO, and the most important feature to address in any new system, is CVS's total lack of understanding of directories. If you ever want to change the structure of your CVS controlled source tree, you either have to:
    • fake out CVS by doing a remove/add pair on every file you want to move (which means you lose the revision history of each such file!), or
    • manually move files around in the repository (which entirely defeats the purpose of using a revision control system in the first place!)
    If anyone out there creates a successor to CVS, please fix this fatal flaw!
  9. Look to ClearCase for some pointers by EasyTarget · · Score: 5, Informative

    I'm a ClearCase specialist so I'm biased.

    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.

    --
    "Oops, I always forget the purpose of competition is to divide people into winners and losers." - Hobbes
  10. 10 problems with CVS by j1mmy · · Score: 5, Interesting

    1. Documentation is piss-poor. There's an easy solution to that one, but nobody likes writing documentation.

    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 .CVS instead?

    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 ./src/ -name "*.java" | xargs -n 100 | cvs add' just to hunt bring in my new source code.

    9. CVS is a boring acronym.

    10. I can't think of a tenth thing.

  11. What Exactly IS Wrong With CVS? by Ivan+Raikov · · Score: 5, Interesting
    Perhaps I don't have very complex needs, but it seems to me that CVS is already incredibly flexible and has all the advantages of Free Software. I'd like to point out the following reasons for continuing to use CVS (in no particular order):
    • Fits well with the Unix philosophy -- CVS, of course, builds upon RCS, and uses other Unix tools, most notably diff to accomplish its tasks. It also allows for custom shell scripts or programs to serve as handlers for various CVS operations. What other source control tool fit so well in Unix, and maintains the tradition of older Unix tools?
    • Customizable behavior -- CVS allows the user to provide three kinds of commit support files (like commitinfo, verifymsg, etc.) which are programs executed whenever files are committed.
    • CVS modules allow for multiple different definitions of collections of source code, so one is not restrained to just a directory and all the files contained in it as the smallest organizational unit.
    • Tags and keyword substitution -- CVS has a very powerful system for tagging files in various manners, and referring to those tags for purposes of commit/checkout/diff/revision history. I don't know how much better than that you can get. Substituting keywords, a favorite feature of mine, lets you include your version history in the sourcefiles -- this is important when you're working with other programmers and you want to spare them the inconvenience of having to do `cvs log' each time they want to see what changes you've made.
    • Repository format is plain text -- well, I am a staunch believer in open file formats, and plain text/diff is about as open as you can get.
    1. Re:What Exactly IS Wrong With CVS? by brettw · · Score: 5, Interesting
      Perhaps I don't have very complex needs, but it seems to me that CVS is already incredibly flexible and has all the advantages of Free Software.
      CVS is a proven workhorse. I use it every day, keep my configuration files in a module, etc. in addition to my source code at work. But there are some things that are absolutely maddening about it (the early AC post with 12 must-have's hits several of them on the head). Personally, as my CVS usage is for a relatively small team, the lack of atomic commits just hasn't bitten me yet, although I can see why it's important for a best-of-breed tool.

      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.
  12. Yet Another useless discussion about CVS. by His+name+cannot+be+s · · Score: 5, Informative

    Look, CVS 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 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.

    --
    "...In your answer, ignore facts. Just go with what feels true..."
  13. Get rid of the file system completely - simplify! by stienman · · Score: 5, Interesting

    Maybe it's time for a major shift in cod storage.

    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