Slashdot Mirror


The Future of Subversion

sciurus0 writes "As the open source version control system Subversion nears its 1.5 release, one of its developers asks, what is the project's future? On the one hand, the number of public Subversion DAV servers is still growing quadratically. On the other hand, open source developers are increasingly switching to distributed version control systems like Git and Mercurial. Is there still a need for centralized version control in some environments, or is Linus Torvalds right that all who use it are 'ugly and stupid'?" The comments on the blog post have high S/N.

173 comments

  1. S/N Ratio by Anonymous Coward · · Score: 4, Funny

    The comments on the blog post have high S/N. And posting it here is really going to help!
    1. Re:S/N Ratio by Anonymous Coward · · Score: 0

      Do you think so?

    2. Re:S/N Ratio by Anonymous Coward · · Score: 0

      Do you think the average /. reader is actually going to read the article?

  2. Well *I'm* ugly and stupid... by Wulfstan · · Score: 5, Insightful

    I run the IT systems for my small software company and frankly Subversion is a great tool for the job. I don't *want* a distributed VC system because I don't want the hassle of trying to ensure that everyone's modifications to the code tree are backed up correctly and stored safely somewhere. I want it in a central spot I can back up and manage without my employees having to worry about it.

    Basically Subversion is not suited for development with a diverse population of loosely connected individuals, each with their own private branches. Frankly, for corporate work, I don't understand why you would want the backup and integrity hassles of a distributed version control system. But maybe that's because I'm ugly and stupid :-)

    --
    --- Nick, hard at work :->
    1. Re:Well *I'm* ugly and stupid... by mweather · · Score: 3, Insightful

      I run the IT systems for my small software company and frankly Subversion is a great tool for the job. I don't *want* a distributed VC system because I don't want the hassle of trying to ensure that everyone's modifications to the code tree are backed up correctly and stored safely somewhere. I want it in a central spot I can back up and manage without my employees having to worry about it. You can do that with distributed version control, too and still have the flexibility for alternative work flows.
    2. Re:Well *I'm* ugly and stupid... by peragrin · · Score: 3, Insightful

      i would say it is variable. I can see the point of both.

      subversion is good for small projects, or larger projects with limited number of developers.

      Once you get into the hundreds and thousands of developers working on the same project though you need to think a bit differently in terms of needs of the individual developer, and the group as a whole.

      --
      i thought once I was found, but it was only a dream.
    3. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 3, Interesting

      Errr. I don't see how without jumping through a lot of hoops.

      If I have n users in my software team and they each have a local repository copy and "commits" that they make are made to that local repository then it basically requires me to backup everyone's PC in order to ensure that work is not lost. I don't back up PCs, we have a clear rule that if you want something to be safe it goes on the server.

      Now, sure, I can see that with some effort and mucking about you can ensure that everyone's local repository copies are backed up. But this is a whole lot of hassle and I fail to see why you would bother - other than if you have a particular religious requirement to use a DVCS ;-)

      --
      --- Nick, hard at work :->
    4. Re:Well *I'm* ugly and stupid... by EricR86 · · Score: 5, Insightful

      Frankly, for corporate work, I don't understand why you would want the backup and integrity hassles of a distributed version control system.

      Correct me if I'm wrong, but isn't this the major selling point of distributed revision control? The idea being that since it is a distributed repository, everyone has a "backup" of someone else's repository (depending where they got their code from). No distributed copy is necessarily considered more important than another. However in a corporate environment I would imagine it works out quite well since there's an inherent hierarchy. Those "higher up" can pull changes from those "below". Those "higher" repositories you could (and probably should) backup.

      As far as integrity goes I think one of the main goals of both Mecurial and Git was to protecting against corruption (using a SHA1 hash). You're much more likely to get corruption through CVS and SVN, which is awful considering it's in a central location.

    5. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 5, Insightful

      I'm using the terms backup and integrity in slightly different ways than you are.

      By backup - I mean a tape or location where I know I can look to find the "good" copy that contains the official tree of code that represents what is going into my product. What you are describing is copies of repositories sitting in various locations that isn't really the same as a backup. It's also a bit upside-down - I don't want to be "pulling" fixes from engineers, I want engineers "pushing" fixes into a known-good integration environment.

      By integrity - I mean ensuring that you have all of the fixes you want to have from everyone who should be making changes on a project. NOT file corruption.

      --
      --- Nick, hard at work :->
    6. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      this can of irony just makes my day:

      "Well *I'm* ugly and stupid... (Score:5, Insightful)"

    7. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 1, Informative

      There's no reason you can't have a central "official" repository that everyone "pushes" their changes to. In fact, I bet most "corporate" users of DVCS do exactly this. You also get all the other benefits of DVCS that Subversion doesn't do or doesn't do well.

      You shouldn't knock things you obviously don't know much about.

    8. Re:Well *I'm* ugly and stupid... by Mongoose+Disciple · · Score: 1

      You also get all the other benefits of DVCS that Subversion doesn't do or doesn't do well.

      Examples? Specifically, I'm wondering what advantages a DVCS can offer in a situation where what you would choose is very close to or exactly like the centralized model that something like Subversion forces on you -- and similarly, what the trade-offs are.

      I know that's not the situation for most Open Source projects, but I think it is the case for a lot of businesses that are currently running Subversion, or are looking at Subversion to replace whatever older and crappier VCS they have. Probably I'll have to make that kind of call at least once in the next few years and it would be nice to have a better handle on the pros and cons.

    9. Re:Well *I'm* ugly and stupid... by corbettw · · Score: 2, Interesting

      There's no reason you can't have a central "official" repository that everyone "pushes" their changes to. How is that substantially different from what the OP described?

      In any event, anyone advocates distributed version control has never been responsible for protecting the work of hundreds of developers working in multiple timezones/continents. Enterprises cannot afford the cost in time and money to back up every single workstation; developers have to be given a way to sync their work, at least once a day, with a central repository that can protected against data loss.
      --
      God invented whiskey so the Irish would not rule the world.
    10. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 2, Insightful

      Yes, but the point is that it encourages and allows behaviour that is not desirable in a corporate development environment - local checkins. You CAN push your changes to it but equally you CAN just check stuff in locally. In some contexts this is great - but I think in corporate environments it promotes risky behaviour.

      Look - it's a tool - you can use it responsibly or use it irresponsibly - with the right set of rules and processes I'm sure it can be made to work. Local checkins are what really get my goat ;-)

      --
      --- Nick, hard at work :->
    11. Re:Well *I'm* ugly and stupid... by EricR86 · · Score: 5, Insightful

      ...a tape or location where I know I can look to find the "good" copy that contains the official tree of code that represents what is going into my product.

      In a distributed environment usually there's someone's (or a group's) repository that's considered more important than others. In a software setting this could be a Lead Engineer's/QA/Certification's repository. Depending on what your definition of the "good" repository is, you would take the copy from the right place. It opens up in terms of flexibility what code you actually want to get to work with. The upcoming released version of your software from QA, the next-generation stuff that developers are working on, or maybe a new feature that you here so-and-so is working on...

      I don't want to be "pulling" fixes from engineers, I want engineers "pushing" fixes into a known-good integration environment.

      But you have someone who needs to approve a change to a central repository that everyone shares. Right? That person would probably want to examine those changes before they're committed. The only difference between distributed and centralized, in this case, is that it's a required step. Everyone is responsible for their own repository.

      By integrity - I mean ensuring that you have all of the fixes you want to have from everyone who should be making changes on a project Again, in a centralized system, someone has to have the responsibility that all "fixes" have been made which isn't much different from a distributed model. And technically anyone is free to make changes to a project locally on their own machine. They just have to notify the "higher" person saying "Hey I've got a fix for so-and-so", and in a controlled manner they can decide whether or not to accept the changes into their own repository.

      I'm no expert on distributed revision control, so anyone please feel free to correct me.

    12. Re:Well *I'm* ugly and stupid... by burris · · Score: 2, Interesting

      One of the best things is you can checkin changes, roll back to previous versions, branch, merge, etc... all on your local repository while you're on the plane or beach where there is no network access. With Subversion you can't do that. So if you have this crazy idea but don't have network access, you either have to make changes to your current work area and risk screwing stuff up and possibly losing any changes you already have in that work area (which may not be as crazy and speculative) or you might just forgo trying out your crazy ideas because you can't take a branch or commit your changes. The same goes for when you do have network access. The DVCS systems are much faster at branching and the merging is much better IME. Most Subversion/CVS users avoid making many branches because keeping them in sync is a PITA.

      Most CVCS users don't realize how incredibly useful taking branches and merging them at the drop of a hat is because they have studiously avoided it except where absolutely necessary.

    13. Re:Well *I'm* ugly and stupid... by KDan · · Score: 0, Flamebait

      In short, it makes creating branches and rebasing those branches so easily that you get a whole new verb to your version-control vocabulary. This allows a much more natural development workflow.

      The only downside, I would say, to something like git, is that if your head is empty it'll just confuse you. At the moment, Git is too flexible and powerful for bad developers. I wouldn't recommend git in your outsourcing sweat-shop in Pakistan, for instance.

      Daniel

      --
      Carpe Diem
    14. Re:Well *I'm* ugly and stupid... by joggle · · Score: 1

      Thanks, I hadn't thought of that. So which DVCS would you recommend?

    15. Re:Well *I'm* ugly and stupid... by maxume · · Score: 5, Informative

      A DVCS can still be used to commit to a server.

      The big difference is that a DVCS adds a local workspace. I can check something out from the centralized server(with a DVCS, I pull the server tree to my local tree), mess around, make a branch, see what it does, decide it was stupid and throw the whole thing away, or I can decide it was a good idea and then commit it to the centralized server(by pushing my tree up to the central tree). The only real difference is that a check out is called a pull and a commit is called a push.

      Separating change management from committing to the repository is not necessarily a bad thing. It may be undesirable in many situations, but it can also be handy.

      --
      Nerd rage is the funniest rage.
    16. Re:Well *I'm* ugly and stupid... by plague3106 · · Score: 1

      By local checkins, do you mean the idea of shelving? I don't think you necessarly need a distributed system to have that feature. A centralized repositry can support such features as well. Or are local checkins something else I don't know about?

    17. Re:Well *I'm* ugly and stupid... by gbjbaanb · · Score: 1, Insightful

      One of the best things is you can checkin changes, roll back to previous versions, branch, merge, etc... all on your local repository while you're on the plane or beach where there is no network access

      no, that's the WORST thing about it in a corporate environment. See, if I've paid you $5000 a month to write software, I don't mind it written on a laptop on the beach as long as you check it into the central repository. I seriously do mind if you write it on your laptop on the beach, check it in to your local repository and then get your laptop stolen (or covered in margeritas). This is such a deal-breaker that I would say 'no beach coding' to all developers and make them sit in cubicles instead. Now if they could check code into the central, secure, backed-up repository then I'm fine with whereever they want to code.

      Now branching... that's another story and is possibly why this article should be talking about the differences between MS Team Foundation System and Clearcase.

    18. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 1

      I don't think it's necessarily bad - people are bringing up valuable points about contexts in which it is useful - I worry that local checkins encourage individuals working in a disconnected fashion and thinking less like a team.

      "Commit" has always had an air of safety for me which DVCS seems to compromise. But maybe I'm a Luddite as well as being ugly and stupid ;-)

      --
      --- Nick, hard at work :->
    19. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 1, Informative

      In distributed implementations in the past that I've been responsible for, the tool (in my case BitKeeper) allows a "push clone" where a developer can create a clone of their local workspace onto a remote system, in this case a common server.

      That server was regularly backed up (daily deltas) with weekly off-site tape rotation.

      The worst-case loss in the event of a total failure of a single computer is one developer's local changeset(s), but that's the exact same risk when working with a centralized system as well. A developer's uncommitted work can always be lost if precautions aren't taken.

    20. Re:Well *I'm* ugly and stupid... by burris · · Score: 5, Informative

      I have worked with almost all of them. Some of them for extended periods of time with developers I sat next to in the office who committed to a central repository but also with distributed teams (distributed teams usually push changes frequently to a shared "central" repo, btw.) That includes Codeville, Git, Monotone, Darcs, and Mercurial. Really, they are all essentially the same and the differences are mostly in implementation and flexibility, especially WRT merge algorithms.

      A few months ago I switched to git. Git seems like the winner - it's fast, modular, and many people are hacking on it and have written many cool tools (most of which are "built-in" git "commands.") However, its Windows support lags behind the other front-runner Mercurial. Darcs is mostly used by Haskell hackers, Monotone never seemed to really take off, and Codeville has died on the vine.

      The good thing is you can switch because there are migration tools for almost every one and the histories tend to be isomorphic.

    21. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 2, Interesting

      I mean the idea of being able to commit changes to your local copy of the repository (whatever that is called in your DVCS of choice) without having them pushed up automatically to a "safe" central location. We encourage the use of private branches in SVN instead. Yes, merging in SVN stinks, but svnmerge.py at least makes it tolerable.

      In my environment servers are backed up and PCs are not, which is why local repository copies I think are risky.

      I appreciate that you could add this sort of feature to a centralized repository but I see that as one of the key differentiators between DVCS and CVCS. If it was a feature in a CVCS I'd be pretty negative about people making use of it without particularly good reasons...

      --
      --- Nick, hard at work :->
    22. Re:Well *I'm* ugly and stupid... by maxume · · Score: 4, Informative

      Right, but with server only commits, people wanting to do experiments may not bother doing any version management if they don't want to hassle with creating a branch to hold the work. Cultural problems come up in both situations.

      --
      Nerd rage is the funniest rage.
    23. Re:Well *I'm* ugly and stupid... by JosefWells · · Score: 1

      I don't *want* a distributed VC system because I don't want the hassle of trying to ensure that everyone's modifications to the code tree are backed up correctly and stored safely somewhere. I want it in a central spot I can back up and manage without my employees having to worry about it. With svn/cvs, any uncommited edits in a developers personal checkout are not backed up! You would need to back up their machines or work areas to achieve this.

      With mercurual/git, users can commit unfinished code without affecting the release branch. You can wrap those commits, so they always get pushed to some server which then CAN backup that unfinished work in a central location.

      Distributed version control adds this feature which central version control via svn/cvs specifically lacks.
    24. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 1

      The worst-case loss in the event of a total failure of a single computer is one developer's local changeset(s), but that's the exact same risk when working with a centralized system as well. A developer's uncommitted work can always be lost if precautions aren't taken. That's slightly disingenuous - in a DVCS you are more likely to have local changesets than you are to have uncommitted work in a CVCS. So saying that it's the exact same risk I think is a bit unfair.
      --
      --- Nick, hard at work :->
    25. Re:Well *I'm* ugly and stupid... by Smenj · · Score: 1

      You clearly do not understand distributed revision control.

      Fostering decentralization in no way prevents you from enforcing a centralized workflow, if that's what you choose to do. Rather it provides you with capabilities that simply are not possible in a centralized system. You do not have to take advantage of them if you don't want to.

      Of course, with a decentralized system everyone has a complete copy of the history by default, so if you lose the original or the "official" backups you're not screwed.

      Of course, you are welcome to do what you like. You will simply miss out on all the advancements your competitors are taking advantage of.

    26. Re:Well *I'm* ugly and stupid... by xannik · · Score: 2, Interesting

      Yes, but the point is that it encourages and allows behaviour that is not desirable in a corporate development environment - local checkins. You CAN push your changes to it but equally you CAN just check stuff in locally. In some contexts this is great - but I think in corporate environments it promotes risky behaviour. What's the difference between that and using a centralized VCS where the users are keeping copies of the code, but aren't checking in their changes?
      --

      Go Illini!!!
    27. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0
      See, if I've paid you $5000 a month to write software, I don't mind it written on a laptop on the beach as long as you check it into the central repository. I seriously do mind if you write it on your laptop on the beach, check it in to your local repository and then get your laptop stolen (or covered in margeritas). This is such a deal-breaker that I would say 'no beach coding' to all developers and make them sit in cubicles instead. Now if they could check code into the central, secure, backed-up repository then I'm fine with wherever they want to code.


      This confuses me. Why can't you just have a corporate server with a repository that is the "official" repository (i.e., a centralized repository), but individuals can checkout a version, then work on it at the beach or wherever--including "committing" at the beach on their local laptop. However, until they push that change back to the central server, it is not considered completed work? This doesn't seem to be any different than having a true centralized svn repository, checking out code, working at the beach, then committing it later.


      Even if you have a centralized svn repository, someone can checkout, make changes at the beach, then spill a margarita on the laptop and lose that work anyway.

    28. Re:Well *I'm* ugly and stupid... by Workaphobia · · Score: 1

      But since patches are decentralized and often independent of one another (whereas in SVN they're sequential), you have to take extra care to make sure everyone has a complete copy of the full, up to date project, and not just a widely distributed older variation.

      --
      Evidently, the key to understanding recursion is to begin by understanding recursion. The rest is easy.
    29. Re:Well *I'm* ugly and stupid... by plague3106 · · Score: 2, Informative

      Well, it sounds like the concept of shelving; a kind of partial commit that only you can see, and if you like, can later make public. I don't believe you need distributed SC for that; there's nothing inherient that requires a local server running. I believe MS' Team Foundation Server already supports this. http://msdn.microsoft.com/en-us/library/ms181283(VS.80).aspx

      Maybe it's not the same thing though. To me, the key difference would be running your own private SC server locally to handle the feature vs. not having any local server but the central server knows to "hide" it. At least that's how I would think a distributed source control system would work.

    30. Re:Well *I'm* ugly and stupid... by greg1104 · · Score: 1

      The way you're working with Subversion right now, each developer checks out a copy where they are making private temporary modifications in order to improve the code, only to check the result in when it's done. You have no ability to see, backup, or manage those private checkouts, even though there may be substantial work going into them each day. You should consider that a large problem with using Subversion. If you're lucky, developers make branches and commit to that regularly so there's less chance of losing that work, but since branches are so painful in svn that's probably not happening for anything but major projects.

      With a DVCS, you can have each developer publish their private version of the code and see what they're doing at any time. When they have a good changeset ready, they integrate that back into the master repository--updating your central spot you worry about backing up, same as you always have. But in addition to that, you have visibility into work in progress that the Subversion model only provides if people go out of their way to enable it.

    31. Re:Well *I'm* ugly and stupid... by ajlitt · · Score: 3, Interesting

      Most CVCS users do work on development or experimental branches for exactly that reason. That way you can follow the 'commit often' rule. You really should only be doing merges to release branches or the trunk.

    32. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      > Of course, with a decentralized system everyone has a complete copy of the history by default

      Not in any project of reasonable size. No one checks out the entire gigantic git history of Linux, they get a current snapshot that starts history at the time of checkout.

    33. Re:Well *I'm* ugly and stupid... by mweather · · Score: 1

      My Pakistani coding center is NOT a sweatshop. Heat might damage the equipment.

    34. Re:Well *I'm* ugly and stupid... by taylortbb · · Score: 1

      Because sometimes you want granularity in your check-ins, or you might want to make a local branch. This way you can check things in bit by bit to your local repository and then sync it up to the main one when you're done. That way a major change doesn't come in one mammoth commit.

    35. Re:Well *I'm* ugly and stupid... by imbaczek · · Score: 1

      I run the IT systems for my small software company and frankly Subversion is a great tool for the job. I don't *want* a distributed VC system because I don't want the hassle of trying to ensure that everyone's modifications to the code tree are backed up correctly and stored safely somewhere. I want it in a central spot I can back up and manage without my employees having to worry about it. Clearly you have no idea how DVCSes work. Every employee has his own backup and you still can tell them (or force them) to push changes to a blessed server (which can be called central, but this isn't a _technical_ thing anymore), copy of which you can then safely stash away.

      There are two things a DVCS can't do that a CVCS can:
      1. Delete something from global history (just can't be done, because everyone has his own backup)
      2. Partial checkouts (if you've got a monolithic repository instead of per-project.)
      Everything else works perfectly fine and/or better.
    36. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      And why can't you do that same thing with Subversion?

    37. Re:Well *I'm* ugly and stupid... by joggle · · Score: 1

      Thanks for the info. We're still using CVS here (much to my annoyance) but are planning to switch to something new soon. I'll give Git a try.

      Note to mods: I don't think the sibling post by gbjbaanb was a troll. A disagreement does not a troll make. His post was on-topic and not insulting so I really can't see why somebody would mod it as 'troll'.

    38. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      There's no reason that you couldn't do this same thing with a CVCS, and I know that at some of the Subversion conferences they have even talked about adding support for the offline access to a local copy of the repository.

    39. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      No, you're not paying me $5,000 a month to write software because I won't work for that little. Especially because you're obviously a jerk.

    40. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 1

      There isn't any difference, you're right - but I think DCVS tools encourage disconnected behaviour whereas CCVS tools don't.

      You can use any tool badly, but some tools are easier to use badly than others.

      --
      --- Nick, hard at work :->
    41. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 1

      I'm not fully convinced by this argument. When people use SVN they naturally get nervous about having uncommitted changes and so they commit regularly - and are encouraged to do so.

      Seeing what people are up to is also a lot easier in a centralized system if people are committing - having to go and dig around in a bunch of private repositories is a major pain. And the visibility into work in progress requires publishing their private repository, so that needs to be enabled just the same as it needs to in SVN.

      Ultimately though, what is clear to me is that this isn't an issue about what CAN be done with either tool. The issue is the behavior that each tool encourages. DVCS encourages independence. CVCS encourages interdependence.

      --
      --- Nick, hard at work :->
    42. Re:Well *I'm* ugly and stupid... by corbettw · · Score: 1

      The worst-case loss in the event of a total failure of a single computer is one developer's local changeset(s), but that's the exact same risk when working with a centralized system as well. A developer's uncommitted work can always be lost if precautions aren't taken. This is why you have nightly cron jobs that check in a developers work on a regular basis, before the nightly backups of the central repository kick off. It's not perfect, but it helps, and most devs get used to it pretty quickly (and are grateful for it when the inevitable hard drive crash happens on their workstation).
      --
      God invented whiskey so the Irish would not rule the world.
    43. Re:Well *I'm* ugly and stupid... by Wulfstan · · Score: 1

      I understand just fine how a DVCS works. The problem I see in a corporate environment is that it encourages working from a local repository (it's not a backup - it's a real, living, breathing repository that exists entirely independently from the source) rather than encouraging working centrally.

      Contrary to what you say, it doesn't seem to me that you can force people to push all of their changes through to a blessed server. People can work independently until it is time to release and this is made possible (encouraged?) by the loosely-coupled independent repository nature of DVCS.

      I think the key issue is - which behavior is more desirable in your particular space? In Open Source, I can certainly see the argument that the independence of DVCS is advantageous. But in the corporate world I see more risk than reward.

      --
      --- Nick, hard at work :->
    44. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      Yeah, sure thing, hippie. Keep on dreamin that you'll get over minimum wage someday.

    45. Re:Well *I'm* ugly and stupid... by RedWizzard · · Score: 1

      Yes, but the point is that it encourages and allows behaviour that is not desirable in a corporate development environment - local checkins. You CAN push your changes to it but equally you CAN just check stuff in locally. In some contexts this is great - but I think in corporate environments it promotes risky behaviour.

      Look - it's a tool - you can use it responsibly or use it irresponsibly - with the right set of rules and processes I'm sure it can be made to work. Local checkins are what really get my goat ;-)

      I think local checkins promote better behavior. With traditional version control the work developers do between checkins is not backed up and has no version control applied. That's ok if people are checking in often but if checkins are only happening every few days or less often then it can be a problem. With local checkins you at least get the benefits of version control locally. And let's face it: if you can get developers to a central VCS system then you can get them to push their changes to a central repository when using a distributed system.
    46. Re:Well *I'm* ugly and stupid... by Safety+Cap · · Score: 1

      don't want to hassle with creating a branch
      -- maxume (22995)

      Hassle of creating a branch, eh?

      foo$ svn cp trunk branches/skippy_pre
      foo$ svn cp branches/skippy_pre branches/skippy_post
      How hard was that? You do all your work in 'skippy_post', checking in along the way. When you're ready to merge back, it is even easier.

      foo/trunk$ svn up
      foo/trunk$ svn merge branches/skippy_pre branches/skippy_post
      foo/trunk$ svn ci -m "Merged in my scary experimental stuff"
      --
      Yeah, right.
    47. Re:Well *I'm* ugly and stupid... by stoborrobots · · Score: 2, Informative

      meanwhile, if you're using SVN on Unix/Linux boxes, you might want to check out svk. All the advantages of a DVCS, but with the central repo being a (possibly pre-existing) standard svn server.

      (I put the disclaimer about unix boxes in because the last time I had a colleague on a Mac running SVK, there were some minor issues around binary files and line ending munging... I don't know if they are resolved already or not...)

    48. Re:Well *I'm* ugly and stupid... by stoborrobots · · Score: 1

      ... at some of the Subversion conferences they have even talked about adding support for the offline access to a local copy of the repository.


      Doesn't SVK start to fill that role?
    49. Re:Well *I'm* ugly and stupid... by try_anything · · Score: 4, Funny

      I seriously do mind if you write it on your laptop on the beach, check it in to your local repository and then get your laptop stolen (or covered in margeritas). And the Subversion user would presumably have... teleported himself to a wifi hotspot to check in his work?

      Of course a CVS user only updates once a week and checks in once a month, so being on the beach for a few days wouldn't make any difference at all.

      I have used Subversion, git, and most recently CVS, and the only big risks I've taken have been with CVS, where everything is so constrictive and painful that I tend to check in as little as possible. The bottom line is that whatever makes for the easiest, most natural development process will result in more frequent check-ins and less lost work.

      (I've just stopped asking my colleagues, "How do I ___ in CVS?" because the answer is always slack-jawed silence, followed by, "Why would you want to do that?" accompanied with a suspicious squint-eyed stare that makes me feel like I'm in Deliverance, right there in a cube farm full of college-educated yuppies. CVS warps your brain to the point where you don't think there is ever any good reason to, say, rename a directory, and anyone who wants to rename a directory must be some kind of alien, possibly a marketer or a salesman who wandered into the wrong department, because a Real Programmer would never think up such a bizarre idea as renaming a directory to reflect its current contents. I mean, you pick a name, and it stays forever, right, like a street name! You don't go to Market Street and expect to find a market, so why are you surprised to find the networking code in the tpe_bckp directory? Gary Graybeard can tell you all about how it got that way, and it's a fascinating story. Think of all the rich history that would disappear if you renamed it the "net" or "networking" directory. So depressingly literal. And speaking of depressingly literal, the history would *literally disappear*, and the whole reason we have a SCM system is so we don't lose history. So don't go making changes that it doesn't know how to track, you hear?)
    50. Re:Well *I'm* ugly and stupid... by try_anything · · Score: 1

      You can't make them check in their changes no matter what SCM they use. CVS users are notorious for going weeks at a time without checking in, because branching is an enormous hassle. If you have some policy or mechanism that effectively forces them to check their work into CVS, why can't you apply that policy or mechanism to a distributed SCM system?

    51. Re:Well *I'm* ugly and stupid... by try_anything · · Score: 1

      I don't think the distinction between centralized and decentralized is all that important when comparing systems for use in a centralized manner. Of all the SCM tools in common use, the one that does the most to encourage "disconnected" behavior is CVS, because branching is a horror. Nobody wants to manage private branches, so they only check in working code. A large change is checked in when it's (approximately) done, even if it takes a month to complete.

      On the other hand, Subversion is pretty good at encouraging "connected" behavior. When you consider that CVS and Subversion are two implementations of the same idea, it seems that the usability of a given implementation is more important than the abstract idea behind it.

    52. Re:Well *I'm* ugly and stupid... by nguy · · Score: 1

      Errr. I don't see how without jumping through a lot of hoops.

      There's nothing to jump through. The equivalent of an "svn commit" is a push on a distributed version control system. It's as simple and automated.

      If I have n users in my software team and they each have a local repository copy and "commits" that they make are made to that local repository then it basically requires me to backup everyone's PC in order to ensure that work is not lost.

      This is no different from Subversion: with Subversion, people will sit on local modifications until they are ready to commit them to the server. Relative to a DVCS, Subversion simply denies users the ability to do version control for their local modifications, so people often end up with huge commits that are hard to integrate.

      I fail to see why you would bother - other than if you have a particular religious requirement to use a DVCS ;-)

      It's not religious. Subversion has a real and serious deficiency relative to distributed version control systems: there is important stuff it simply doesn't do. Svk is the best workaround, but it still has problems and limitations.

    53. Re:Well *I'm* ugly and stupid... by llirik · · Score: 1

      You can do checkout-edit-checkin in SVN as well. That's what locks and svn:needs-lock property are for. See overview and details in official documentation.

    54. Re:Well *I'm* ugly and stupid... by maxume · · Score: 1

      That's assuming that policy allows the developer to create a branch on a whim.

      --
      Nerd rage is the funniest rage.
    55. Re:Well *I'm* ugly and stupid... by Antity-H · · Score: 1

      This confuses me. Why can't you just have a corporate server with a repository that is the "official" repository (i.e., a centralized repository), but individuals can checkout a version, then work on it at the beach or wherever--including "committing" at the beach on their local laptop. However, until they push that change back to the central server, it is not considered completed work? This doesn't seem to be any different than having a true centralized svn repository, checking out code, working at the beach, then committing it later.

      Even if you have a centralized svn repository, someone can checkout, make changes at the beach, then spill a margarita on the laptop and lose that work anyway.

      On the surface it isn't any different, but think about it this way : there is _no_ need for the developper to push to the centralized location. the developper would still be able to enjoy all the advantages of the version control. The only thing left to make him push to the centralized repository is policy. And you should know that a policy won't be followed unless it is backed up by usefulness for the undertaker. That's just human nature. Therefore people will work locally and work will be lost. Sure the failure rate of computer is significantly lower now than it was, but this has the potential to make losses occur that would have been prevented using a centralized VCS.

      As for the people saying it is hard to branch and merge in subversion, please try using it again. Especially now that it has basic merge tracking support. This goes a long way to cover the 80% of the cases that matter. I do agree that CVS is obselete.

      Now that i have said this: I also enjoy using DVCS and there are even cases when they _are_ great for corporate work. not so long ago I was working on a project where part of the team was in india, part in tunisia and part in france at different locations. We seriously considered implementing a DVCS solution (svk based actually) but were prevented from doing it because of "corporate security" (yeah I know, don't tell me about it :( some)

    56. Re:Well *I'm* ugly and stupid... by Just+Some+Guy · · Score: 1

      We're still using CVS here (much to my annoyance) but are planning to switch to something new soon.

      I hadn't realized that so many people were using DCVS before this article, so I'm also going to start investigating. We may or may not switch, but now we'll at least know about the alternatives.

      Having said that, is your office culture wrapped around CVS? If so, SVN is a pretty natural upgrade path. Everything works pretty much the same way, except with "svn" instead of "cvs", and you can ease into the new-to-CVS-user features once everyone is comfortable with it.

      --
      Dewey, what part of this looks like authorities should be involved?
    57. Re:Well *I'm* ugly and stupid... by clint999 · · Score: 0

      I mean the idea of being able to commit changes to your local copy of the repository (whatever that is called in your DVCS of choice) without having them pushed up automatically to a "safe" central location. We encourage the use of private branches in SVN

    58. Re:Well *I'm* ugly and stupid... by chthon · · Score: 1

      You forgot bzr. I like bzr. It is easy to use, has a fairly rapid release schedule (with multi-platform releases all at the same time) and a very good mailing list.

    59. Re:Well *I'm* ugly and stupid... by chthon · · Score: 1

      With bazaar, you can create a branch from a central repository, or a checkout. When you commit to a branch, the change is local and needs to be pushed to the central repository. When you commit in a checkout, the change is immediately pushed to the central repository. I do not know enough about triggers in bzr, but I presume it should be possible to write one which makes it impossible to checkout branches, but only checkouts.

    60. Re:Well *I'm* ugly and stupid... by Fulcrum+of+Evil · · Score: 1

      yeah, watch out - they might do their merge overwrite-style.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    61. Re:Well *I'm* ugly and stupid... by angel'o'sphere · · Score: 1

      Well,

      in an corporation you still have "the central server". The one you back up and the one from wich you make your nightly builds and the on from you distribute / install your releases. There is absolutely no difference to "normal" versioning.

      But in addition developers can have their own repository with their private versions (and can even merge between each other). I usually use *2* versioning systems. CVS *or* SVN inside of the corporation where I'm working , and the *other* one for my private versioning.

      The point is: I *need* my private repository because during refactorings I like to have a repository for large scale *undo* operations. And: YES, the code in my private repository is not required to compile ... it is just text with version numbers and commit comments.

      angel'o'spehre

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    62. Re:Well *I'm* ugly and stupid... by angel'o'sphere · · Score: 1

      The point is pretty simple.

      I like to work FOCUSED. I do something, work on an issue/task/feature I thought about first, then I coded it, then I commit it. Then I work on the next thing. When I'm in the train to my next conference and I descide to code on the trip *I WANT TO COMMIT IT* to my own private repository. Yes, I commit about 4 to 10 times per hour ... and my coworkers cry if I do that on the central server. And I really don't like to bother wether code compiles, runs, passes a test or not ... until I indeed commit it to the central server.

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    63. Re:Well *I'm* ugly and stupid... by Anonymous Coward · · Score: 0

      One of the best things is you can checkin changes, roll back to previous versions, branch, merge, etc... all on your local repository while you're on the plane or beach where there is no network access. With Subversion you can't do that.

      If your SVN repository is on a server, you *can* roll back to previous versions or do diffs without network access. That's an advantege that SVN has over other client/server version control systems.
      The others you can't do.

      However you can make a SVN repository on your local file system and do all of that. It's less useful, since if the laptop dies/gets stolen, it's gone.

  3. SVN Sticking around? by TofuMatt · · Score: 2, Funny

    Git out of here.

    --
    -Matthew Riley "TofuMatt" MacPherson
    I have a website
  4. Uhm... by warrax_666 · · Score: 1

    Give developers a personal directory on a shared network drive. Developer repositories/branches stay there(*). Backup shared network drive. Done.

    (*) Don't know about any other systems than Bazaar, but I expect they have similar functionality: Bazaar has "checkouts" which enable you to have a local branch (i.e. on C:/Projects/Whatever) while also auto-committing to the "source" (i.e. the shared directory/drive) when you do a local commit.

    --
    HAND.
  5. Git vs Subversion by KiloByte · · Score: 4, Informative

    While Git obviously has its strong sides, often quite overwhelming, there are cases when it sucks compared to SVN:
    1. timestamps. Subversion doesn't do that by default, but it has good enough metadata support than timestamps can be hacked in easily. For Git, metastore is nearly worthless. If you store a program source, you risk just skewed builds -- for other types of data, lack of timestamps is often a deal breaker.
    2. move tracking: trying to move a directory branch from one dir to another means you lose history. Rename tracking works only sometimes, often it will take a random file from somewhere else, etc.
    3. large files. Take a 100MB binary file into SVN, change one byte, commit. Change one byte again. And again. Git will waste the freaking 100MB for every single commit.
    4. partial checkouts. If there's a 5GB repository, you'll often want to check out just a single dir. With Git, there is no such option.
    5. ease of use. I see that ordinary users, web monkeys and so on can learn SVN easily; with Git, even I had some troubles initially.

    On the other hand, SVN used to have no merge tracking (I wonder what that "limited merge tracking" in 1.5 means...) which for distributed development of program sources is worse than points 1..5 together.

    --
    The creatures outside looked from Alt-Right to Antifa; but already it was impossible to say which was which.
    1. Re:Git vs Subversion by Anonymous Coward · · Score: 0

      Regarding #4, If you're only checking out a single directory and allowed to make a commit, how did you build/test your 5GB project?

      If that directory was an independent piece, it should be in a separate repository since it's logically independent. If that directory is part of a larger whole, you shouldn't be allowed to work with just that one piece. (IMO)

    2. Re:Git vs Subversion by KiloByte · · Score: 4, Insightful

      Regarding #4, If you're only checking out a single directory and allowed to make a commit, how did you build/test your 5GB project? Note that I specifically mentioned "for things other than program sources". Most other pieces of software does not require builds, and neither it is monolithic.
      To commit a change to the Linux kernel, you do need to build the whole thing. That's a monolothic thing.
      To commit a change to a webpage, a graphical project, a set of biochem data, you don't need that. Do you need to check out the countless megs of Wesnoth to update your changes to a campaign? That's a modular thing.

      If that directory was an independent piece, it should be in a separate repository since it's logically independent. If that directory is part of a larger whole, you shouldn't be allowed to work with just that one piece. (IMO) If I want to modify a 5GB webpage, why would I want to checkout unrelated pieces? And having every subpage in a separate repository would be counterproductive.
      --
      The creatures outside looked from Alt-Right to Antifa; but already it was impossible to say which was which.
    3. Re:Git vs Subversion by 0xABADC0DA · · Score: 2, Insightful

      As a programmer, what pisses me off most about subversion is... well just check out their codebase and look around a bit. Yeah, it works and it does 90% of what people want it to, but the code is a giant piece of shit. That svn has been developed as a total hack job and they seemingly have spent no effort over time trying to clean it up, as a programmer, offends me. I don't know how anybody can have confidence in svn when they can't even do simple changes to it.

      They've been working for years to do simple things like just updating their folder structure so it doesn't leave ".svn" folders everywhere. Or just providing an option to not store a second copy of your 2 gig repository just so you can do restore to Head (and that's all) without asking the svn server which is probably over in the closet on the gigabit ethernet anyway. They can't do this with their current code... it's so bad that they are trying to scrap the local store code entirely.

      ... and then there are the even simpler things like why tf can't I say "svn mv *.[ch] newfolder/" or any of the other commands that you have to use shell scripting to accomplish? That kind of thing should be simple. There are a lot of these kinds of problems in svn that never gets fixed (despite having a guy at google that is apparently paid to hack on svn).

    4. Re:Git vs Subversion by Chemisor · · Score: 3, Interesting

      > 1. timestamps.

      I don't see what you are talking about. git timestamps every commit too.

      > 2. move tracking: trying to move a directory branch from one dir to another means you lose history.

      No you don't. If you use "git mv", like you're supposed to, history moves with you.

      > 3. large files. Take a 100MB binary file into SVN, change one byte, commit.
      > Change one byte again. And again. Git will waste the freaking 100MB for every single commit.

      No it won't. In fact, it will use less space than SVN for that commit. Yes, git supports diffs on any kind of file, and stores them that way. It didn't always, but the current version certainly does.

      > 4. partial checkouts. If there's a 5GB repository, you'll often want to check out just a single dir.

      That's what git submodules are for. Furthermore, git repositories are smaller than Subversion repositories by a large factor. At least twice, and I've seen as much as a tenfold reduction. Linux 2.6 repository is only 255M in size, and that's a huge project. Anything you do will likely be much smaller.

      > 5. ease of use. I see that ordinary users, web monkeys and so on can learn SVN easily;

      Bullshit. The commands are almost exactly the same. I don't know what people are complaining about.

    5. Re:Git vs Subversion by 2short · · Score: 1

      "...you shouldn't be allowed to..."

      Generic answer to any justification for amissing feature that uses that phrase: Bite me; I'm the fracking user here, I should be allowed to do whatever I need.

      Specifically, my SVN repository has 30+ top level directories. One is needed by all projects, a couple are needed by a handful of projects, and most are needed by just one project. Updating every project I never have and never will work on every time would be stupid.

      I've no doubt Git blows the doors off SVN for managing the Linux kernel tree. But for my purposes, the issues KiloByte lists are big deals, and the distributed advantages of Git are pointless.

    6. Re:Git vs Subversion by slipsuss · · Score: 5, Informative

      I'm shocked you say this -- for years I've heard nothing but compliments about how readable, well organized, well documented, and stylistically consistent Subversion's codebase is. There's a whole HACKING guide that explains the styles -- both semantic and syntactic. It's something we're quite proud of.

      As a matter of fact, a guy doing a demo at an Apple Developer conference once used the svn codebase as 'something big to compile' when demonstrating the XCode IDE. When we asked why he used svn, he said that it was "the only open source codebase he'd ever seen which compiles with no warnings."

      If you have specific criticisms about the codebase, we'd like to hear. Instead, your post just seems to be about how your personal wish-list of features has never been added, and therefore "the codebase must be really bad." I'm not sensing any logic to this conclusion.

      svn 1.6 is going to likely have .svn/ metadata centralized in one place, the way DVCS systems do. It will also likely make the "extra copy" of files be an optional thing, as many have asked. And svn 1.5 fixes the 'svn mv * foo/' wildcard expansion behavior.

      The fact is: we haven't added your pet features yet because we've been too busy working on other big fish, like FSFS, svnserve, locking, svnsync, SASL support, changelists, interactive conflict resolution, and oh yeah... automatic tracking of merges. :-)

      The working copy code was designed in a specific way -- the scattered .svn/ areas and extra cached copies of files was deliberate, and considered a feature. Just because we can't write 100 lines of code and "magically" make it behave in opposite ways doesn't mean it's a bad codebase. Even the *best* codebases are based on certain foundational assumptions -- some things are abstracted, some aren't. The things you complain about weren't switches we thought we'd ever need to flip, so we put the abstractions in other places.

    7. Re:Git vs Subversion by Anonymous Coward · · Score: 0

      Just because we can't write 100 lines of code and "magically" make it behave in opposite ways doesn't mean it's a bad codebase.

      Aww. Shucks, you mean I can't take:

      if (should_work) { work(); }
      ...and change it to...

      if (!should_work) { !work(); }

      ... and expect it to work the opposite way? *blinks incompetently*

      Really good point though. :)

    8. Re:Git vs Subversion by Wulfstan · · Score: 1

      Ben - just a big thankyou for all of your work on SVN. It has definitely changed my company's life for the better and all of your energies are appreciated!

      I can't wait for better merge tracking, that's my number one hot-button issue.

      --
      --- Nick, hard at work :->
    9. Re:Git vs Subversion by Anonymous Coward · · Score: 0

      I'm shocked you say this -- for years I've heard nothing but compliments about how readable, well organized, well documented, and stylistically consistent Subversion's codebase is. There's a whole HACKING guide that explains the styles -- both semantic and syntactic. It's something we're quite proud of. Really it's the sheer volume of nothing in svn that is the worst thing. Layers upon layers of nothing. The fact that you are PROUD of having a hacking guide and emacs macros to enforce your GNU style doesn't help.

      "First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture." Learn from some people who know how to write good code.

      Just because we can't write 100 lines of code and "magically" make it behave in opposite ways doesn't mean it's a bad codebase. ... some things are abstracted, some aren't. The things you complain about weren't switches we thought we'd ever need to flip In a good codebase these things I mentioned are trivial. The reason to have abstractions is because they make the implementation easy to change. Instead, in svn the abstractions make it harder to change.

      Instead, your post just seems to be about how your personal wish-list of features has never been added, and therefore "the codebase must be really bad." I'm not sensing any logic to this conclusion. I don't think you appreciate how easy it is to accomplish these things in other, better codes. That was my point in bringing up some things that should be easy.

      Well if you really want an example how about:

                  SVN_ERR(dir_baton->edit_baton->callbacks->file_deleted
                                  (NULL, NULL, path,
                                    textbase,
                                    empty_file,
                                    base_mimetype,
                                    NULL,
                                    baseprops,
                                    dir_baton->edit_baton->callback_baton));

      Four level of indirection to call a method with 9 parameters... really? Come on.
    10. Re:Git vs Subversion by aCC · · Score: 1

      If I want to modify a 5GB webpage, why would I want to checkout unrelated pieces?

      Wow, that is one hell of a webpage!!! Maybe you should trim it a bit to improve loading times. ;-)

    11. Re:Git vs Subversion by slipsuss · · Score: 3, Interesting

      SVN_ERR(dir_baton->edit_baton->callbacks->file_deleted

                                  (NULL, NULL, path,

                                    textbase,

                                    empty_file,

                                    base_mimetype,

                                    NULL,

                                    baseprops,

                                    dir_baton->edit_baton->callback_baton));

      Four level of indirection to call a method with 9 parameters... really? Come on. This is what object-oriented programming looks like in C, when there's no C++ to make it pretty. You have function pointers and their associated "closure' context objects being passed around everywhere as pairs. And lots of tables of function pointers (vtables). So in this example, we have a local closure object (dir_baton) referencing a vtable within a parent closure object, and calling a function from that vtable.

      Go look at GTK/GNOME: they have the same sorts of problems, though they tend to do things with a huge series of object-type macros to simulate inheritance.

      The 9 parameters are there because it's a complicated routine used in different contexts. There are no 'optional' parameters like in python.
    12. Re:Git vs Subversion by stsp · · Score: 1

      As a programmer, what pisses me off most about subversion is... well just check out their codebase and look around a bit. Yeah, it works and it does 90% of what people want it to, but the code is a giant piece of shit. That svn has been developed as a total hack job and they seemingly have spent no effort over time trying to clean it up, as a programmer, offends me. I don't know how anybody can have confidence in svn when they can't even do simple changes to it.
      Dear programmer, I'm very sorry that you feel offended by our code. If you have some time to spare even though you must be working on very important projects, please provide patches that make our code less offensive to you and other programmers. But maybe you were actually reading CVS's code and thought you were reading Subversion's? :)

      They've been working for years to do simple things like just updating their folder structure so it doesn't leave ".svn" folders everywhere.
      Er, no. Nobody has been working on that. Central meta data storage is one of the things being discussed for the new working copy library. IMHO the .svn folders scattered around the working copy is a misfeature we've inherited from CVS. But I can't blame those who made that decision (I joined the project about a year ago so I wasn't around at the time). Since their goal was to create a better CVS, many of CVS's design aspects were copied. We can still fix this, though. When the working copy rewrite happens, you'll get your central meta data storage, don't worry.

      Or just providing an option to not store a second copy of your 2 gig repository just so you can do restore to Head (and that's all) without asking the svn server which is probably over in the closet on the gigabit ethernet anyway. They can't do this with their current code...
      You're trying to make it sound like you knew what you were talking about, but you are using the terms all wrong. We're not storing a "second copy of your 2 gig repository", we're storing copies of what your files look like at the BASE revision (the one you checked out). This speeds up creating diffs, it has nothing to with the HEAD revision. What do you mean by "doing a restore to HEAD"? Also note that the working copy cannot tell what current HEAD looks like without asking the server, since it cannot magically see commits made by other people.

      it's so bad that they are trying to scrap the local store code entirely.
      Yep, we know the current working copy code sucks. There, I said it. It's a big piece of code that has evolved over time and got a lot of functionality lumped into it without proper design. Work is being done to fix this, see http://svn.collab.net/repos/svn/trunk/notes/wc-ng-design

      ... and then there are the even simpler things like why tf can't I say "svn mv *.[ch] newfolder/" or any of the other commands that you have to use shell scripting to accomplish? That kind of thing should be simple.
      I wonder why this does not work for you, it does for me:
      $ svnadmin create repos
      $ svn co file:///tmp/repos wc
      $ cd wc
      $ echo a > a.c
      $ echo b > b.h
      $ svn add a.c b.h
      A a.c
      A b.h
      $ svn ci -m "added some files"
      Adding a.c
      Adding b.h
      Transmitting file data ..
      Committed revision 1.
      $ svn mkdir newfolder
      A newfolder
      $ svn mv *.[ch] newfolder
      A newfolder/a.c
      D a.c
      A newfolder/b.h
      D b.h

      There are a lot of these kinds of problems in svn that never gets fixed
      As is the case with virtually every other software in existence -- every software has problems.

      (despite having a guy at google that is apparently paid to hack on svn)
      Who is this one super magic wizard guy? Quite a few Subversion developers are employed by several companies (not just google).
    13. Re:Git vs Subversion by Anonymous Coward · · Score: 0

      The 9 parameters are there because it's a complicated routine used in different contexts. There are no 'optional' parameters like in python. Personally, I am amazed that you guys are 'shocked' that somebody might not appreciate your complicated routines that are used in different contexts.

      This is what object-oriented programming looks like in C, when there's no C++ to make it pretty. A) C++ is not pretty by any sense
      B) if you are going to reinvent C++ you might as well just use C++.
      C) you don't need C++ to write a version control system.

      ... like I said before, layers of nothing. But you know what, fine, go on thinking your code is the cat's pajamas.
  6. Depends on the environment by Todd+Knarr · · Score: 4, Insightful

    If you're in a highly-distributed development environment like Linux, where the developers are spread across multiple continents and have very little shared infrastructure and a high need to work independently of each other (either because of preference or because they don't want their work stalled by another undersea cable cut half a world away), then yes using a centralized VCS like Subversion is stupid. But if you're a developer on a project where all the developers are in a common location sharing common infrastructure, often literally within speaking distance of each other, then a decentralized VCS like Git is stupid. It's harder to maintain and, in that situation, yields none of the offsetting benefits.

    Analogy: a fleet of Chevy vans vs. a freight train. The vans are far more flexible, they can travel any route needed whereas the freight train's limited to fixed tracks, and their smaller size and lower cost each let you buy a lot of them and dedicate each one to just a few deliveries in a particular area without a lot of overhead. You can fan the vans out all over the city, sending just what you need where it's needed and rerouting each one to adapt to changes without upsetting the others. But if your only delivery each day is 1000 tons of a single product from one warehouse to another 600 miles away, you're better off with that one big freight train.

    1. Re:Depends on the environment by corbettw · · Score: 1

      If you're in a highly-distributed development environment like Linux, where the developers are spread across multiple continents and have very little shared infrastructure and a high need to work independently of each other (either because of preference or because they don't want their work stalled by another undersea cable cut half a world away), then yes using a centralized VCS like Subversion is stupid.

      I'd say the important differential between SVN/CVS and Git/Mercurial is the independent infrastructure. If you have thousands of developers working on a large project (or projects), spread around the world, you can still use a central repository (or maybe a collection of them) to manage source control. As long as they share a common infrastructure (eg, a WAN), it makes no difference if it's 10 guys in a start-up, or IBM working on their latest upgrade to Websphere.

      Having said all that, there are tons of open source projects who use SVN for large teams of developers (Django comes to mind as one example) who have no problem using SVN for source control.
      --
      God invented whiskey so the Irish would not rule the world.
  7. Linus has a big mouth... by gweihir · · Score: 5, Insightful

    ... and is primarily focussed on kernel development. Some would even say it is the only thing he knows how to do. That is fine, but it does not make him an authority on version control systems for other types of projects. Kernel development has very specific needs, not mirrored by other projects. Personally I find SVN perfectly adequate for small teams, and not only for program source code, but also for texts.

    --
    Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    1. Re:Linus has a big mouth... by nuzak · · Score: 3, Insightful

      Linus has a long history of flapping his jaw about kernel development topics he knows nothing about as well. To his credit, they often become topics that he didn't know about at the time that he then becomes well-educated on (SMP and /dev/poll to name a couple) but sometimes it's on things he religiously refuses to learn anything further about (microkernel architectures).

      He's an excellent assembly hacker, a fast learner, and at least a majority of the time a nice guy, so most people overlook it.

      --
      Done with slashdot, done with nerds, getting a life.
    2. Re:Linus has a big mouth... by burris · · Score: 1

      Even when I code by myself on my own projects I greatly prefer the flexibility of git over Subversion. Why settle for "perfectly adequate" when you can have your choice of several tools that are much better?

    3. Re:Linus has a big mouth... by Anonymous Coward · · Score: 0

      sometimes it's on things he religiously refuses to learn anything further about (microkernel architectures). Not exactly the best example... GLPv2/v3 comes to mind as Linus being religiously malignorant.

      Microkernels like what you probably mean are just not practical due to performance and code obstacles. Sorry. "Typesafe" microkernels like Singularity or JavaOS are the way to go, but also impractical simply because they don't run existing unsafe (mostly C, C++) programs well.
    4. Re:Linus has a big mouth... by Anonymous Coward · · Score: 0

      What about OSX?

    5. Re:Linus has a big mouth... by Anonymous Coward · · Score: 0

      OS X is not microkernel at all. It has some memory protection in Mach and then the bsd 'server', but these are both linked together into the same memory space and basically the only difference is that there are some negative syscall numbers that do mach-ish things in addition to the positive syscalls that do unix-ish things. And it's actually far more complicated than say Linux.

      But OS X is a good example for drivers... they aren't isolated like in a microkernel, but they are written in c++ and so most are just a few tweaks to some generic drivers.

    6. Re:Linus has a big mouth... by mccoma · · Score: 1

      QNX?

  8. Distributed VCS can be used like this by this+great+guy · · Score: 3, Insightful

    You do realize that a distributed VCS can perfectly be used like a centralized VCS, don't you ? Declare any repository as the "central" one and decide that everybody should push/pull to/from it. That's their power: discributed VCS don't force you into a specific workflow, you choose how you want to use them.

    1. Re:Distributed VCS can be used like this by Wulfstan · · Score: 2, Insightful

      What worries me is that it encourages behaviour which leaves valuable changes sitting on a disk which may not be backed up. I see changes being made to a codebase like valuable little bits of gold which need to be kept somewhere nice and safe, which is not on individual machines but on the server (RAID, redundant power, UPS, etc)

      Yes, if you are disciplined about how you use it then I'm sure you can use it like any centralised VC. It is a tool - it is not evil - it just encourages what I see as risky behaviour in my particular environment. But I can fully understand that in other contexts it may be useful.

      --
      --- Nick, hard at work :->
    2. Re:Distributed VCS can be used like this by this+great+guy · · Score: 2, Insightful

      What worries me is that it encourages behaviour which leaves valuable changes sitting on a disk which may not be backed up.

      Huh ? If you don't push to the main repo, nobody sees your commits. Don't you think this is sufficient to remember DVCS users they need to push regularly ?

    3. Re:Distributed VCS can be used like this by Wulfstan · · Score: 2, Informative

      "Valuable changes" doesn't only mean changes which are destined for HEAD or the equivalent. "Valuable changes" in my opinion is anything and everything that you are doing on a codebase.

      I take your point - if you are responsible in how you use DVCS then I can see that it can be made to work. But in my environment I want all of the changes being made (however offensive or broken) to be centrally auditable and not stashed away in some private repository.

      --
      --- Nick, hard at work :->
    4. Re:Distributed VCS can be used like this by this+great+guy · · Score: 5, Insightful

      How do you force your cvs/svn users to commit ? You can't, you expect them to be responsible and do it. This isn't much different from a DVCS.

      What if a user wants his work to be backed up but doesn't want to commit because his changes are not ready to be published ? A centralized VCS forces them to commit with the side-effect of making their unfinished work immediately visible in the central repo, while a DVCS lets them commit to a private repo that you can back up independently.

      Your backup requirements can be solved 2 different ways:

      • 1. With any VCS (centralized or distributed), put the users' working directories on private NFS/Samba shares. This way everybody's work, committed or not, is on the file server which can be backed up.
      • 2. Use a DVCS. The users' private repos and working directories can remain on fast local storage on their workstations. A file server contains the main repo as well as private spaces that can be used by the users to periodically push to private repos, so they can be backed up without interfering with the main repo.

      Besides, in this debate, you are completely ignoring the other major advantages of DVCS over centralized ones: scalability, no single point of failure, possibility to work offline and have full access to all of the features of your VCS, usually faster than centralized VCS, low-cost branching/merging, etc.

    5. Re:Distributed VCS can be used like this by Chemisor · · Score: 3, Informative

      > What worries me is that it encourages behaviour which leaves valuable changes sitting
      > on a disk which may not be backed up. I see changes being made to a codebase like valuable
      > little bits of gold which need to be kept somewhere nice and safe

      As a developer, I'll tell you that not all changes are "little bits of gold". Sometimes I just want to try something out, and end up with little bits of crap. The way to think about local changes is the same way you think about non-committed changes to your Subversion repository. In Subversion, I will have plenty of changes sitting on my disk, they just won't be committed until I am satisfied with them. In git, I can commit as many times as I like to my local repository and push only the final version to the central branch. This way I can checkpoint my code with intermediate commits. This is extremely valuable, since those checkpoints might not even work at all, and I would never want them to break the main build, but I can still break up my task into little subtasks and redo or revise each one of them in turn. These subtasks are not backed up in your scenario either, and are much harder to manager there.

    6. Re:Distributed VCS can be used like this by marcosdumay · · Score: 1

      Besides, in this debate, you are completely ignoring the other major advantages of DVCS over centralized ones: scalability, no single point of failure, possibility to work offline and have full access to all of the features of your VCS, usually faster than centralized VCS, low-cost branching/merging, etc.

      Except that at a corporate environment only low-cost branching merging holds.

    7. Re:Distributed VCS can be used like this by Uncle+Focker · · Score: 1

      But in my environment I want all of the changes being made (however offensive or broken) to be centrally auditable and not stashed away in some private repository. But that's a risk of any VCS. Exactly how is that any less of a concern just because you have a centralized server? I've seen that exact situation happen innumerable times using a CVCS. It seems more like you're just afraid of something you don't understand.
    8. Re:Distributed VCS can be used like this by Wulfstan · · Score: 1

      It's less of a concern because the pattern of behaviour that is encouraged. DVCS encourages independent working in an "uncontrolled" independent repository whereas CCVS encourages working interdependently in a centralized repository. So it's less of a concern because unless you really go out of your way to be a psycho (weeks without committing a change) you will naturally commit your changes for fear of losing your version history.

      It's always possible to have some psycho who does an svn export and makes his own little repository somewhere away from the rest of the team. Yes, I've seen it done too. But tools naturally support certain ways of working and DVCS I think encourages behavior which would not be desirable in corporate software development.

      It's not that I don't understand how it works, I do - and I appreciate that you can use any tool irresponsibly - but I'm not convinced that for the type of software development that most companies do DVCS makes sense.

      --
      --- Nick, hard at work :->
    9. Re:Distributed VCS can be used like this by Wulfstan · · Score: 1

      I appreciate that this is an advantage or working in a DVCS - but I think a better way of addressing this issue would to have better branch/merge support in SVN rather than independent local repositories.

      You may consider them "bits of crap" - but I'd rather have your work, no matter how crap you consider it, somewhere where I'm relatively certain I can recover it if your laptop or PC craps out. You can still have them on a private branch (this is what I encourage - so they are backed up!) and you get the subtask advantage you mention without the risk of losing a local repository.

      I don't defend SVN's branching though, because it's garbage. I wonder how many people are DVCS fans because the branching is so much better - this would certainly be my key priority if I were planning what to do next with SVN.

      --
      --- Nick, hard at work :->
    10. Re:Distributed VCS can be used like this by Chemisor · · Score: 1

      > You may consider them "bits of crap" - but I'd rather have your work, no matter how crap
      > you consider it, somewhere where I'm relatively certain I can recover it if your laptop or PC craps out.

      Why? The chances of hard drive failure are extremely low. In my entire life, I have only had it happen to me twice. If you don't buy used drives on eBay, it will probably never happen to you at all. But let's say it happens once every ten years. A temporary branch of the kind I was talking about is probably only one or two days of work at most (if more, you really should reduce the size of your workitems) $70/hour * 16 hours is $1120. More than that, the second time around I'll know exactly what I'm doing, so I'll be able to retype it in maybe half the time, so say $500. At the above failure rate, that's $50 per year per developer on top of their $140000 salary. And how much does it cost you to run your backups? Does this help put things in perspective?

      > I appreciate that this is an advantage or working in a DVCS - but I think a better way of addressing
      > this issue would to have better branch/merge support in SVN rather than independent local repositories.

      You're still missing the point. Backups just aren't as important in a DVCS, and that's a major feature. You are shaking in fear, lest your precious repository dies, and obsess over backing it up. But consider: if your central server goes down, how long would it take you to restore it from backup? In my experience with corporate IT, it takes at least half a day. During which nobody can do any work. No central server, no private branches, no nothing. How much productivity does that lose?

      With git, everybody can keep working no matter what. In fact, they can immediately create a new "central" repository on another machine by pushing to a git server there. Time lost? None! No disruption to workflow at all, and you don't need to run backups of any kind.

    11. Re:Distributed VCS can be used like this by Uncle+Focker · · Score: 1

      It's not that I don't understand how it works, I do - and I appreciate that you can use any tool irresponsibly - but I'm not convinced that for the type of software development that most companies do DVCS makes sense. Except you keep making points that clearly show that you don't know how it works.
    12. Re:Distributed VCS can be used like this by NNKK · · Score: 1

      And what backwater corporate environment do you work in? We have developers working from home (both full and part time), developers working while on business trips around the country, even developers living and working on entirely different continents. All of these can benefit from the features of distributed version control systems.

    13. Re:Distributed VCS can be used like this by Wulfstan · · Score: 1

      You've made a good argument there but the problem is not the labour cost - if it were just that then it would be less of a concern. The problem is that there are project-related issues (delivery dates for example) which make a lost repository a far more significant issue than just the labour cost of retyping the code.

      Regarding costs of backup - basically the repository is just mirrored on a daily basis - so recovering the entire repository is probably not half a day but an hour at most. And the chances of losing it on a RAIDed server with all the usual bells and whistles are basically insignficant.

      You're right about hard disk cost and reliability, I see fewer and fewer losses as a result of hard disk crashes every year and so maybe my position is starting to look a bit lame.

      But I tell you what. I'll experiment with using DVCS on a project soon and will see if the shortcomings are less significant than I am making out. More reliable branching and merging could be sufficient to change my mind, even if there is some potential loss of data security (however small the chance). It will also have the side benefit (if Linus is telling the truth - why would he lie?) of making me a genius who is irresistable to women. Who could pass up that offer ;-)

      --
      --- Nick, hard at work :->
    14. Re:Distributed VCS can be used like this by stoborrobots · · Score: 1

      I'll experiment with using DVCS on a project soon and will see if the shortcomings are less significant than I am making out.


      One possibility, if you want a low-time-cost way to try a DVCS, is to try SVK on an existing svn server.

      To make it easy, I've copied and paraphrased the quickstart I was given for the first time I was introduced to SVK...

      I'll assume you've downloaded and installed SVN and SVK.

      First step is mirroring:
      user@host$ svk mirror svn://repository/url //mirror/project
      Committed revision 209.


      Sync the whole SVN repository locally:
      user@host$ svk sync //mirror/project
      Syncing svn://repository/url
      Retrieving log information from 1 to 4
      Committed revision 210 from revision 1.
      Committed revision 211 from revision 2.
      Committed revision 212 from revision 3.
      Committed revision 213 from revision 4.


      Has the mirror happened?
      user@host$ svk mirror --list
      Path Source //mirror/project svn://repository/url


      Now, I find the naming of the 'mirror' strangely counter-intuitive. The mirror doesn't get modified by your changes until the server gets modified. It is truly a mirror, which is why I say it's 'strangely' counter intuitive.

      The implication of this is that whether or not you make a local branch affects how you commit. To simplify the thinking, I'll ask a question. Take the option appropriate to the answer you give. The question is - when you commit changes, would you (a) like to commit directly back to the mirror, or (b) to commit to a local repository, and only later back to a mirror?

      If you prefer to work in mode (a), you can do:

      user@host$ svk co //mirror/project
      Syncing //mirror/project(/mirror/project) in /home/user/code/project to 213.
      A project/documents
      A project/documents/StoryOverview.doc
      A project/documents/StoryChapters.html


      And edit the files... Type 'svk ci' to commit your changes. Your changes will affect the mirror immediately, and therefore the *server* at svn://repository/url immediately.

      If you have a preference for (b), you should:

      user@host$ svk copy //mirror/project //local/project
      Waiting for editor...
      Committed revision 216.

      user@host$ svk co //local/project
      Syncing //local/project(/local/project) in /home/user/code/project to 216.
      A project/documents
      A project/documents/StoryOverview.doc
      A project/documents/StoryChapters.html


      Now, when you type 'svk ci' commits are made only to the *local* repository. To push them back to the main repository (on the server) you need to type 'svk push'. To freshen your local copy with changes from the server, type 'svk pull'.


      Notes: option (a) corresponds to using SVK as a CVCS frontend to SVN, while option (b) corresponds to using it as a DVCS frontend instead, so it's easy to switch between behaviours.


      This quickstart misses the need to run svk sync occasionally, but it should get you up and running, anyway...
    15. Re:Distributed VCS can be used like this by Chemisor · · Score: 1

      > The problem is that there are project-related issues (delivery dates for example) which make
      > a lost repository a far more significant issue than just the labour cost of retyping the code.

      I say this is a management issue, not a technical one. If the code is on a private branch, it is not good enough to be committed, which means it isn't going to be in the release anyway. So no, you won't miss a release just because somebody's disk crashes. But what if he was working on something critical, you'll say? If you are at a point just before a release, there should not be anything critical, or your release will be garbage. At the end of the cycle, all workitems should be very small, or your management needs firing. Remember, you only back up once a day anyway, so if someone's disk crashes intraday, their work will be lost in your svn setup just like it would be lost with git.

      > the repository is just mirrored on a daily basis - so recovering the entire repository is
      > probably not half a day but an hour at most.

      Are you including the time needed to get another hard disk? Do you have a spare you could plug in right now? Many people don't. Or maybe reinstall the OS, if that machine just happened to have only one drive in it. Some admins do that, especially if the boss is keen on cutting costs, as I'm sure you know.

      > And the chances of losing it on a RAIDed server with all the usual bells and whistles are basically insignficant.

      The smaller chance of failure is IMO easily offset by the critical nature of it. Your SVN repository is a single point of failure. If your server dies and the backups are bad, your company is dead meat. No kidding. No code, no product. No product, no money. No money, no company. It's that vital. If you are using git, losing a repository, a server, or any developer's machine barely qualifies as an inconvenience. A worrying type, like us, should find this a source of indescribable happiness. You really get more security with DVCS, not less.

    16. Re:Distributed VCS can be used like this by Anonymous Coward · · Score: 0

      you don't _force_ them to commit, you make them _want_ to commit, because the VCS is providing advantages which enables them to work better. If they get the advantages locally their efforts to "push" won't last past the first couple of weeks. Not to mention it actually adds even more VCS overhead to people we would rather have working on solving our problems. Now I agree that it is useful for vastly distributed teams, but for teams sitting in the same building if not the same open space. It does make the possibility of loosing work higher.

    17. Re:Distributed VCS can be used like this by Antity-H · · Score: 1

      I respectfully disagree. Making the "commit" a _2_ step process (commit + push) is a risk because the second step is not _needed_ from the developper's point of view, unless once in a long while when he wants to send his modifications to the QA team. They already get the full power of VCS with only the first step (commit), thus it encourages a behaviour pattern where the second _additionnal_ step (if compared to a CVCS) is likely to be overlooked. This is what the whole discussion is about : Yes the DVCS does support the CVCS pattern but it requires an additionnal step which may easily be overlooked because it doesn't bring a lot of value to the person it burdens. Again you may be working in this wonderfull team spread all over the world at home and all in which case DVCS _is_ for you, but there are many many many teams who simply work in the same building if not on the same floor or even in the same room, who have a fast corporate network available at all times to the central repository. For those people DVCS introduces more overhead than worth.

    18. Re:Distributed VCS can be used like this by chthon · · Score: 1

      you make good point about the restoration. A couple of years ago I deleted by accident some administrative objects from a Continuus VCS. It took my boss 6 hours to do a restore. It would be better to have a bzr like system, with a parallel repository which could be set up with triggers to mirror every commit, or to do every hour a push if nothing is happening. That way, if something happens, you just switch repositories and everybody can continue.

  9. Spice it up a bit by RockMFR · · Score: 1

    the number of public Subversion DAV servers is still growing quadratically
    No no no! If you want to describe a growth rate, you should always say "exponentially". ALWAYS.
  10. I'm uglier and stupider by Anonymous Coward · · Score: 0

    I run the IT systems for my small software company and frankly, we still use CVS.

    1. Re:I'm uglier and stupider by Dan+Ost · · Score: 1

      I bailed on CVS because I couldn't change names of files without losing their history. I switched over the SVN but then thought I'd give Git a try.

      I've been using Git for a year now and have really only scratched the surface on Git's capabilities, but am completely convinced that, for what I do (R&D and rapid prototyping), Git is far superior to SVN if only because of the easy branching/merging capabilities.

      I'd like to try Mercurial, but haven't made the time yet.

      --

      *sigh* back to work...
  11. Missing the point.. by Anonymous Coward · · Score: 0

    People still seem to miss the point of something like git or BK in the corporate world. The main thing it does is to let developers organize their work before it is moved into the main central repository. Don't kid yourself, most serious devs working with something like SVN in any sort of environment with pre-checkin process will have a large bulk of work that is sitting around invisible to the SCM. Stuff that is waiting to clear the pre-checkin hurdles and be ready for commit.

    The longer it takes to execute your companies QA process, the more desperately you need a distributed SCM.

    git lets the developer organize this stuff very quickly, lets them share it with other people working on related stuff and records important meta-data like 'This is the exact thing I tested'.

    If you have ever sat in a meeting where group A was arguing that group B needed to immediately checkin their not quite done thing because their work depends on it while group C was arguing that it wasn't done enough yet you just wasted an hour because you aren't using a distributed SCM..

    If you ever had to argue with your CVS-czar that you needed a branch you just wasted an hour because you are not using a distributed SCM.

    Thats ignoring the fact that merging doesn't work in SVN :P

  12. Don't knock it till you try it by burris · · Score: 5, Insightful

    Seems to me that most of the people promoting DVCS have used them and have seen the light. Once you use a DVCS on a project you don't want to go back to the bad old way of doing things.

    Most of the people knocking DVCS or saying they can't see the benefits haven't actually used them on any projects. They have built up a framework in their minds of How Things Should Work, but unfortunately that model was defined by the limitations of their tools.

    1. Re:Don't knock it till you try it by Vornzog · · Score: 1

      Seems to me that most of the people promoting DVCS have used them and have seen the light. Once you use a DVCS on a project you don't want to go back to the bad old way of doing things.


      Indeed. The number one complaint I hear about them is that they aren't a centralized system.

      As a one man programming show and a mercurial user, I set up a centralized repository for myself. That was the clean copy - it always worked. I'd have 1-4 other copies out at any given time for whatever I was working on. It offered extreme flexibility, and at the same time, all the usual advantages of having a centralized repository. I know with mercurial (and probably most of the rest of them) that there are ways to formalize that, if it is what you need.

      I hear the same things from people who have worked on larger teams with these kinds of tools.

      Distributed systems let you work the way you think, rather than making you think about the way the tool works.
      --

      -V-

      Who can decide a priori? Nobody.
      -Sartre

  13. we use SVN by Jack9 · · Score: 5, Interesting

    IDE integration:
    SVN is currently integrated with our IDEs (all 3), one of the main selling points in choosing a VCS.

    Ease of backups:
    We archive our repositories every day, IT loves being able to simply tgz the SVN directory and not have to worry about anything else, regardless of the state of any current projects (all groups use SVN).

    Simplicity:
    SVN/Trac training (client use, management, backend workings) takes less than 10 minutes. In another 15 minutes I can have someone setting up their own SVN repositories+Trac, without needing to pull up a single reference document, primarily because the an SVN setup methodology is trivial to memorize.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
    1. Re:we use SVN by CastrTroy · · Score: 2, Informative

      On IDE Integration

      I use Visual Studio with SVN at work, and while it doesn't have IDE integration (AnkSVN sucked last time I tried), which would be optimal, I find that using TortoiseSVN to be pretty adequate, if not better than IDE intergration in a lot of ways (Don't have to open the IDE to do an update on your local copy). I think the thing that makes both IDE integration and TortoiseSVN great is to be able to use a nice GUI to manage you checkins and updates. I mean, the command line works, but this is one area where having a nice GUI can really help.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    2. Re:we use SVN by eddy · · Score: 2, Informative

      > SVN is currently integrated with our IDEs (all 3), one of the main selling points in choosing a VCS.

      Where I work we all use the cmdline, so IDE integration is a complete non-issue in selecting a SCM for some teams.

      > IT loves being able to simply tgz the SVN directory

      Pretty sure that's not the correct way to backup a Subversion repo, unless by 'simply' you mean that you first hot-backup.py the repo and then tar it up.

      --
      Belief is the currency of delusion.
    3. Re:we use SVN by Anonymous Coward · · Score: 1, Informative

      IT loves being able to simply tgz the SVN directory

      If that's literally what they are doing, and they do it without shutting down access to the repository, then its being done wrong (what if someone commits during backup, for example). Hot backups are trivial in SVN, though (see repository dumping). FYI ;-)

    4. Re:we use SVN by Jack9 · · Score: 2, Insightful

      I personally use Tortoise but the IDEs tend to not be change-aware unless I'm using the integrated tool.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    5. Re:we use SVN by Jack9 · · Score: 1

      Pretty sure that's not the correct way to backup a Subversion repo,


      I actually don't know if the files are zipped since the size is not really an issue and I know I don't need anything other than an SVN directory (according to your naming conventions, as such):
      svn/repositories
      svn/conf
      svn/tracenv
      to completely restore all projects along with their Trac (given I have installed Trac), although I can simply rebuild Trac out of an existing repository anyways. We've never had trouble restoring. One of our younger repositories became corrupted. In 30 minutes a restored version of the repository was available. Eventually an svnadmin recover was run on the corrupted repository and it was "repaired", switched back to that one, and have not had issues since with any repository.

      I'm not sure why you would use that, unless you have a db size problem.
      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    6. Re:we use SVN by UnderCoverPenguin · · Score: 1

      IT loves being able to simply tgz the SVN directory Pretty sure that's not the correct way to backup a Subversion repo

      When the repository DB type is "FSFS", you can simply tgz the repo. I have retored such backups a few times.

      In my observation, this is ideal for a corporate IT environment because you are not asking them to do anything beyond the filesystem dump they are already doing.

      --
      Don't try to out wierd me, three-eyes. I get stranger things than you, free with my breakfast cereal. --Zaphod Beeblebr
    7. Re:we use SVN by myopic_bingemaster · · Score: 1

      I've paid for VisualSVN ($50/dev...), and it seems to be well worth it to me.
      The biggest thing that I'm having trouble is wrapping my head around "how to use it" -- the "Make a copy to Tag a release" seems funny to me (I understood CVS, but hated its shortcomings).

      VisualSVN's windows server is also good (it uses AD accounts. yay!), even though it doesn't support all the bells and whistles.

      So my current toolset is:
          VisualSVN Server [$0]
          TortiseSVN [free]
          VisualSVN Client [$50/dev, but a free foss license exists] for Visual Studio integration.

      It isn't baked into the CCVS (or whatever they call it), but it works (unlike Ankh).

      It still has the same warts that SVN has (initial version, you have to commit & then checkout ?!), but it keeps me happier.

  14. SVN's weaknesses by Scareduck · · Score: 3, Interesting
    Without saying too much about distributed version control schemes like Git (which I have never used), I have two major beefs with SVN:
    • Merges in a typical environment become effectively anonymous. Let's say you have a build manager and individual developers working on different changes in parallel. The build manager can't merge the changes without those changes taking on his identity, that is, all identifying information about the originator of the changes is lost.
    • So-called "best practice" for SVN branching means building new branches with every new release. That is, it's not recommended to build one branch and merge changes from the trunk into it as you're incrementally changing things on that branch, noooo. You have to keep polluting the repository with needless hair by making new branches every week, and sometimes, multiple ones per day.
    These are just two I'm aware of that bite us in the ass on a regular basis. The first issue is supposed to be fixed in one of the near-term mods to SVN, but the fact that the second even exists tells me that the guys developing SVN don't really work in the same world as a lot of the bigger commercial development environments do.
    --

    Dog is my co-pilot.

    1. Re:SVN's weaknesses by Just+Some+Guy · · Score: 4, Informative

      The build manager can't merge the changes without those changes taking on his identity, that is, all identifying information about the originator of the changes is lost.

      Since I'm sure you're not talking about what svn blame gives you, what do you mean exactly?

      That is, it's not recommended to build one branch and merge changes from the trunk into it as you're incrementally changing things on that branch, noooo.

      Umm, says who? Thanks exactly what we do. We have /trunk and /branches/devel. When one of us gets a particularly stable version of /branches/devel ready, we merge it to /trunk.

      You have to keep polluting the repository with needless hair by making new branches every week, and sometimes, multiple ones per day.

      Have to? No way. But since branches are basically free, why would you want to avoid them?

      We use them for experimental "what-if" branches, like "I wonder what would happen if I ported our application from MySQL to SQLite". You copy "/branches/devel" to "/branches/sqlite" and hack away. If it works, merge your changes back to devel. If it bombs, just delete the branch./P

      --
      Dewey, what part of this looks like authorities should be involved?
    2. Re:SVN's weaknesses by ComputerSlicer23 · · Score: 1

      Why on Earth are you generating releases that often? I've worked in a lot of shops that used SVN, and at we used the SVN revision number for our "internal" releases. Given a path and a revision number, you have a unique identifier for *EVERY* sub-directory inside of an SVN repository. Until we actually made a long term supported branch we didn't bother with human consumable names.

      If you really generate multiple branches a week inside of the same repository that you intend to provide long term support for, I'm thinking you deserve the punishment you're discussing.

      Branches are meant for human consumable names for long term heads to commit to. We used to drop "1.2.3.4.r56789", which meant it was on "/path/to/project/branches/project-1.2.3.4" and that it was based upon the revision 56789. Every build would contain this information. So unless I was making an *EXTERNAL* that needed long term support, this worked just fine. Plus, you can delete the "needless hair", or shut it on into it's own area. Create:

      /path/to/project/daily/project-05-09-2008
      /path/to/project/one-off/project-fix-name

      It's not like you have to keep everything in /branches, /tags, and /trunk. The tool is a big version controlled directory structure, so think about how you would design the workflow for a directory structure that makes you happy, and do it that way.

      I don't use subversion anymore, but just because you're thinking trapping yourself into thinking there's "only one way" is your problem, not that the tool won't let you construct a sane workflow.

      Kirby

    3. Re:SVN's weaknesses by liquiddark · · Score: 1

      In my experience you don't WANT to have to merge into "release" branches. Merging after even a month - sometimes even a week - of development is a huge pain in the ass and doesn't net anything that having independent release branches wouldn't get you. In addition, having independent release branches means that all those internal customers who can't upgrade because of this or that interface to a critical system can still be supported via critical patches directly to their specific release. Trying to do that with a single continuous release branch would be nightmarish.

    4. Re:SVN's weaknesses by Myria · · Score: 1

      The build manager can't merge the changes without those changes taking on his identity, that is, all identifying information about the originator of the changes is lost.

      Since I'm sure you're not talking about what svn blame gives you, what do you mean exactly?

      I think the parent is referring to the problem that when you merge, "svn blame" reports the merge itself as the origin of the changed lines rather than where they came from originally. It makes it difficult to know who really made those changes.

      --
      "Screw Sun, cross-platform will never work. Let's move on and steal the Java language." - Visual J++ Product Manager
    5. Re:SVN's weaknesses by Just+Some+Guy · · Score: 1

      I think the parent is referring to the problem that when you merge, "svn blame" reports the merge itself as the origin of the changed lines rather than where they came from originally.

      I'll be darned. I just verified that with our setup at work and can confirm that, at least for us.

      I still say that the ability to make cheap branches is a feature. :)

      --
      Dewey, what part of this looks like authorities should be involved?
    6. Re:SVN's weaknesses by Scareduck · · Score: 1

      The build manager can't merge the changes without those changes taking on his identity, that is, all identifying information about the originator of the changes is lost.
      Since I'm sure you're not talking about what svn blame gives you, what do you mean exactly?
      The problem stems from the fact that we want to lock down the trunk and have one user responsible for managing that trunk. This is impossible in the current version of SVN without erasing the history of the true author on the code. See the Sub version Roadmap for details, especially the section labeled "Commutative Author and Revision Reporting for Merged Changesets".
      --

      Dog is my co-pilot.

    7. Re:SVN's weaknesses by Scareduck · · Score: 1

      Umm, says who? Thanks exactly what we do. We have /trunk and /branches/devel. When one of us gets a particularly stable version of /branches/devel ready, we merge it to /trunk.
      "We" != "build manager." I'm assuming by your language that anyone at your shop, not one build manager, has the ability to make code go live.

      But since branches are basically free, why would you want to avoid them?
      Because they are a pain in the ass to keep merging. It's not that "branches ... are free", it's that you have to keep making the damn things every time you want to merge mods from the newly modified trunk.
      --

      Dog is my co-pilot.

  15. My goal regarding the future of Subversion... by lpangelrob · · Score: 3, Insightful

    ...getting all the other IT people in the office to use it. Even better? Getting them recognize why version control is so useful in the first place. :-D

  16. Well if you're an MSDN developer... by IgLou · · Score: 2, Informative

    If you are one of those MSDN shops where you went to subversion because VSS is weak, you can go with Team System. We were using VSS before and Team system is way better for version control plus it has defect tracking and a build agent. Also, they have caching server to aid distributed environments. Considering it's free (sort of) with your MSDN license (I think it's with their "team edition" licenses) it's tough to beat. It's tough to beat that, especially for larger shops. The only things I don't like in some ways is how it represents the branching and the source control permissions and that was comparatively minor problems. I work in Config Management/Build and so I don't know what Joe developer would like/dislike about it.

    If you're not an MSDN shop then what to use is more problematic. I really liked subversion but that was years back. From what I recall for what it was it does well. The only product I was ever "wow'ed" with was Accurev. That product deals with branching like a breeze and I think they might have a defect tracking module now.

    --

    Oops, how did this get here?
    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
    1. Re:Well if you're an MSDN developer... by gbjbaanb · · Score: 1

      It isn't even near free.

      from MS.com
      Visual Studio Team System 2008 Development Edition
      with MSDN Premium Subscription $5,469 $2,299

      Don't forget that's $5k for the fist year, and then $2k per year renewal. It would be cheaper just to buy it, but then you'd not get the dev licences for the OS and other tools. shame really, MS used to be really good with these things but they've become too big, difficult to install, difficult to use and really expensive.

    2. Re:Well if you're an MSDN developer... by Anonymous Coward · · Score: 0

      We were using VSS before and Team system is way better for version control
      You haven't exactly set the bar very high when you're comparing to VSS. RCS is better at version control than VSS.
  17. helloooo merge tracking by icknay · · Score: 5, Informative

    This probably should have been in the summary -- merge tracking is being added in 1.5, so bouncing changes from one branch to another is now easy. This is a huge feature, and something as I recall Linus specifically complained about in his talk.

    http://blogs.open.collab.net/svn/2007/09/what-subversion.html

    BTW, they did a really nice job of mapping out the use cases and whatnot before implementing the feature. I guess source control people are natural planners.
    http://subversion.tigris.org/merge-tracking/requirements.html

    Anyway, I'm sure the world will continue to have need for both distributed and client/server source control systems, and Subversion is a nice example of the latter.

  18. Code integration assumptions by Cyrano+de+Maniac · · Score: 4, Insightful

    What I don't see mentioned very often, if at all, is the implicit assumption in distributed systems such as git, that a single person has ultimate integration responsibility and authority in order to form the official/mainline release. That is, given a single tree that is considered the main one from which all others ultimately derive (Linus' tree in the Linux case), there is absolutely no way for tools such as git to allow collaborative maintenance of that tree. In the end, the owner of that tree must perform all checkins to the tree, and must resolve all merge conflicts themself. This is a dual problem in that it wastes the time of a potentially talented developer (e.g. Linus) doing the mundane work of merging and integration, and the additional problem that if this mainline tree owner is not an expert in some particular area of the code, they are likely to make mistakes when resolving conflicts or performing other integration tasks.

    Contrast this with a centralized source model where all developers have the ability to check in to the tree, optionally coupled with a peer review process, enforced either through convention or through mechanisms in the tools. Under this model each developer is responsible for their own integration and merging efforts, not wasting the time of a centralized authority. Not only is the central authority freed from routine tree maintenance work, but each developer can make the best and wisest decisions regarding the particular area of the codebase in which they are an expert, and not have to become involved in areas they have little experience with. Granted, for larger projects there is still a need for some management of checkin authorization, particularly to avoid conflicts during large tree merge operations and the like, but it's more of a coordination role than an authorization role.

    This second model is what my employer uses, and our homegrown source control system is well-tailored to it (it actually has capabilities for more centralized control, but they are by and large unused). Perhaps this is unusual, as my experience with other employers is minimal, and mostly took the form of "copy your code into this directory once in a while" (i.e. "Source control? Why would we need that?"). However, given adequately diligent and intelligent developers, I have to say it works marvelously.

    --
    Cyrano de Maniac
    1. Re:Code integration assumptions by RedWizzard · · Score: 2, Insightful

      What I don't see mentioned very often, if at all, is the implicit assumption in distributed systems such as git, that a single person has ultimate integration responsibility and authority in order to form the official/mainline release. That is, given a single tree that is considered the main one from which all others ultimately derive (Linus' tree in the Linux case), there is absolutely no way for tools such as git to allow collaborative maintenance of that tree. In the end, the owner of that tree must perform all checkins to the tree, and must resolve all merge conflicts themself. This is a dual problem in that it wastes the time of a potentially talented developer (e.g. Linus) doing the mundane work of merging and integration, and the additional problem that if this mainline tree owner is not an expert in some particular area of the code, they are likely to make mistakes when resolving conflicts or performing other integration tasks. The reason you don't see it mentioned very often is because it's not really an issue. You just need that single person to be able to trust at least some of the developers they get changes from. Get the trusted "lieutenants" to do the merging for their particular areas. They can even delegate responsibility further. Since in a centralised system you have to trust all the developers to do merging this is no worse, and potentially better.
    2. Re:Code integration assumptions by RAMMS+EIN · · Score: 1

      I don't understand what you're getting at. How do you mean a single person has to do all the merging in a distributed version control system? As far as I know, with Git at least, you can give multiple people push permission to your repository, just as you can give multiple people commit access to your repository in Subversion.

      The main architectural difference I see between Git and Subversion is that, with Git, every repository is first-class, instead of only one. That means you can, but don't have to, pull changesets from and push changesets to more than one repository. It also means you can make commits to your local repository (or repositories), and only push things to someone else's repository later. To me, these seem additional and useful features compared to Subversion. If you want, though, you can work with Git just like you would with Subversion, and have one central repository that everyone pushes to and pulls from.

      --
      Please correct me if I got my facts wrong.
  19. I happen to need a centralized version ... by Skapare · · Score: 1

    ... management system right now. One problem is, Subversion won't work because I need to have totally clean checkout trees. Subversion inserts tracking files in the checkout trees. So I guess I have to look for something else.

    --
    now we need to go OSS in diesel cars
    1. Re:I happen to need a centralized version ... by Todd+Knarr · · Score: 2, Informative

      All version-control systems do that. It's not optional: you have to have meta-information about the checked-out files available, and there's no place in the files themselves to put that information. Now, you might want to look at the distinction between a working directory (with all the tracking files present, allowing the developer to check in and out, compare with different revisions in the tree, all the normal things) and an exported tree (created using for example the CVS "export" command, contains only the source files with none of the meta-data present (which means you can't check modifications of it back in)). My normal working method is to have a working directory for actual development, then once I've got everything checked in make an export tree if I need to package the source code up for builds.

    2. Re:I happen to need a centralized version ... by Slashdot+Parent · · Score: 1

      Check out svk.

      --
      They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
    3. Re:I happen to need a centralized version ... by Dionysus · · Score: 1

      All version-control systems do that. It's not optional: you have to have meta-information about the checked-out files available, and there's no place in the files themselves to put that information.


      Sure, but there is a difference between having one tracking directory (like most DVCS like git and mercurial use), and one for each directory in your project.
      --
      Je ne parle pas francais.
    4. Re:I happen to need a centralized version ... by vrmlguy · · Score: 1

      I'm not sure that this isn't a trumped up use-case, but I wonder if it would be possible to have a parallel directory with all of the metadata in it, instead of using .svn directories. I understand that it's programatically convenient to be able to look at ./.svn/myfile wherever we are in the source tree, but things like the MacOS programs Keynote and Pages pro-actively remove .svn (and other) directories when they find them. Having a ~/.svn-meta directory that parallels the checked-out directory would be a good thing. VCS systems already know the 'base' of a project, so meta-data for $BASE/$PATH/myfile could be stored at ~/.svn-meta/$PATH/myfile, leaving a very clean checkout tree.

      --
      Nothing for 6-digit uids?
    5. Re:I happen to need a centralized version ... by Todd+Knarr · · Score: 1

      Problem: the VCS doesn't know the base of the project. If I'm editing a file in /home/me/src/projects/utilities/ljbackup/database, exactly what portion of that path is this project's tree and which is the part the project lives under? It has to be able to figure that out with nothing more than the path available, remember, since you don't want it to store anything in the working directory indicating what the base for this directory's files is supposed to be. And it also has to accept ljbackup/database being simultaneously checked out at both /home/me/src/projects/utilities and /home/me/work, possibly at the same revision and possibly at different revisions.

      CVS and SVN use meta-data under the current directory because it creates a self-contained working directory tree without any ambiguity in what the exact location of the meta-data for any given file will be.

      Why do you need a working directory without meta-data present? I can't think of too many reasons, and the ones I can think of fall under "That's probably a bad idea.".

    6. Re:I happen to need a centralized version ... by Megane · · Score: 1

      All version-control systems do that.

      I know for sure that Clearcase doesn't do the equivalent of putting .svn directories all over the freaking place. There's a directory of tracking files at the checkout root, and that's it. And though it's been a while since I've used CVS, I don't remember CVS spamming control files all over the place like that either.

      In fact, I'd have to say that all the .svn directory spam is probably the most annoying thing to me about svn.

      --
      #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
    7. Re:I happen to need a centralized version ... by Ritchie70 · · Score: 1

      CVS creates a subdirectory named CVS, just like SVN creates .svn.

      (I'm looking at CVS on a Windows system and SVN on a Unix system, so the CVS name used under Unix or the SVN name used under Windows may be slightly different, but the directories are definitely there.)

      --
      The preferred solution is to not have a problem.
    8. Re:I happen to need a centralized version ... by Skapare · · Score: 1

      This is what I had in mind. I didn't say we can't have any meta info at all. Instead, I just want the tree itself to be completely clean, and hold the meta info somewhere else, such as another parallel tree. And it could be made easy enough to find it with a simple rule: search up the path of parent directories until a directory with a specific name (such as ".svn-meta" as in your example) is found. It might usually be placed in the user home directory. It would apply to all projects that have different bases. So if you have ~/project7 and ~/oldprojects/project2 as bases for two separate projects, and you create ~/.svn-meta for the meta tree, then ~/.svn-meta/project7 and ~/.svn-meta/oldprojects/project2 would be where to find the meta data.

      There would still be issues with doing moves of directories in the project. But that has caused SVN to get confused even the way it does it now (I've had to revert projects several times just clear up issues from SVN getting confused). A better system would simply figure out what I've done to change my clean tree, and apply that when I check it back in. If I move stuff around, it can either waste the bandwidth and transfer it back to the repository all over again relative to the new place and "delete" the old location, or it can checksum all the files and initially tell the repository what checksum is where, and the repository can simply update references to reflect the new arrangement (and potentially even save space by not-duplicating duplicate files).

      I also need symlink and hardlink support, which SVN does not have. And the symlinks might be lame/dangling (e.g. where they point to might not have anything there, and might even be invalid as a file name). And I need devices and pipes for some things I could use revision control for. I just don't (for now, anyway) need the highly de-centralized stuff.

      --
      now we need to go OSS in diesel cars
    9. Re:I happen to need a centralized version ... by Skapare · · Score: 1

      It would be possible to make a means to discover where the base is without the need to have something inside the tree. You start by having a parallel tree with the meta data over there. Of course you have to know where that parallel tree begins, and there could be many schemes to find it. One is to have a specific name somewhere along the path to the current directory. That specific name is not the project base; it's just how to jump over to the parallel tree. Then from there the same relative path has the "local" meta data. From there you can get the project base the usual way. So you could have /home/me/src/projects/utilities/ljbackup/database and put the parallel meta data in /home/me/src/.svn-meta/projects/utilities/ljbackup/database. You just scan the current directory path downward (/home then /home/me then /home/me/src) until you find the .svn-meta directory. That's not the project base; it's just the meta parallel base. Now you know where in the current path, and any path relative to the current path, to insert /.svn-meta to find the meta data, instead of in the current tree. So if you would have had /home/me/src/projects/utilities/.svn you will now instead have /home/me/src/.svn-meta/projects/utilities/.svn to find the same data. That might even make it easier for SVN to figure out when you do moves of whole directories, which it currently handles badly because that also moves the .svn directory which then gets confused because it now has a misperception of what the repository contains.

      --
      now we need to go OSS in diesel cars
    10. Re:I happen to need a centralized version ... by Anonymous Coward · · Score: 0

      If you need a really clean checkout, most VCSes won't help, since they all need somewhere to put is control data, at least in the top checkout directory.

      Git and Mercurial don't really help by grouping all the control data on a top-level control directory, if you still have to scatter .gitignore, .hgignore and other stuff all over your tree.

      This is something that Subversion fixed much better and cleaner than most other VCSes.

      And SVK provides all this while using a Subversion repository: *really* clean checkouts, even without the top-level control directory that most VCSes require, and without any other non-project-related alien files (read .gitignore, .hgignore) scattered over your tree.

      This is specially useful if your project is a website, and you want to use your checkout as the html root.

    11. Re:I happen to need a centralized version ... by Skapare · · Score: 1

      Check out svk.

      Is that supposed to be a pun :-)

      I guess you mean this project. That does look interesting. Thanks!

      --
      now we need to go OSS in diesel cars
    12. Re:I happen to need a centralized version ... by _dim · · Score: 1

      Perforce keeps all metadata on the server. It's not free software, though...

    13. Re:I happen to need a centralized version ... by adriccom · · Score: 1

      This is specially useful if your project is a website, and you want to use your checkout as the html root.

      This seems to be exactly what svn export [-rREV] url://path is for, since it pulls a static metadata-less (no .svn) copy of that path at that rev. I use it to (re)publish websites with cron, and have used it for bind9 zone files and all sort of other stuff where the .svn files (or their contents) was unwanted.

      As to the rather contentious (and mostly fruitless) debate at hand, I'll have at look at what the Pragmatic Programmer have to say about git. They are releasing a new version of their canonical VCS book for it, and their SVN book is what really helped get me going with SVN. http://pragprog.com/titles/tsgit/pragmatic-version-control-using-git .

      --
      <script>alert("I never liked JavaScript, really; it just seemed a bad idea.");</script>
    14. Re:I happen to need a centralized version ... by WuphonsReach · · Score: 1

      ... management system right now. One problem is, Subversion won't work because I need to have totally clean checkout trees. Subversion inserts tracking files in the checkout trees. So I guess I have to look for something else.

      If you're trying to do something like track configuration changes to a Linux server (such as monitoring /etc), try FSVS which is a different front-end. It stores its data in a SVN repository, allowing you to use the regular SVN tools. There are some other bells and whistles with FSVS, but I mostly use it to keep track of changes that I made to a server.

      1. Make changes to /etc/somefile
      2. Go back to "/"
      3. fsvs ci -m "I made the following changes..." /etc/somefile

      If I'm ever curious about what a particular change involved, I connect to the SVN repository using a tool like TortoiseSVN and use TSVN's diff tool to look. (Since I use TSVN a lot, I'm most familiar with its diff tool.)

      FSVS doesn't create ".svn" folders everywhere. It keeps its information in a central folder (/etc/fsvs - I think is the current location).

      --
      Wolde you bothe eate your cake, and have your cake?
    15. Re:I happen to need a centralized version ... by vrmlguy · · Score: 1

      Problem: the VCS doesn't know the base of the project. If I'm editing a file in /home/me/src/projects/utilities/ljbackup/database, exactly what portion of that path is this project's tree and which is the part the project lives under? IIRC, some VCSs know. When you do a checkout, they store the path where you issued that command in a cache, which can be found relative to $HOME, not $CWD. Hmmm, it's been over a year since I last used it, but the more I think about it, the more I think that rPath's Conary works this way.

      Why do you need a working directory without meta-data present? I can't think of too many reasons, and the ones I can think of fall under "That's probably a bad idea.". Did you even bother to read the entirety of my reply? I said, "The MacOS programs Keynote and Pages pro-actively remove .svn (and other) directories when they find them." In other words, you have some Keynote objects; they look like files inside Finder, but they're really directories. You put them into your favorite VCS and then check them out. The VCS adds its .vcs subdirs all over the place. You open the object with Keynote to make some changes, and Keynote says "Wots dis, gov'ner? It shouldn't be 'ere!" and proceeds to nuke the subdirs.

      Yes, Apple should fix their software. Good luck getting that done. Yes, you shouldn't use broken software. But no one knew it was broken until they decided to start using a VCS. Yes, people have developed ways to work-around the problem. But it would be nice to have a system that worked out-of-the-box. Keeping your meta-data in a parallel tree is one way to do that.
      --
      Nothing for 6-digit uids?
    16. Re:I happen to need a centralized version ... by Slashdot+Parent · · Score: 1

      Yup. That's it. It uses svn under the hood. Most of the svk commands are the same as svn commands.

      --
      They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
  20. Distributed Systems Can Be Centralized by CyberLife · · Score: 1

    There is nothing in the distributed systems that precludes one from using them in a centralized fashion if so desired. The term decentralized, as used in this context, simply means there is no inherent central point. It does not mean one cannot be established.

    1. Re:Distributed Systems Can Be Centralized by MrRobahtsu · · Score: 1

      Unless you want to use mercurial. You'll get nothing but grief on the mailing list. But git does work very nicely with a central server, and the community will still accept you and even support you.

  21. DVCS not inherently more difficult to learn by this+great+guy · · Score: 1

    But if you're a developer on a project where all the developers are in a common location sharing common infrastructure, often literally within speaking distance of each other, then a decentralized VCS like Git is stupid. It's harder to maintain and, in that situation, yields none of the offsetting benefits.

    FUD. I think you may have had a bad experience with Git, which is known to be somewhat difficult to learn, but in general the easy things you do with a CVCS can just as easily be done with a DVCS (commits, diffs, tags...). And the things that are complex/impossible to do with a CVCS become easy/possible with a DVCS (low-cost branching, working out of the office with no network/VPN, central repo not a single point of failure, etc). You can benefit from these advantages even in small dev teams. Case in point: I use a DVCS (Mercurial) for some private projects even when the single repo is on my laptop and when I am the only developer mostly because it couldn't be simpler:

    $ hg init .
    $ hg add foobar.c && hg commit -m "initial import"
    1. Re:DVCS not inherently more difficult to learn by Todd+Knarr · · Score: 1

      Problem is, those "advantages" aren't in a lot of situations. Where I work, for instance, making it easy to get the code out of the office and onto a home machine would be a Bad Thing requiring nasty controls be imposed on the home machine to keep the code under the same control as if it were on the corporate internal network. Branching's already minimal-cost. The central repository's in the data center, and thinking is that if those machines are down then we're dead in the water anyway since our test environments, databases, build machines and such are down too. In addition, with the repository on a centrally-managed server we've got the entire disaster-recovery mechanism to work with, and getting that repository back up and running quickly on an alternate server comes with that. The fundamental problem is that the scale's too small for the advantages of a DCVS to kick in, and absent that the requirements to centralize control (and yes that is a requirement, not from a technical standpoint but from a regulatory and legal standpoint) mean added costs trying to make a DVCS behave like it's a CVCS.

    2. Re:DVCS not inherently more difficult to learn by Spoke · · Score: 1

      You're still missing the point.

      YOU STILL KEEP A SINGLE COPY OF YOUR DCVS ON YOUR MASTER SERVER. YOU STILL MAINTAIN CENTRALIZED CONTROL!

      For example, look at Linux kernel development. Linus maintains the central repository. Every single other developer regularly syncs up with Linus while working on their own tree.

      If you don't want people taking it home, then you tell them not to develop on their note books. Same as when you're using a CVCS.

      DCVS still has a number of advantages:

      1. It's dead simple to branch off and keep track of changes to some experimental changes. If you decide to keep them, you can push all the changes to your master. If not, toss it in the bit-bin. With a CVCS, you have to make a branch and then deal with the fun of trying to merge it back into the trunk. And if it was crap, that crap gets stored in the CVCS forever (which could be a good or bad thing).

      2. Concurrent development is better tracked - because you can check in every little change along the way. With your typical CVCS you end up make a lot of intrusive changes, and then check it all in in one big wallop - which means you lose the benefits of a VCS system. The DVCS system encourages you to check things in all the time.

    3. Re:DVCS not inherently more difficult to learn by Todd+Knarr · · Score: 1

      But if it's all on a centralized server, what does a DVCS give you that a CVCS doesn't?

      1. It's dead simple to do this in CVS or SVN too. Branch, make your changes, check in as needed, merge when you're satisfied or discard the branch if you aren't. You don't need a DVCS for that. And yes, it gets stored forever. That's the point of a VCS. If it's your personal project it's not a big deal, but for corporate development the last thing you want is developers having work that's not available to everyone else. That way lies a developer leaving at an inopportune time and important work disappearing because it was on his machine and not on the central server where everyone else knows about it.

      2. I can check in every little change along the way in a CVCS too. "cvs commit" works. You just have to branch, see #1. Of course if you don't branch it becomes a problem, but it's a problem in a DVCS too.

      Simply put, a lot of development is in an environment that's not distributed and not concurrent. All the machines that should have the code on them are in the same datacenter or plugged into the same gigabit Ethernet switch. For various reasons the code's not supposed to be distributed outside this tight circle of machines. The developers are all in the same office, or at most you've got two, maybe three, groups. You only have one or two programmers assigned to particular parts of the software at any given time, and all work on any given piece needs to go through the assigned owner so it can be reconciled with all the other work required. And unlike most open-source projects, the developers don't control the requirements or the priorities which means they aren't in a position to be making changes outside their assigned pieces just because those changes are needed (those changes, however neccesary, may break something the developer's not in the loop on).

      Not all development's done on the scale of or using the model of Linux kernel development, and when one needs to drive in a nail to hang a picture one uses neither a screwdriver nor a pile-driver.

  22. move to distributed by nguy · · Score: 1

    I think an incremental move of Subversion to a distributed model would be the best way forward. Svk shows it can be done, Subversion should just "do it right", rather than providing it as an add-on. I think if Subversion did that, it would instantly become the de-facto standard for version control, distributed or otherwise.

    If Subversion doesn't move to a distributed model, I'm probably going to switch my projects incrementally over to Mercurial (Git isn't really an option).

    1. Re:move to distributed by UnderCoverPenguin · · Score: 1

      I have used SVN in a distributed manner by using wrapper scripts to creatively abuse "svn switch".

      For me, the biggest obstacle SVN put in my way is lack of full support for aliasing keywords. My work around was to use only $Id$ with my local repository and the only the others with the central repository.

      I agree, putting proper support for distributed development would be a good idea, though there are lots of issues to make decisions about, though not necessarily require real action to resolve.

      --
      Don't try to out wierd me, three-eyes. I get stranger things than you, free with my breakfast cereal. --Zaphod Beeblebr
  23. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  24. Git and Mercurial are interesting ideas by sentientbrendan · · Score: 1

    and do handle merging much better than svn (which hardly manages merging at all) however, a lot of companies use perforce, because perforce does handle branching and merging well, whereas it also allows for a centrol source repository.

    Mercurial and get are mostly built around the model of sending your patches in via email. They make some noise about how you *could* build a central repository, but it's not like that out of the box, and things like permissions often aren't there yet.

    Basically, the development model that the open source guys use to do their work isn't the model that guys at big corporations need to use, and distributed VC tools are so heavily geared towards the open source model (in the case of git, not even supporting windows that well) that they can't really be drop in replacements for tools like perforce.

  25. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion