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

28 of 536 comments (clear)

  1. Clearcase... by Anonymous Coward · · Score: 1, Interesting

    Clearcase is where its at. I admit its nowhere near free, but I don't see anything coming close to rivaling it from either the commercial or free/open source space. As well, it ties into some of the other Rational Products pretty well, especially with UCM and Clearquest for bug tracking.

    1. Re:Clearcase... by ethereal · · 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.

      --

      Your right to not believe: Americans United for Separation of Church and

  2. 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 GreenLantern · · Score: 2, Interesting

      I hate to be an also-ran but, we use Perforce here also. In my history as a developer I have used RCS, CVS, Continuus and Visual Source Safe. The only product that comes close to Perforce in functionality Continuus. The difference is that Perforce actually works and you don't have to wait for hours to complete sync and integrate operations while hopeing it won't crash. Perforce is also less expensive than Continuus and the server runs on more platforms including Linux.

    2. Re:We use Perforce at work by e40 · · Score: 3, Interesting

      I tried to use Perforce, but I couldn't get my repository (CVS, started in 1990 with version 1.1 or 1.2) converted to a depot. There were two tools for doing it, both user contributed. They just didn't work.

      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 ,v files.

    3. Re:We use Perforce at work by Anonymous Coward · · Score: 1, Interesting

      How long ago did you try the CVS -> Perforce conversion?

      I'm the author of one of the conversion tools, and am now maintainer of the other. I'd be happy to help.

      - Richard Geiger
      Open Source Engineer at Perforce

  3. one word: patchsets by kix · · 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.

    --
    I am SO cool I can keep meat fresh for a WEEK!!!!
  4. One thing must exist by truthsearch · · Score: 4, Interesting

    Absolutely key is (relatively) easy integration with IDEs. Preferably a nice set of APIs for any IDE creators to use to interact with the version control server. I would imagine those same APIs could then be used by any GUI developers of the version control system. IMO without the ability of the system to integrate well with IDEs adoption would be slow.

    1. Re:One thing must exist by pmz · · Score: 2, Interesting

      Other than adding a great deal of complexity to an already complex system, do graphical IDEs really contribute anything useful?

      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.

  5. 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.

    1. Re:Need new languages by des09 · · Score: 2, Interesting

      I was just thinking exactly the opposite thing... as a developer who works with Java, VB, XML, HTML, JavaScript, SQL and the occasional bash script, I think the problem is that the version control systems know nothing about the languages. I think the main issue is that version control is it is viewed as a control system, not a development tool, something to help deliver the highest quality code.

      Especially with Java and cvs I am always frustrated that CVS does not know the difference between a .properties file, a jar, .java etc, and more to the point, CVS make refactoring across packages a very laborious and time consuming task. Visual SourceSafe and VB are better suited to each other, but still no great match.

      --
      .sigless since 2003
    2. Re:Need new languages by jhines · · Score: 3, Interesting

      Don Knuth's language web had an interesting feature, the ability to generate documentation from the same source code.

      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.

  6. 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 Canis+Lupus · · Score: 2, Interesting

      I wonder if the VC could track modules (i.e., classes and namespaces to use a C++ reference) instead of files? Granted the VC would need the ability to parse the material which is being controlled, but changes can be tracked per module (i.e., new function added, base class derived, etc.) Just a thought (seems rather complicated)

      --
      The real silver bullet to good programs is caffeine; lots and lots of caffeine! *twitch, twitch*
  7. Re:More open-source revision control systems by Tei'ehm+Teuw · · Score: 2, Interesting

    Now, going against all political correctness, what about the versioning system coming with .Net? It's clean, powerful, easy to use and was built from the ground up for collaborative development. Yeah it may be from M$, but it's still a powerful option. Why shoot yourself in the foot just on the basis of "we don't like them"? Even if the product is better?

  8. 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.

  9. 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.
  10. Why "The Open Source Community?" by NitsujTPU · · Score: 3, Interesting

    Basically, does the Open Source Community need new tools in this aspect of development?

    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.

  11. I would love this: by idfrsr · · Score: 3, Interesting

    This type of thing may be out there already, but it would be great to have system to link the CVS like control with bug submission, so checking out files will also give you the set of submitted bugs related to those files.

    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...

    --
    "The large print giveth, and the small print taketh away" -Tom Waits
  12. Look at VESTA by RollyGuy · · Score: 2, Interesting

    I use Vesta at work and find that is is better than CVS. One of the major differences is that it is also a build environment. That means that you along with your code, you can have the compiler versions that you used to build the code with. Vesta does the building within itself and then "ships" the executable to where you need it.
    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.

    --
    Don't pet the burning dog
  13. There's a big difference between by wls · · Score: 4, Interesting
    Version control systems, as a whole, seem to make a mistake when over-generalizing and combining concepts with implementation. These things are all different:
    • The file you want versioned.
    • The archive that holds it.
    • The workfile you extracted from an archive.
    • The shadow file automatically extracted from an archive.
    • A directory.
    • A project, which is not always 1:1 with a directory.
    • A view, which is not a subset of files or directories.
    For instance, I may have the file archive.c,v which I check out as myfile.c, which is shadowed as mainfile.c, which exists in multiple projects, inside different subdirectories, exposed whenever I have a view of a particular time on a particular branch for a given subset of a module.

    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?

  14. Re:All this plagiarism... by Anonymous Coward · · Score: 1, Interesting
    Could someone tell me only ten applications, that fit the discription of being "Original" and "Open Source" and "innovative" and "free" as in free beer?

    Sure. Are you sitting comfortably? Then I shall begin:

    1. Timesharing
    2. The original FORTRAN and Algol languages
    3. In a similair vain, the C language
    4. May as well include UNIX too
    5. TECO, which also gave us
    6. Emacs
    7. TeX
    8. Perl
    9. The Web Browser and Server
    10. Oh look, ten already! O.K, how about, the whole freaking internet? From NCP and Telnet all the way to IPv6 and HTTP1.1
    11. Oh fuck it, why not go all out? Spacewar!, the first computer game

    Now kindly shut up.
  15. 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

  16. Re:Get rid of the file system completely - simplif by MarkCC · · Score: 3, Interesting


    That's part of what we're doing in Stellation. 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

  17. CVS IDE Integration by md17 · · Score: 2, Interesting

    I have been using the Eclipse Open Source IDE for a while and it integrates very well with CVS. It actually even adds some of the features many posts are looking for. And for you Java nerds (like me) check out the Easy Struts Plugin it will save you hours writing those action, form beans, etc. Happy coding.

  18. Re:The choice is clear by Anonymous Coward · · Score: 1, Interesting

    Microsoft (who makes Visual SourceSafe) uses their own version control system (not VSS). I wish they would make that available instead of VSS.