Slashdot Mirror


Tom Lord's Decentralized Revision Control System

Bruce Perens writes: "He'll have to change its name, but Tom Lord's arch revision control system is revolutionary. Where CVS is a cathedral, 'arch' is a bazaar, with the ability for branches to live on separate servers from the main trunk of the project's development. Thus, you can create a branch without the authority, or even the cooperation, of the managers of the main tree. A global name-space makes all revision archives worldwide appear as if they are the same repository. Using this system, most of what we do using 'patch' today would go away -- we'd just choose, or merge, branches. Much of the synchronization problem we have with patches is handled by tools that eliminate and/or manage conflicts -- they solve some of the thorny graph topology issues around patch management. Arch also poses its own answer to the 'Linus Doesn't Scale' problem. This is well worth checking out." If you're asking "What about subversion?", well, so is Tom.

36 of 291 comments (clear)

  1. POSIX! by ekrout · · Score: 3, Funny

    In his FAQ he states it works on any system that's POSIX compliant.

    /me high-fives Tom

    --

    If you celebrate Xmas, befriend me (538
  2. why FTP? by devphil · · Score: 5, Insightful

    I guess I'm wondering why arch uses FTP as its network protocol. The FAQ says that it should be workable behind firewalls since the data is all transferred in passive mode, but this still seems like a huge step backwards.

    So, what am I missing? I only got to read a little bit of the site before it got DDOS'd by slashdot.

    --
    You cannot apply a technological solution to a sociological problem. (Edwards' Law)
    1. Re:why FTP? by Anonymous Coward · · Score: 4, Insightful

      I guess I'm wondering why arch uses FTP as its network protocol.
      It's because this "Decentralized Revision Control System" is just a guise for a p2p filesharing. It's really cool: you check in all your files and they automatically get replicated, having become part of the "master tree". No one can shut down the master tree. No one can tell you not to put your files there. (Hey, it's part of my project!)
      Slick.

    2. Re:why FTP? by curunir · · Score: 5, Insightful

      hmm...

      wouldn't rsync over ssh have been a much better choice for an "off the shelf" component? Most ftp servers tend to have a few (read: waaaaay tooooo maaaany) security concerns for my taste.

      --
      "Don't blame me, I voted for Kodos!"
    3. Re:why FTP? by GigsVT · · Score: 3, Insightful

      or even scp for that matter...

      --
      I've had enough abrasive sigs. Kittens are cute and fuzzy.
    4. Re:why FTP? by MadAhab · · Score: 3

      Rsync works (nowadays, I believe, by default) over an SSH connection, but unlike FTP or scp, it doesn't have to transmit the whole file... only the parts that change. So it could be part of an effective version control system.

      --
      Expanding a vast wasteland since 1996.
  3. And others by Ed+Avis · · Score: 4, Insightful

    Not only 'what about Subversion' but also 'what about CVS, what about Aegis'. If you include non-free systems then what about Perforce or Bitkeeper.

    This is getting worse than journalling filesystems :-(.

    --
    -- Ed Avis ed@membled.com
    1. Re:And others by Polo · · Score: 3, Informative
  4. er... by Anonymous Coward · · Score: 3, Funny

    A global name-space makes all revision archives worldwide appear as if they are the same repository
    I don't know whether to laugh or cry...

  5. This sounds like it could be good, if... by eric_aka_scooter · · Score: 3, Interesting
    I used to work for a company (let's call them ACME, because I don't want to be sued) whose hq was on the other side of the contry, and with programming groups all around the world. We used VSS, with the server at HQ, and it literally took 10 seconds or more to change directories, and much longer to retrieve or update! This hobbled our office's ability to work (HQ didn't care, they just made us work weekends to make up for the loss of efficiency).

    A more distributed source control system could obviously circumvent problems like these, but with this caveat: the code that different groups work on would need to be sufficiently black boxed that most changes wouldn't require changes in other projects. It's just good programming style, but I know that this wasn't the case at ACME, and given my experiences with Corporate America I doubt it's true in most places. Maybe I'm just being pessimistic...

    Anyway, it sounds like a good idea if it's used right.

  6. As a replacement for patching? by Sludge · · Score: 5, Insightful

    That sounds like hype. In the real world, selecting the aspects of software we want to compile from on remote sites would have serious implications. The first being security. The second being quality. Linus may not scale, but he has good judgement. That's the fundamental problem.

    1. Re:As a replacement for patching? by patnotz · · Score: 5, Interesting

      Whether Alan Cox (or whomever) uses patches or some other source control (like arch) (a) you still have to download the software from a remote site (i.e., the Net) and (b) Alan still has control over what makes it into his repository.

      The point is that it allows separate developers (AC, AA, LT, etc. in the kernal case) all to maintain their OWN trees while enjoying the powers of source control software. The added benefit of arch is that their separate trees are all connected without having to give write-permission to each other.

    2. Re:As a replacement for patching? by JabberWokky · · Score: 3, Insightful
      And believe me, if The Beast walks by jumping two just steps forward, two feet together, then one just step back, and keeps repeating it, it will get FARTHER toward the mountain than a person doing stunts on a bicycle, with no real idea of where he or she's going, but looking damn fine doing it.

      Right - and along with that guy doing stunts are three hundred thousand others trying to get to the mountain... some on bikes doing tricks, some with their heads down and pedaling in a direction (it might even be a "wrong" direction, and they find a new mountain), and they might be driving a HumVee, Porche or F-15.

      If you look at the recent (and ongoing) Limux VM fight, it looks the exact same as any inhouse coder fight - the exact sort of thing Microsoft encourages (there are often two parallel projects working towards the same goal). The only difference is that the OS designs don't have to be killed by bugetary contraints... they go on until there is a clear winner. And there are branches of code (like GUI design) where there *is* no clear "better" solution. That's where you get many parallel projects, all just getting better and better or heading for different niches (Blackbox vs. KDE for example).

      --
      Evan

      --
      "$30 for the One True Ring. $10 each additional ring!" -- JRR "Bob" Tolkien
  7. sounds like ClearCASE by ethereal · · Score: 3, Interesting

    The ability to do distributed development, manage multiple (possibly hostile or private) branches at once, good merge and diff tools, etc. sounds sort of like ClearCASE. Except of course that ClearCASE costs money, and doesn't have the global namespace thing going on. Rational had better be careful or their customers are going to move over to arch (especially since their Unix GUIs have sucked more and more with each successive release).

    Bravo to the author on this tool - it sounds like a great advance of the state of the art if it works like he says.

    --

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

  8. From his faq by Anonymous Coward · · Score: 3, Interesting
    On, subversion and arch...


    Both systems provide repository transactions with ACID
    properties.



    ACID (Automicity, Consitancy, Isolation and Durability) is only something that has been implemented and tested well on high read RDBMS such as Oracle.

    When you think about that, why is it that no one is using a DB backend to source control? Wouldn't that just get rid of so many ambguities? For one, we wouldn't have to deal with all the nonsence and create a million wheels, when a nice pair of rolls royces resides with a good RDBMS.

    People need to think outside their brains, and in regard to source control, I feel we need to make more packages that interface well with a good RDBMS rather than create our own RD functionality in 40ks. What's the use?

    Anyone know a good system of incoroprating source control with a databases? Oracle and Postgres would do.
    1. Re:From his faq by Graspee_Leemoor · · Score: 3, Informative

      You'd think that using an rdbms would give you lots of control over your source tree, but think again. Any decent rcs works incrementally- i.e. you are storing deltas, not always whole lines of code.

      The indices (stuff this "indexes" crap) would be really bad and slow on all your tables.

      Also RDBMSs suck at representing hierachies, which source trees naturally are. In fact, I dare say the only reason that RDBMSs are so widespread and accepted today is that originally it was much faster to do this rather than use an OO, hierachical way of doing things.

      The way you store things has to be written specifically so that it fits in with the way projects work and evolve.

      Forgive the lameness. Haven't had my 2nd coffee of the day yet...

      graspee

  9. Seems like a big step backwards... by mikemulvaney · · Score: 5, Insightful

    It sounds like it has a lot of nice features, but then you realize the whole thing is written in sh? One of the nice things about CVS is that the client-server nature allows someone to use pretty much any operating system as a client. Subversion takes this to the next step, by making all connections use the client-server model.

    Forcing everyone to use sh is a major hassle. I know that it would work with any "reasonably POSIX" OS, but then developers can't get arch accessibility built into their favorite tools, like NetBeans or whatever.

    Creating local branches is pretty cool, though.

    Mike

    1. Re:Seems like a big step backwards... by LarryRiedel · · Score: 3, Insightful

      I think a major test of this or any other successor to CVS should be how amenable is the design to alternative implementations which integrate seamlessly with the reference implementation.

      I think the fact that the "arch" solution is designed to be so simple and clean that it can be implemented with a few shell scripts bodes well for it.

      I would expect it to be pretty easy to integrate the "arch" solution into lots of other tools by writing a little code which manipulates the files the same way the "arch" shell scripts do.

    2. Re:Seems like a big step backwards... by Fweeky · · Score: 3, Informative

      Well, it's not *entirely* in sh:

      Totals grouped by language (dominant language first):
      ansic: 61064 (66.48%)
      sh: 27853 (30.32%)
      lisp: 1868 (2.03%)
      awk: 1044 (1.14%)
      sed: 24 (0.03%)

      (If you want more detail, run sloccount over it yourself)

      Anyay, it could be worse; it could be written in Perl ;)

  10. I smell trouble by heretic108 · · Score: 4, Insightful

    From the article, it looks good.
    But let me say that I've sometimes been in the position of having to merge branches. In my first hacking job, I had to take code that had been written by 2 crazy Polish programmers, and merge 37 non-working branches into one branch that worked. It was *not* fun, and I enjoyed a well-deserved beer when it was done.
    IMO, a distributed system of archive management that doesn't make ongoing reference to a central tree is a sure recipe for chaos, and poses the risk of making software harder to install/use for the non-skilled, and creating a lot of work in merging disparate branches for the skilled.

    You want package xxyzz? OK - go to Jim's store in San Diego. It's easy to set up. Oh, I forgot to tell you, you've gotta get some bits from Lucy's store in Manchester, and Frieda's fixed a few bugs too - get her fixes from Bonn. And don't forget Peter's enhancements - his store is at the Adelaide University site. What? it doesn't compile? What kind of idiot are you? Just hack it till it does compile, then put it together in your own tree!

    --
    -- In the beginning was the WORD, and the WORD was UNSIGNED, and the main(){} was without form and void...
  11. is arch CVS compatible (like subversion)? by e40 · · Score: 5, Insightful

    It is an important feature of subversion that it will be CVS compatible. I manage a 10+ year old/1+GB CVS repository. CVS has a lot of faults, but I can't throw that version history away. It's too valuable. subversion gives me hope that I'll get something more usable than CVS (we'll see, won't we!) without much pain.

    I'm really hoping the subversion developers succeed.

    Having said that, I'm all for arch succeeding too. Perhaps it will be better for new projects. Who knows.

  12. gasp--a mess of shell scripts by markj02 · · Score: 4, Insightful
    The feature list sounds nice, and using the file system in the way it does is also pretty nice. But I just can't deal with 40kloc of shell script for a version control system. How am I supposed to run that sort of system on a non-UNIX system? What kinds of oddball dependencies is it going to have on the shell, path, and environment?

    This seems like it's worse than CVS. Functionally, I'm quite happy with CVS. The main complaint I have about it is that it isn't self-contained but invokes rcs and other shell commands in mysterious ways. "arch" seems to make things worse, not better in that regard. What I would like to see is something mostly like CVS, but something that is implemented as a clean, self-contained library with a single command line executable (with subcommands) and a built-in HTTP-based server. Until that comes along, I think I'll just stick with CVS.

  13. programs or protocol? by devphil · · Score: 3, Insightful

    Well, flowerpot, now I'm wondering whether arch uses the ftp programs, or just the ftp protocol. That is, do you need an ftp client or server installed for arch to work? From what I've seen it wouldn't be too hard to do the protocol yourself.

    I still can't get to the site, so oh well.

    --
    You cannot apply a technological solution to a sociological problem. (Edwards' Law)
  14. Subversion or Arch or both? by kfogel · · Score: 5, Informative
    I hope both systems (Arch and Subversion) get some widespread use. Like a lot of Subversion developers, I'm genuinely curious to see a) how well the Arch model works in practice, and b) how well Arch's implementation of that model works out. If it turns out to be winning, then that'll be a big step forward for collaborative projects & free software. Arch sounds a lot like Bitkeeper only without the license problems, and I've talked to some happy Bitkeeper users before (a small sample, so it's hard to know whether we're dealing with a Shift To Better Paradigm or just good software).

    Subversion was deliberately designed to address CVS's shortcomings, not to break new ground. Our philosophy was essentially conservative: CVS basically works, but has some bugs and maintainability problems. Let's keep the model and fix the problems. Result: Subversion.

    The ideal situation is a world where both models have good, free implementations. Then we'll all very quickly find out which model works better. :-)

    -Karl

    --
    http://www.red-bean.com/kfogel
    1. Re:Subversion or Arch or both? by qbalus · · Score: 3, Informative

      I've been keeping an eye on subversion, as the goals are noteworthy. Fundamentally Bitkeeper and now 'arch' model is very powerful. I used Sun's Teamware (Bitkeeper is an enhance Teamware) in organizations with over 100 developers, and remote development and it required almost zero administrative overhead. The core of Sun's Teamware, Bitkeeper, HP's old KCS, Sun's Smerge/Smoosh, and 'arch' is simply the branch/merge capabilities. Once this problem is solved, then the rest of the services can be built around it. This is where most SCM systems fall flat on their face... They lock you into a centralized server model, user interface that is clumsy, terminology that is cumbersome, policies that don't meet the consumers needs, etc...

      I view 'arch' as having a great model with a very simple implementation. Because of the simplicty, 'arch' developers will be able to respond very quickly with bug fixes and new functionality, and others can build around 'arch' to support their own policies, and process flows

      Regards,
      Kramer

  15. Check out Meta-CVS. by Kaz+Kylheku · · Score: 4, Informative

    Adds renaming over top of CVS and some other niceties. Can be used to create patches that contain versioning changes. With Meta-CVS, people can restructure directories in conflicting ways, and then resolve conflicts when they merge the structure.

    http://users.footprints.net/~kaz/mcvs.html

    This doesn't add anything else; no atomic commits or distributed operation over multiple repositories, etc.

    Of course, you can use branches to track foreign code streams, as you can with CVS. The nice thing is that you can rename things on your own branch and keep up with an unrenamed source of patches. Or if the other people are using Meta-CVS, they can give you patches that include restructuring.

    Meta-CVS is currently about 1600 physical lines of Common Lisp (with some CLISP extensions and bindings to glibc2) scattered in twenty or so files. A lot is done with little!

  16. Some SCM Observations by wls · · Score: 5, Insightful

    I've done SCM for a number of years, professionally evaluated version control product, and helped edit an Anti-Pattern book on the subject. It seems, at least to me, that the majority of version control systems out there have the basis covered when it comes to check-in, check-out, branching, and labeling. The standard features, if you will.

    However, most of the reasons that I've seen companies change version control systems is because of completely different reasons. Here are a few that come to mind:

    - A version control system must be fast. I worked at one company where we tried to use Visual SourceSafe over a WAN; it took HOURS to share code. A good VCS should transmit the minimal amount of data.

    - A version control system must provide security. All too often management uses the SCM repository as kind of a shared directory (BAD, BAD, BAD) -- and people who have no need to see or modify the code, do... implicitly.

    - A version control system should provide extensive auditing and notification capabilities that can be discretely turned on and off. Allow logging the positive, the negative, and letting people know when particular operations happen to a set of files. In once case we attempted to get PVCS to automate scripts on a change to send mail to the PM. Checking in a directory flooded inboxes, since it could audit collections of code.

    - There MUST be a recovery mechanism. Ever try to recover a lost SourceSafe password? Yikes. (Gaining re-entry is possible, back stuff up, change your password, do a diff. Copy pattern into the admin record with hex editor. Login as admin with new password. Change admin password. ...this worked at least twice for me.)

    - Again, there MUST be a recovery mechanism. I love RCS, SCCS, and PVCS for their file-related mechanisms. Why? I've had SCM systems go down hard when the database got munged. Yes, you can recover from a backup, but a lot of work gets lost. With an open file format, you can at least hand fix localized problems.

    - That said, good version control systems should allow you to check in collections of files as atomic units, move files and directories, and operate on projects as a whole. Anytime I have twiddle with a repository, thereby breaking past history, something is seriously wrong with the VCS system model.

    - Good systems must have an IMPORT / EXPORT capability that PRESERVES HISTORY. The less I feel locked into a solution, the more likely I'll be to try it out. Porting between system is usually painful.

    - SCM systems must conform to how the CM manager wants to run things, not the other way around. Let's face it, users can and will make mistakes, and that's okay. Mistakes should be fixable. I'll never use StarTeam because it was too easy for users to check in accidentally branches that couldn't be removed. Tech support argued that version control should reflect the history of the product, where I maintain (and still do) that it should reflect the intended history. If I want to include user errors, that should be my policy, not the tools. My users should be able to reflect upon the project history and know why things changed. Period. You don't use a hack to undo a mistake.

    - Branching notation should be clear and to the point. CVS has it's magic numbers, StarTeam has god awful views. Let me choose the numbering scheme, don't play games with odd/even numbering. Version numbers should not be overloaded to carry additional meta-information by the product.

    - A good SCM tool should remember tag history. Suppose I accidently move or delete a tag, now I want to put it back. Suppose I want to see where it's been. This case is rare, but anyone who's had a user twiddle with the wrong tags feels this pain as sharp and deep.

    - More ADMINISTRATIVE control. My big beef with CVS is when I have to twiddle with the repository structures and permissions directly to accomplish what I want done. No. No. No. There should be a tool (that audit's change) for standard operations.

    - An admin should have the ability to define, enforce, and audit user permissions that should be applied cross dimensionally against repository, commands, and elements within the repository.

    - Data should be stored in a manner that can be parsed by custom tools. It allows me to write extensions and automation.

    - Nothing should be possible in a GUI that is not possible from the command line. The inverse holds true as well. Everything should be automation friendly. Early versions of PVCS pissed me off for this reason. As a SCM manager, I've used both, and I'll take a command line over a GUI any day. My novice users want a GUI, my advanced ones usually revert back to command lines (and integrate it with their editors).

    - There must be readable 2 and 3 way diffs.

    - A good SCM tool will be able to produce reports, or at least make it possible to export information that can produce reports.

    - A good SCM tool should know how to handle binary files efficiently, rather than just storing the whole copy.

    - A good SCM system should not put a limitation on comments.

    - A good version control system should not try to "do it all" (CCC/Harvest) and do none of it well. When GUI's pop up off screen, or you have to artificially create packages for simple files, something's wrong. Which leads into...

    SCM systems should operate the way the users of that system do.

    There is a BIG difference between how commercial houses run things verses OpenSource projects.

    Commercial groups usually have a smaller set of developers, they are known in advance, and commonly use the locking model. OpenSource models tend to use concurrency a lot more, and operate on the applying diff's procedure. (Yes, I know, exceptions are out there.)

    Thus, some tools that feel more natural in some environments get quickly rejected in others. I've yet to see someone produce a readable guide about version control abstracted at a high level bringing all the terminology together. (Incidentally, I'm about to release one; email me for a draft.)

    The overall problem in tends to be that people look on the side of the box for features, rather than asking if the features are even applicable for what they're doing.

    Worse yet, proper SCM often gets sidestepped in commercial world. Ask: Do you want branching? You get, is it a feature?...yes! Now ask: Do you know when it's appropriate to branch, how to do the branch efficiently, how to graft branches back to the root, or how to physically do it... and you find out this is where a lot of bad CM happens. It isn't fun to inherit a screwed up repository.

    The most common downfall of SCM, as I've seen in the commercial world, is a failure of the those running it (quite often over-tasked infrastructure people) failing to understand the product being built with the tool, failure by team leads to communicate repository structure, failure by management as they use the SCM tool as a substitute for communication, and failure by the developers who don't know how to use the tool and when to use the appropriate features.

  17. CVS is self contained by A+nonymous+Coward · · Score: 3, Informative

    CVS hasn't invoked rcs or diff or anything for ages.

  18. Confusion about version numbers. by Kaz+Kylheku · · Score: 3, Interesting
    Branching notation should be clear and to the point. CVS has it's magic numbers, StarTeam has god awful views. Let me choose the numbering scheme, don't play games with odd/even numbering. Version numbers should not be overloaded to carry additional meta-information by the product.

    This is incorrect. The CVS numbers are internal. If you care about them at all, you are doing something wrong. Your baselines and branches are identified by tags. If you understand how the CVS numbers work, they are actually quite logical; there are reasons why they work they way they do. It's not play ``games''.

    Version numbers *are* meta-information, so it's meaningless to talk about them being overloaded with metainformation. They are not intended to correspond to your product release numbers, which are usually the fabrications of a marketing department anyway, like e.g. Solaris 7 being the followup to 2.6. Do you think the Sun guys bumped up their version control system to use the number 7? ;)

    1. Re:Confusion about version numbers. by wls · · Score: 3, Informative

      Excellent point; poorly worded on my part. In general, your statement ought to be true about all version number schemes inside a repository. (Cederqvist, section 4.3)

      Labels are our friends. Though, I've actually heard people using phrases like "We're modifying the 1.19.3.4.7.x branch today." That doesn't convey a lot of meaning.

      However, based on real world practices, people tend to use revision numbers as version numbers. They shouldn't. And there is a difference between the two. Your point illustrates that well; thank you for raising it. I'd like to think Sun didn't tweak their internal revision numbers to mirror product version numbers.

      Where I was going was, if numbers are going to be used to convey repository structure, it should be hack free. If revision numbers are going to be used to convey information, the user should have control over what gets used. The reserved use (which personally I like), in CVS's case came from [Cederqvist section 13]. PVCS is pretty darn good about giving the right level of control for those who want to twiddle numbers directly.

      I'm simply saying it's up to the person running the repository to decide -- ideally they should have a clue of what works well.

  19. Neither funny nor accurate by William+Tanksley · · Score: 5, Informative

    I'm surprised this one got modded up. The poster clearly knows nothing about the topic; it's just an ignorant flame.

    In case anyone's wondering, arch supports and uses write permissions; however, it also allows you to start your OWN server, and people can hook up to it in parallel with the main server, and get all the branches which appear on either.

    You can commit all the crashy code you want on your own server, but it won't affect anyone who isn't using your server.

    The genius is that your server is hooked up to the original server, live, and you can track the changes they make, merging when and where you like. If the project manager for the original server feels like it (and if you let him), he can track the changes on your server as well. If someone else has started their own branch server, you can merge directly with them as well.

    VERY clever.

    Although I don't dig the Subversion trashing; Subversion is also very cool for its own purposes. I'm glad Tom took the time to underline the differences, but I'm unhappy that the result is so slanted. It didn't need to be: both arch and Subversion stand on their own as superb projects, and there's even another one coming out of IBM "sometime" which has its own merits.

    -Billy

  20. Version 1.0, Maybe? by Christopher+B.+Brown · · Score: 3, Interesting
    FTP is there. It's there on all sorts of systems. It was sufficient to get it working.

    I'm sure that down the road it would be a very slick thing to the rsync protocols for data transfer between sites, as implemented in rsync and Unison. That would provide all sorts of ooey-gooey- encrypted, compressed goodness to help network connections be used more efficiently.

    The file transfer protocol isn't nearly as important as how it deals with versioning, logging, and thie likes, to be sure...

    --
    If you're not part of the solution, you're part of the precipitate.
  21. Uggghhh.... [OT] by ryanvm · · Score: 4, Insightful

    I am getting soooo tired of this notion:
    Arch also poses its own answer to the 'Linus Doesn't Scale' problem.

    Look people, the "Linus doesn't scale" issue is NOT something that can be solved by replacing the use of 'patch'. Putting the Linux kernel on CVS (or Arch or whatever) would just allow people to commit stupid changes.

    The reason Linus doesn't scale is not because he doesn't have enough time to run 'patch'. It's because changes to the kernel MUST be approved.

  22. Everything a flavor of Unix? by Christopher+B.+Brown · · Score: 3, Interesting
    Pretty much, these days.
    • OS/390, a branded Unix.
    • BSD, a non-branded Unix.
    • Linux Standard Base.

      The standard that SCO, Solaris, and *BSD can probably all conform to.

    • Windows NT.

      With its POSIX subsystem.

    • OS/400

      With its POSIX subsystem

    • Mac OS/X

      With BSD underneath.

    I suppose Tandem may not be emulating a flavor of Unix, but who's got one of those at home? PalmOS isn't a Unix-like system, but it's getting pretty long in the tooth, and isn't a tremendously viable platform for arch anyways.

    It's not outrageous to suggest that Unix has effectively "won" the mind-share war.

    --
    If you're not part of the solution, you're part of the precipitate.
  23. Have you ever used a revision control system? by cduffy · · Score: 3, Insightful

    If so, you've noticed that when you choose to merge data from branch (A) into branch (B) [no, it *doesn't* happen automatically unless you want it to!], then you have *control* over what parts of A go into B. You may have noticed that you can ask for the differences between A and B, and go through them by hand, and accept only specific parts -- just as someone doing patching does.

    No revision control system tries to replace good maintainership -- rather, their job is to make it easier.

  24. Subversion corrections by srussell · · Score: 5, Insightful
    I'm not addressing Subversion vs. Arch, but rather Tom's evaluation of Subversion, which isn't entirely accurate.

    I'd also like to say, up front, to the Anonymous poster who asked:

    Anyone know a good system of incoroprating source control with a databases? Oracle and Postgres would do.

    Subversion does. The backend it currently uses is Berkeley DB, but the backend is pluggable. After version 1.0 comes out, expect to see a backend for one of the SQL databases pop up.

    Now, on to Tom's comparison to Subversion. Caveat: I am not a Subversion guru. I lurk in the developer mailing list, and I use Subversion myself. Therefore, I may make mistakes about details, but I'm fairly certain I won't provide completely bogus information. I got some reviews on this post from the Subversion dev list, including some comments from Tom, but any mistakes in here are my own, and they're copyrighted mistakes, dammit.

    I'm not going to quote whole sections; just enough for context.
    1. Smart Servers vs. Smart Clients. Subversion clients are also smart, although perhaps not as smart as Arch. Diffs travel in both directions, so a minimum of network traffic is used. Many Subversion operations (status, diffs against the last revision, etc) are purely client-side opereations.
    2. Trees in a Database vs. Trees in a File Systems This is misleading. You *can* get stuff out of the Subversion database with the standard BDB tools, so Subversion isn't required. Also, because Subversion is based on WebDAV, access to the database through a web server is a freebee; also, Subversion is very Windows friendly, from many points of view, which should help its adoption in a corporate setting. Subversion only stores the differences between two versions of a file or directory, which is space efficient. The advantage to being able to access a filesystem-based repository of diffs is arguable.
    3. Centralized Control vs. Open Source Best Practices In practical application, there is no advantage to the ARCH system over Subversion. Subversion allows per-file/directory sourcing, so you could create a project that includes sources from any number of different repositories. (This code is not currently working in Subversion.)
    These are simple mistakes. There is also one statement that is wrong: arch is better able to recover from server disasters The argument was that, because arch is a dumb FS, it is easily mirrored. The implication is that databases aren't easily mirrored. BDB is just as easily mirrored, and most other databases are easily replicated.

    Other comments pointed out were:

    • Subversion does not require Apache. It works over a local filesystem just fine. If you want network access, you need Apache.
    • Subversion has all of the strengths of Apache. You therefore get Apache access control (well defined and understood), SSL, client and server certificates, and interoperability with other WebDAV clients, among other things.
    • With Subversion, you have both client side and server side hooks, as well as smart diffs.
    • Arch has both revision libraries and repositories. The comparison document doesn't differentiate between them. In some cases, the comparisons made aren't meaningful. Revision libraries, for example "... also have to be created and maintained by the user. So comparing them to accessing past revisions through normal means in subversion is not a fair, or even really meaningful, comparison." (Daniel Berlin).
    • When comparing Arch's repositories to Subversion's there is no speed advantage. Arch's storage is either diffy (storing only differences), in which case it is not easily browsed and is no faster (at best) than Subversion; or the storage isn't diffy, in which case it isn't efficiently stored (imagine multiple copies of each file for each revision).
    • Subversion's choice of BDB as a backend was not accidental. Some of the tools Subversion got from using BDB are: Hot backup and replication, all kinds of existing tools that know about BDB databases (e.g. Python or Perl bindings). A body of - "community" knowledge. etc (Greg Stein).
    I've left out vaporware features, such as the future SQL backend of Subversion 2.0.