Slashdot Mirror


Practical Reasons To Choose Git Or Subversion?

markmcb writes "I develop Rails applications and recently followed my lemming herd and made the switch to Git after learning some of the practical advantages Git offers over Subversion. As I'm sure there are many die-hard Subversion fans in the Slashdot audience, I'm curious what your key reasons are for sticking with Subversion. If possible, I'd like reasons that apply to 'most of the time' as opposed to arguments based on obscure features that may get used only a few times ever."

127 of 667 comments (clear)

  1. Blah by Anonymous Coward · · Score: 5, Funny

    You can have my cvsroot when you pry it out of my cold dead fat hands.

    1. Re:Blah by HTH+NE1 · · Score: 2, Funny

      My workplace still uses RCS. We also use XEmacs 19.13, a 1995 codebase last built in 2001.

      --
      Oh, say does that Star-Spangled Banner entwine / The myrtle of Venus with Bacchus's vine?
    2. Re:Blah by ari_j · · Score: 2, Funny

      CVS? Are you kidding? If your code really had any value to it at all you wouldn't entrust it to such a newfangled, untested technology. The only revision control system that you can really trust is the standard one, RCS. It's even named revision control system!

    3. Re:Blah by Tumbleweed · · Score: 2, Funny

      You can have my cvsroot when you pry it out of my cold dead fat hands.

      Shut up, McCain.

    4. Re:Blah by LearnToSpell · · Score: 3, Funny

      We're using RCS, and this is at a company that grossed six billion dollars last year (yes, that's a 'b'). At least we have vi though.

    5. Re:Blah by obarel · · Score: 3, Funny

      Just think how much time you could have saved if you didn't have to constantly switch modes in your editor and instead used your fingers simultaneously...

    6. Re:Blah by EdelFactor19 · · Score: 3, Funny

      at least you aren't using CMVC at a company that developed rational team concert, jazz, clearcase, etc...

      --
      "Jazz isn't dead, it just smells funny" ~Frank Zappa
      EdelFactor
    7. Re:Blah by Ihmhi · · Score: 2, Funny

      What I'm trying to understand is why you're using a pharmacy to manage your data. Doesn't really sound like their specialty.

    8. Re:Blah by indifferent+children · · Score: 3, Funny

      Cool. That should free-up one finger to express disdain for people who are going to edit text files several hours a day, for most of their career, but can't be bothered to master the most powerful editor on the planet.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
  2. Windows. by scott_karana · · Score: 5, Interesting

    Git is an excellent piece of software, but Windows performance is not so great. Git is too UNIX centric to be fast on Windows in the near future.

    Other distributed SCMs often are interpreted and just as slow as git (on any platform), so this might not be a concern for me.

    1. Re:Windows. by Just+Some+Guy · · Score: 5, Funny

      Git is an excellent piece of software, but Windows performance is not so great.

      Git could paint your house and buy you a girlfriend, but that wouldn't help Windows.

      --
      Dewey, what part of this looks like authorities should be involved?
    2. Re:Windows. by Cyberax · · Score: 4, Interesting

      I've migrated my projects to Mercurial and is actually FASTER than Subversion on Windows and Linux for commit/update/status/blame.

      Mercurial is slower than GIT on Linux, but I just don't care.

    3. Re:Windows. by Daniel+Phillips · · Score: 5, Interesting

      Mercurial is slower than GIT on Linux

      Sometimes slower, sometimes faster, usually about a tie in my experience. Measurements on kernel tree import and initial commit showed roughly a tie.

      But Mercurial is _way_ more obvious and pleasant to use than Git. I use both, but any time I have the option I choose Mercurial.

      --
      Have you got your LWN subscription yet?
    4. Re:Windows. by ozamosi · · Score: 5, Funny

      Git could [..] buy you a girlfriend

      Dunno 'bout you guys, but that right there settles it for me. Git it is!

    5. Re:Windows. by Rayban · · Score: 4, Funny

      Just be careful with the order of command-line args. You wouldn't want it to paint your girlfriend (or maybe you do?).

      --
      æeee!
    6. Re:Windows. by mcvos · · Score: 2, Interesting

      Git is an excellent piece of software, but Windows performance is not so great. Git is too UNIX centric to be fast on Windows in the near future.

      Speed isn't the only factor when choosing a version control system (or even the most important one), but considering its lightning speed on unix-likes, I wouldn't be all that surprised if git's less-than-brilliant performance on Windows is still faster than SVN.

    7. Re:Windows. by cp.tar · · Score: 2, Funny

      Mmmmmm, body-painting...

      --
      Ignore this signature. By order.
    8. Re:Windows. by bladesjester · · Score: 4, Informative

      I'd just like to say that I *love* tortoise.

      I work primarily in Windows now, but I grew up using the command line and have a number of years of experience in unix and linux. Setting things up for subversion using the command line always saw me digging back through docs to remember how to do it because I don't have to do it every day.

      With Tortoise, a couple of clicks and it's done. It saves me time and sanity.

      --
      Everything I need to know I learned by killing smart people and eating their brains.
    9. Re:Windows. by UnderCoverPenguin · · Score: 2, Insightful

      Another factor in a Windows-centric corporate environment, SVN will function very usefully without a server. While I would prefer to have a proper repository server, the IT departments of most of my clients simply refuse to support anything outside a small range of "corporate esentials". Since a SVN repository on a file share is better than no VCS, that's what ends up being used.

      --
      Don't try to out wierd me, three-eyes. I get stranger things than you, free with my breakfast cereal. --Zaphod Beeblebr
    10. Re:Windows. by syousef · · Score: 5, Funny

      Git could [..] buy you a girlfriend

      Dunno 'bout you guys, but that right there settles it for me. Git it is!

      Congratulations. Your new girlfriend's name is 'Richard Stalman' and you can call her 'RMS' for short.

      Enjoy your new girlfriend.

      Yours faithfully,

      GIT

      --
      These posts express my own personal views, not those of my employer
    11. Re:Windows. by Jellybob · · Score: 2, Interesting

      I really like that it doesn't commit everything unless you explicitly tell it to - I've been bitten by that far too many times with Subversion.

    12. Re:Windows. by ioliver · · Score: 3, Funny

      I want to dye a virgin. Ian

    13. Re:Windows. by T.E.D. · · Score: 2, Interesting

      Git is an excellent piece of software, but Windows performance is not so great.

      That's a bit of a myth. Windows Git is slower than Git on Liunx (since that was its native platform). However, I found it to be far faster than SourceSafe on the same machine.

      If you think about it, there's really no way SourceSafe could even hope to compete, really. Even if it were the best-written code in the world (30 second pause while I try to stop laughing), SourceSafe has to go out to the network every time you want to do anything with a file. The same with CVS, SVN, etc. (unless your repository isn't shared). Git users only need the network for the initial pulldown and the occasional merge back up.

      The original sources for the "Windows Git is slow" comments were Linux developers who were used to Git on Linux, not Windows developers who are used to other source control software on Windows.

  3. IDE Integration by FortKnox · · Score: 5, Interesting

    Like the bi-line suggests... Unless you are coding in something like vi or emacs, I don't use the command line for my source control. IDE Integration means a lot... most of the items that git 'claims' to be better on is something IDE plugins fix. So the maturity of the plugin and the comfort with using it is a big thing for me. As such, I'm usually using CVS or Subversion.

    --
    Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    1. Re:IDE Integration by Tester · · Score: 4, Insightful

      Clearly, you've never used git to think that some UI can make subversion usable.. Try merging a reasonably-sized branch with subversion (and you'll fail and cry and ask why oh why you didnt use git).

    2. Re:IDE Integration by trjonescp · · Score: 2, Informative

      Unless you are coding in something like vi or emacs, I don't use the command line for my source control.

      I use emacs and never have to use the command line either. emacs is an IDE just like any other. It's just not graphical.

      --
      Only speak when it improves the silence.
    3. Re:IDE Integration by dubl-u · · Score: 5, Interesting

      Try merging a reasonably-sized branch with subversion (and you'll fail and cry and ask why oh why you didnt use git).

      Simpler solution: stop merging reasonably-sized branches.

      I know that's not reasonable for every situation, but about 90% of the time I see people doing lots of branching and merging, it's a response to screwed-up organizations or dysfunctional personal relationships. I saw one team move to git from subversion because, at the root, a couple of developers were arrogant assholes and their manager was a chinless milquetoast who let them get away with it.

      That's not to say git isn't awesome for certain situations, mind you. But branching and merging adds a fair bit of overhead, and anything that increases a project's overhead should be your last resort, not your first.

    4. Re:IDE Integration by Haeleth · · Score: 4, Insightful

      I don't use the command line for my source control. IDE Integration means a lot...

      You feel free to wait around for "integration". The command-line client is already nicely integrated into my IDE, which is the most mature, most stable, and most flexible one in widespread use: Unix.

    5. Re:IDE Integration by Wonko · · Score: 4, Insightful

      Simpler solution: stop merging reasonably-sized branches.

      I know that's not reasonable for every situation, but about 90% of the time I see people doing lots of branching and merging, it's a response to screwed-up organizations or dysfunctional personal relationships.

      I constantly branch and merge even when I am the only one working on a codebase. When branching and merging are so easy why wouldn't you take advantage of it? Of course, it is always possible that I have a dysfunctional relation with myself.

      That's not to say git isn't awesome for certain situations, mind you.

      I can't speak for how awesome git is, I've never used it.

      But branching and merging adds a fair bit of overhead, and anything that increases a project's overhead should be your last resort, not your first.

      If branching is increasing your workload instead of making things easier you are most likely not using a source control system that is good at branching and merging.

    6. Re:IDE Integration by GooberToo · · Score: 3, Insightful

      Branching and merging is a fact of life. If you don't branch or merge, likely your project is either trivial or your pool of developers small. Larger projects with many developers require the ability to branch and merge large bodies of code. Attributing this fact to personalities is nothing but hand waving. Personality conflicts may be the root-cause for you but is not the root for the majority of people that require such functionality.

      Simple fact is, branching and merging is required for complex software development. In part, that's why git was developed in the first place.

    7. Re:IDE Integration by Niten · · Score: 5, Informative

      That's not to say git isn't awesome for certain situations, mind you. But branching and merging adds a fair bit of overhead, and anything that increases a project's overhead should be your last resort, not your first.

      Well OK, those principles are appropriate for traditional tools like CVS and SVN. Branching and merging adds a lot of overhead if your SCM isn't built to handle it. But once you've used a modern SCM like Git or Bzr, you'll know that with Git you literally cannot branch too often. Don't think of Git branches like you think of Subversion branches, it's a whole different playing field.

      I have a rule of thumb with Git: every time I set out to implement a new feature, if I think it's going to take more than a single commit to bring into the mainline, then I make a new branch for it. Working on three different features at the same time? Then use three different branches, and switch between them at will.

      So what's the big difference between SVN and Git that allows such carefree use of branching? There are a few points to understand:

      • At one point, the SVN developers liked to make a big deal out of the fact that branching in SVN is a lot cheaper than it is in CVS. That's all well and good, but it doesn't mean much when SVN's handling of merges is so primitive. Git handles merges extremely well, in no small part due to the fact that, like Bzr, Git tracks content rather than changes. (If you browse through the recent history of the Linux kernel, you can witness 12- and even 20-way merges; with Git, merging really is no big deal.)
      • In Git (and in Bzr), branches are not immutable, permanent parts of your repository. You can delete (or simply not push) branches when you're done with them. This means you're free to make as many experimental branches as you like in your own local repository; you can take advantage of the full productivity power of Git branches without immortalizing your failed experiments in the central repo.
      • In Git (and in Bzr, but not in Mercurial), there doesn't have to be a 1-1 mapping of named branches between each copy of your distributed repository. This has the important result that you can name your experimental branch "experiment" in your local repo, without being concerned about polluting some global branch namespace. This does a way with a lot of the mental overhead associated with branches in SVN.

      In conclusion, 90% of the time I see people advocating the use of branches only as a last resort, it's because they're using the wrong SCM =)

    8. Re:IDE Integration by PinkPanther · · Score: 2, Funny

      which is the most mature, most stable, and most flexible one in widespread use: Unix.

      Yes, but unfortunately for you the kids aren't traipsing on your lawn these days.

      --
      It's a simple matter of complex programming.
    9. Re:IDE Integration by dubl-u · · Score: 4, Insightful

      I constantly branch and merge even when I am the only one working on a codebase. When branching and merging are so easy why wouldn't you take advantage of it?

      I do, too. I call it "checking out" and "committing". I do it every few hours.

      If branching is increasing your workload instead of making things easier you are most likely not using a source control system that is good at branching and merging.

      When I'm building a unified product, what need would I have of branching and merging? If I'm not sure if something is a good enough idea to build, I don't build it. Or I build a quick, throw-away implementation to check an idea out. And then I throw it away.

      No matter how good a source control system is at branching and merging, it can't solve the real cost: maintaining a understanding of different, semi-incongruent notions of the project, and then resolving those differences. The whole point of branching is to increase complexity, and excess complexity is the enemy of every good software project. As Occam's razor says, you shouldn't multiply entities beyond that which is strictly necessary.

      That's not to say I never branch. But it's always a last resort for me, no matter how awesome the source control system is.

    10. Re:IDE Integration by Dhalka226 · · Score: 3, Insightful

      There are a lot of times I don't branch, but it's usually out of laziness and I end up regretting it at some point in the project.

      Easily, the most common reason for branching is a stable-versus-development split. I've run into it in virtually every project I've been on that involved any other people (even just as employer), and even a number of my personal projects. Stable branches almost always need an occasional bugfix or super-quick feature that I can be reasonably sure to get in in a one or two commits, and typically these things need to go out ASAP. I've run into that a million times with copy changes. In programming world, copy changes are usually the lowest possible priority thing, but with clients they're often some of the highest priority.

      Point being, if I'm ever working on adding some major feature--really anything that will take more than a couple days, and sometimes even when it won't--I'm likely going to be better served doing it in a branch. If it happens that I get through it without needing to make any changes to the stable code, sweet! The merge is going to be super quick and easy. If not I'm going to be very glad I took the time to branch or regret not having done so. "I can't make your change right now because I have a ton of half-finished in-development code" is not an excuse people are interested in hearing.

    11. Re:IDE Integration by Abcd1234 · · Score: 4, Informative

      It's because people have trouble forming teams and maintaining strong relationships in large groups.

      No, it's because:

      1) Software companies often need to create large, new features, and don't wish to destabilize the core product.

      2) Or it's because it's *far* easier for developers to be able to branch pieces of code, work on feature or bugfix development in their own little playpen with all the SCM bells and whistles (being able to revert a messed up piece of code is awfully handy, even if you're the only one working on the codebase), and then merge those changes when they're ready. This also facilitates easier code review (just check out the branch) and change control as a nice added bonus.

      3) Or because, in a more contract-oriented world, they might need to build customized applications for customers, and branch-and-merge strategies make that kind of code management possible.

      Honestly, if you've never seen the need to branch-and-merge, you've never worked on a large project. Period.

    12. Re:IDE Integration by mcvos · · Score: 3, Informative

      I constantly branch and merge even when I am the only one working on a codebase. When branching and merging are so easy why wouldn't you take advantage of it?

      I do, too. I call it "checking out" and "committing". I do it every few hours.

      That may work fine when you're the only one working on the code, but if you're working with someone else, and he's committed code that you don't think is any good (or at least not ready for production yet), but later commits from you are, then with a single trunk you're simply out of luck.

      If branching is increasing your workload instead of making things easier you are most likely not using a source control system that is good at branching and merging.

      When I'm building a unified product, what need would I have of branching and merging? If I'm not sure if something is a good enough idea to build, I don't build it. Or I build a quick, throw-away implementation to check an idea out. And then I throw it away.

      But what if you've been working on something that seemed like a good idea at the time, and suddenly you realise you're going completely in the wrong direction and need to undo a lot of commits (but you want to keep the other bugfixes you did)? Or what if someone else is working on the same project?

      Git makes these things pretty painless.

      No matter how good a source control system is at branching and merging, it can't solve the real cost: maintaining a understanding of different, semi-incongruent notions of the project, and then resolving those differences.

      No, it can't resolve your personal differences for you, but it can prevent others from polluting your codebase. It can make it easier to undo others' mistakes. Or your own.

      The whole point of branching is to increase complexity,

      Have you read what you just wrote here? Ofcourse the point of branching is not to increase complexity. It's to reduce it. The problem is that with many source control systems (like SVN) the subsequent merging is complex and often needs to by done by hand. With git, that's not the case.

      Despite what a lot of people say, it's actually not true that git makes branching and merging easy. It makes it unavoidable, trivial and painless. It's only in other systems where branching and merging adds complexity.

      That's not to say I never branch. But it's always a last resort for me,

      Well, with git, it needn't be the last resort. You'll be doing it every day without even noticing.

    13. Re:IDE Integration by dubl-u · · Score: 3, Insightful

      Easily, the most common reason for branching is a stable-versus-development split.

      I agree that's popular, but I don't think it's a good idea. Wouldn't it be better to have every check-in be stable?

      I've run into that a million times with copy changes. In programming world, copy changes are usually the lowest possible priority thing, but with clients they're often some of the highest priority.

      Yes, you could solve the problem that way. I normally solve it by releasing frequently. It's pretty rare that people mind waiting a few days. Or if they need to change copy a lot, by putting the copy in a content management system, so they can change it whenever they get the urge.

      I can't make your change right now because I have a ton of half-finished in-development code

      I solve that by not having a ton of half-finished code. Ship early, ship often, I say.

    14. Re:IDE Integration by Abcd1234 · · Score: 4, Insightful

      When I'm building a unified product, what need would I have of branching and merging? If I'm not sure if something is a good enough idea to build, I don't build it. Or I build a quick, throw-away implementation to check an idea out. And then I throw it away.

      So you've never implemented something and then wished you could revert a change that didn't work out? Or have never wanted to incrementally implement something without incorporating it into the final product until it was fully complete? Really?

    15. Re:IDE Integration by skeeto · · Score: 2, Interesting

      but it doesn't mean much when SVN's handling of merges is so primitive.

      Precisely. I like this think of it this way: Einstein said "Make everything as simple as possible, but not simpler." When Subversion tried to be elegantly simple by having tagging and branching be exactly same operation as cheap copies, they went too simple.

    16. Re:IDE Integration by dubl-u · · Score: 2, Insightful

      That may work fine when you're the only one working on the code, but if you're working with someone else, and he's committed code that you don't think is any good (or at least not ready for production yet), but later commits from you are, then with a single trunk you're simply out of luck.

      This is back to my original point. If I'm working with people who are regularly checking in bad code, then I solve that by talking with the person. Why would I let him go on doing dumb things any longer than necessary?

      But what if you've been working on something that seemed like a good idea at the time, and suddenly you realise you're going completely in the wrong direction and need to undo a lot of commits (but you want to keep the other bugfixes you did)? Or what if someone else is working on the same project?

      I mainly solve this by making sure it doesn't happen much. Branching can only save you if you realize it's a bad idea before you merge to trunk, only if your changes are mostly bad. I think the solution to bad ideas is better product management, not better version control.

      Have you read what you just wrote here? Ofcourse the point of branching is not to increase complexity. It's to reduce it.

      Let's take a simple example. Me and my team are developing against trunk, committing every few hours, and shipping weekly. How many relevant versions of the software are there?

      I count 2. One's in production, and one's at the head of the trunk. The divergence between the two is at maximum, however much the team can develop in a week.

      Now I branch. How many interesting versions are there? I count 3. How much divergence is there? Well, there's release to head, release to branch, and branch to head.

      So that's 2 versions with 1 axis of divergence, versus 3 versions with 3 axes of divergence.

      No matter how you measure it, that is increased complexity.

    17. Re:IDE Integration by dubl-u · · Score: 2, Informative

      Software companies often need to create large, new features, and don't wish to destabilize the core product.

      Solution: stop checking in stuff that doesn't work. I do this through unit testing, acceptance testing, pair programming, working within a few paces of a product manager, and a few other practices.

      Or it's because it's *far* easier for developers to be able to branch pieces of code, work on feature or bugfix development in their own little playpen.

      I don't have anything against local copies. It's kinda hard to change the code if you can't change the code.

      being able to revert a messed up piece of code is awfully handy

      True. I use an IDE with undo for small cases of this, and reversion to head for large versions. But I think a better solution is to find mistakes early, so that screwing up is easy to fix.

      This also facilitates easier code review

      This is true only if you're willing to pay the cost of slower code review. Longer feedback loops inevitably create greater waste than shorter ones.

      Or because, in a more contract-oriented world, they might need to build customized applications for customers, and branch-and-merge strategies make that kind of code management possible.

      I have never seen that not be the road to maintenance hell. For the customized versions of products I've worked on, it's not like customers don't want all the bug fixes and new features that you're putting into the app. They do, just with their customizations. Trying to juggle all that through branching and merging seems like a lot more work than just making the software configurable, templatable, or customizable directly.

      Honestly, if you've never seen the need to branch-and-merge, you've never worked on a large project. Period.

      I don't remember saying I've never seen the need for that. Perhaps you replied to the wrong post?

    18. Re:IDE Integration by SydShamino · · Score: 2, Insightful

      I agree that's popular, but I don't think it's a good idea. Wouldn't it be better to have every check-in be stable?

      When adding a new feature that might take 2-3 weeks to be "stable", do you use a different system to back up your work each day? Wouldn't it be easier to make a branch you could commit to back up to each day, then merge it in when your branch is stable?

      --
      It doesn't hurt to be nice.
    19. Re:IDE Integration by honkycat · · Score: 2, Insightful

      I agree that's popular, but I don't think it's a good idea. Wouldn't it be better to have every check-in be stable?

      Yeah, and it'd also be nice if software was released without bugs. Every non-trivial change (and more trivial changes than you or I would like to think) introduces the chance for an unintended consequence. If you are attempting to ship a solid product and you need a critical bug fix ASAP, you really want to start from EXACTLY the code you shipped last time and make the minimum change to fix the critical bug.

      For some, especially informal users, a frequent release schedule with lots of miscellaneous changes irrelevant to their purposes might be ok. In many professional environments, that's a big problem. Ship early ship often is not a recipe for being taken seriously in a lot of businesses.

    20. Re:IDE Integration by ShieldW0lf · · Score: 4, Interesting

      Looks like the reason he likes Git is because he's used to thinking of the other people he develops with as idiots, and it makes it easy for him to deal with them.

      The talking down at you attitude is supporting evidence....

      --
      -1 Uncomfortable Truth
    21. Re:IDE Integration by dubl-u · · Score: 2, Insightful

      When adding a new feature that might take 2-3 weeks to be "stable", do you use a different system to back up your work each day?

      I don't check in things that I don't think are stable. I do that primarily through test-driven development and pair programming, plus automated acceptance testing and showing new versions to product management and/or QA every few hours.

      Bugs only get harder to find over time. It seems a lot cheaper to me to kill them dead as soon as possible, rather than storing them up and trying to find them later.

    22. Re:IDE Integration by 2short · · Score: 3, Insightful

      "Honestly, if you've never seen the need to branch-and-merge, you've never worked on a large project. Period."

      You can always tell when someone is making an unfounded claim based on their own narrow experience being all that matters: They say "Period" at the end.

      Some large projects are organized and run in ways that require branching and merging. Some are organized and run in ways that don't. Generally these decisions are mandated by factors that have nothing to with any developers preference about source control or anything else, but are based on the external nature of the project at hand or management decisions or whatever.

      As far as reccomendations:
      I work on a project that does very little branching & merging. We use SVN, and I like it (Tortoise in particular) very much, so I recommend it if you don't need a lot of branching and merging. If you do need a lot of branching and merging, I've heard it's a PITA, so you should check into that. You probably know if you do, or will do, a lot of branching and merging, and you should choose an SVN system based on that, and not worry what anyone else thinks it says about the size of your project or ability to form teams.

    23. Re:IDE Integration by pthisis · · Score: 2, Insightful

      I agree that's popular, but I don't think it's a good idea. Wouldn't it be better to have every check-in be stable?

      Not always.

      In the real world, a development branch often requires coordination between multiple programmers; I change the broken API to FooLib. I know that this breaks the callers, but that's okay because we're working in the "big changes to FooLib" branch. I test that FooLib 2.0 works okay, then check it in to the dev branch. The rest of the team updates their code bases which use FooLib to the new APIs and check them in. Nothing's merged into any live branch until it's all integrated and tested. In the meantime, the stable branch continues to work.

      Or I write the tests for the new refactor, commit them (all broken), and then another programmer pulls them down and does the refactor. In the meantime, you still have a working test suite for the stable branch that's not showing false negatives.

      That's even leaving aside the much more obvious cases of "this is a massive change that's going to result in several days' breakage as we all work through it", where you have several developers who need to coordinate their efforts (and probably use many of the tools that a decent VCS gives them) and also don't want to have floating changes sitting outside the repository for days at a time (in case, say, a dev gets the flu and you need to continue working without trying to get at his personal machine or duplicate his work).

      And, of course, even if you write decent tests and are cautious about commits, it's entirely possible that you'll miss some bug (it may only show up in a certain environment, or you missed an obvious test case, or whatever). On even a medium-sized project, you don't want to supplant the stable code until there's been a whole heck of a lot more testing than just one programmer who thinks he's written good tests and done plenty of his own integration testing.

      Heck, you may even need to support the users who are running the old code for a long time, and have to keep doing bug fixes for them while most of the world is on the newer codebase.

      --
      rage, rage against the dying of the light
    24. Re:IDE Integration by ShieldW0lf · · Score: 2, Interesting

      In our office, we use Subversion, PHPUnit, Selenium, Xinc and Phing.

      Every developer has their own subdomain and associated folder on the LAMP server, and we each check out from the trunk into our web root. We work on our own tasks on our own copy of the web application through sftp or sshfs, and whenever we have a particular piece of work done or a particular bug fixed, we check our work back into Subversion, which immediately kicks off a suite of Selenium tests that takes a couple of hours to finish and emails the whole team a report. If there is already a test suite running, it re-runs the suite again immediately once it's concluded and sends another email.

      New versions of the software mean a brand new repository, and the only time we branch is when we want to create a snapshot that we allow clients using the older version to preview and test for usability (as opposed to functionality).

      It works well for us.

      --
      -1 Uncomfortable Truth
    25. Re:IDE Integration by musicmaker · · Score: 5, Insightful

      So I guess you've never worked in the real world, where corporate mandates a change that has to go out before EOB same day, or where you are half way through a feature set impl, and management changes the priorities. What do you do with that code then? Or when the CTO ups and quits, and his info has to be yanked from the website in 30 minutes or less.

      Often you need three branches at least, one for dev, one for staging, and one for production. And that's not counting the system rewrite branch that might be bumbling along in the background perpetuated by another developer whose been assigned to fixing all the wrongs in the current system.

      And let's not even start down the path of trying to integrate people's work in subversion who are in a big team when someone has gone three weeks without a commit because they are working on a major new feature. And that's not even starting to talk about database updates and how they have to be applied in the process between co-ordinating developers.

      Then we can talk about the offshore development team who isn't trusted to put changes into the main branch without a peer review from someone onshore.

      And then you get sued by a competitor who accuses you of stealing their code because you hired one of their developers and they have some random bit of proof, so you have to make a new branch to incorporate whatever random changes legal decides are appropriate to mitigate that, that have to be reviewed by an independent third party who takes three weeks to do anything, and you can't just stop development and wait for them.

      And what happens when you have to update the docs that should be in version control too for someone else, particularly manuals for a release that is concurrent with ongoing development, or even historic because something somebody put in the manual six months ago has turned out to be wrong, and they have to be updated for that release that people are still buying.

      Showing product to the client (because that's who really calls the shots, not the product manager) every few hours is just plain impractical. Most people don't want to see updates every few hours, they want a finished product in clear review cycles. They don't have the time to review the entire system every few days let alone every few hours. A full QA cycle for a normal sized product can last a week. Do you just stop development while they do a full QA before a release?

      And let's not even mention bugs that are transient and may only show up six months down the road when more people start using the system, like race conditions which have become apparent in code that was written two years ago and nobody remembers for toffee. What about storage checking - the system was written by someone who thought that storage would never run out, so why check to see if there is enough space on the disk to complete the operation, and the application crashes and is down for a while while some poor sysadmin tries to find more disk space.

      And the application that wasn't maxing out the network until it was deployed at a client with 300 users, and now you have to go back and rework your com model from a year ago. It's not exactly a bug, but you're gonna have to fix it anyway.

      What about a large scale integration with a pre-existing piece of software that might take a month to complete? You can unit test each piece of it sure, but you can't release the whole thing until the integration is totally complete.

      There are SO many reasons you have to have branches in the real world.

      --
      Everyone is living in a personal delusion, just some are more delusional than others.
    26. Re:IDE Integration by SanityInAnarchy · · Score: 2, Informative

      SVN isn't better or worse than GIT, except perhaps when examining a given feature.

      There are a very small number of features for which SVN is better than GIT.

      Therefore, even when working in such a way that SVN would suit you fine, I'd go with Git for things like size and speed alone.

      An SVN checkout of a single branch of my project (trunk, say) is a little over 160 megs. A git-svn checkout of the entire project -- all history it could find, all branches, all tags (and we tag once per deploy, which can be several times per week) -- is 140 megs.

      Given that, why would I waste my time with SVN? What does it do better?

      From what I can tell, there's partial checkouts -- which still have a fair chance of using more disk than a simple git clone -- and Tortoise. And there are things gitk does better than Tortoise, because of fundamental features missing from SVN.

      --
      Don't thank God, thank a doctor!
    27. Re:IDE Integration by dmuir · · Score: 3, Informative

      I think you miss the point. In Git (and Bazaar), you're working with your own branches locally. You don't have to tell anyone that you've made them. Once you're happy with your experimentations in one branch and want to merge it into the "trunk", you can then either tell your team leader, "Hey, I've finished this new feature, pull from me", or depending on your rights, push it straight into the main repository. That's the beauty of distributed SCM's. You're the only one who has to juggle those balls. If you're able to juggle 10, then fine. If you're like me and can only deal with 1 or 2, that's fine too. The point is, it's your own repository. You can make as many or few branches as you like and nobody has to know.

    28. Re:IDE Integration by xero314 · · Score: 2, Insightful

      So you've never implemented something and then wished you could revert a change that didn't work out?

      Are you saying your SCM doesn't let you revert/rollback without branching? Please tell me what SCM that is so I NEVER EVER EVER think about using it.

      Or have never wanted to incrementally implement something without incorporating it into the final product until it was fully complete?

      Since it's merging that is the problem and not branching, why would this scenario cause a problem. Branch of your release code, that should not have any significant work done on it, and do all you work in your main line, branching only stable code for the next release.

      How people get anything done with their convoluted source control management totally amazes me sometimes.

    29. Re:IDE Integration by Niten · · Score: 2, Insightful

      If I'm keeping track of a bunch of branches in my head, then that limits the amount of other stuff I can keep track of.

      But the idea is that if your project demands you keep track of these things anyway, branching can help ease that burden.

      The time I and the people on my team spend talking about the different branches is time we can't talk about actual features. If my ops guy or my product manager has to figure out what's where and what's elsewhere, then that's time, attention, and energy that they can't put into what they're really there for.

      That's not at all applicable to the kind of local branching used in Git and Bzr, for the reasons I outlined in the previous post. You can make a gazillion branches in your local copy of the Git repository, and your ops guy and product manager won't even see them unless you explicitly push them back to the central repo.

      As it turns out, the awesomeness of Git (and certain other distributed SCMs) can reduce that human cost to zero.

    30. Re:IDE Integration by xero314 · · Score: 2, Informative

      Simple fact is, branching and merging is required for complex software development.

      You are half right, branching (or tagging) is good practices for all software, regardless of complexity, but merging is only required if you branch in an overly complex way.

      Branch only stable code for releases and leave the mainline as the Latest and Greatest and you never ever have to merge, ever. Which is great because branching is easy, merging sucks.

    31. Re:IDE Integration by Abcd1234 · · Score: 2, Insightful

      Are you saying your SCM doesn't let you revert/rollback without branching?

      Are you saying that you enjoy having mainline broken while people are incrementally working on major code changes? Ignoring the fact that reverting changes can be a pain in the ass when multiple people are working on the same codebase.

      Since it's merging that is the problem and not branching,

      It is? Funny, I've never had that problem. Perhaps you should mention it to all those distributed SCM users. Even with subversion, merge management isn't that tough, as long as you're diligent and keep your working branch in sync with the eventual merge target.

      . Branch of your release code, that should not have any significant work done on it, and do all you work in your main line,

      So that my code can become broken while another developer incrementally works on a major change? Thanks but no thanks. I've experienced that, and it is, to say the least, really *really* annoying.

      Not to mention the case where developer X is working on some major feature, and then scheduling restrictions force the team to push said feature out, into the next release. Which is easier? Delaying the merge, or reverting all the changes?

      How people get anything done with their convoluted source control management totally amazes me sometimes.

      Convoluted? How? I'm about to create new major feature X. I create a branch myproduct-feature-X. I work on that branch. When it's done, perhaps I send out a code review request, including the branch name. When I'm done, I instruct my SCM to merge from the branch back to trunk.

      This is a *far* more sane way to manage major changes. It facilitates code review, makes it easy to gate changes through a change control system, and allows developers to use the full power of an SCM for incremental development. It's only convoluted to those who don't understand basic source control concepts.

    32. Re:IDE Integration by Abcd1234 · · Score: 3, Insightful

      Admittedly my code is rarely ever rolled back, but when I do have to it's as easy as choosing the commits included and in that piece of code and removing them.

      Which is non-trivial when multiple people are working on the same codebase. It's the precise reverse of the merge problem. Although I would contend it's actually conceptually harder. It's much easier to look at a pair of changes and merge them, either automatically or manually. But trying to unwind two sets of intertwined changes is not my idea of a fun time.

      I'm not against distributed SCM in anyway, but I will say that from everything I have read distributed SCM does not alleviate the need for manual conflict resolution in anyway shape or form

      I never said it did. What I said was that users of distributed SCMs have discovered that conflicts simply aren't that big of a problem in everyday use.

      Why do you have broken code in your working copy?

      I don't have broken code in my working copy. I have in-progress code in my working branch. Why do I have that? Because the SCM exists to hold my code. It allows me to compare my code against mainline so I can review my changes. It allows me to incrementally update and revert my work as I go along. It allows me to ensure that all my changes are in an SCM which is backed up daily, so that I don't have to worry if my desktop crashes. It allows me to work in multiple locations on the same codebase. In short, it lets me use the SCM to manage my sourcecode, both my in-progress, working efforts, as well as the stable, in-production codebase.

      Besides which, you seem to have this rosey picture that every commit is a good one. Believe it or not, people make mistakes. And when the guy down the hall accidentally breaks the database because his upgrade script is slightly b0rked, I don't want to waste time while they get their shit together.

      And why is anyone committing code that either does not compile or does not pass your unit test suite?

      Because no test suite covers all bases. And because people simply make mistakes.

      Honestly, have you actually developed in the real world?

      Huh? Why revert or delay anything.

      I see you've completely missed the point. Here, let me be more explicit:

      1. Project X has a deadline looming. In project X, management has scheduled features 1, 2, and 3 to be included.
      2. A month before the deadline hits, the developers for feature 3 report that they are behind schedule and that feature 3 will have to be excluded from the release.
      3. ?

      The question is, what do you do at step 3. If you believe that all development should happen in trunk, then the developers now have to find a way to revert all the changes that make up feature 3 (naturally they've been using the SCM to interact amongst themselves). This could be an extremely non-trivial task depending on the complexity of the change.

      Or, if you believe that all major development such as this should happen in branches, then the managers need only decide not to incorporate the changes from feature 3 into trunk.

      And if you've never encountered this situation, I strongly question your experience, as this is pretty typical (just ask Microsoft about how WinFS is going).

      Branch out only the stable code into your release branch.

      Ha ha ha. Okay, now you're just being funny, right? What, you think you can just cherrypick changesets and build a release? Have you never built a large, non-trivial application with multiple developers? Or a database driven application where multiple, interlinked changes need to be made to the schema? Sorry, but the interdependency between changesets means that's just unrealistic in practice. And I've seen it tried... it ain't pretty, to say the least. Just the process of trawling through the changelog to identify all the mods that went into some feature, so that you can revert them, is an absolute frickin' nightmare. And that's ignoring the process of actually revertin

  4. What about Git vs. Bazaar? by Bromskloss · · Score: 4, Interesting

    They are both of the "distributed" kind.

    --
    Swedish plasma phys. PhD student; MSc EE; knows maths, programming, electronics; finance interest; seeks opportunities
    1. Re:What about Git vs. Bazaar? by Dr_Barnowl · · Score: 2, Informative

      This thread is prompting me to have another go with git on Windows ; I've been using Bazaar for my project (both the source for the project, and the version control for the actual content of the project).

      The performance on Windows has come along in leaps and bounds since v 0.9 - it started off just "a lot faster than Subversion", it's got to the point where it's "wheee, that's fast".

      Of course, you try out the same file tree with Bazaar on Linux and the speed makes you a little green with envy...

      Bazaar isn't as "industrial" as git - in both ways. It may not perform quite as well, but it's also less rough around the edges and supports more workflows. And it has the tremendous advantage of being mostly written in Python, which means that hacking on it is a lot easier. If you have an itch, it's a lot easier to scratch it.

      I would have hated to try to teach the default porcelain in git to my (non techie) users.

    2. Re:What about Git vs. Bazaar? by Dr_Barnowl · · Score: 2, Informative

      Bazaar will let you work as if it were Subversion, for example, with a central server, lightweight local checkouts (with no history).

      It will also let the same group of people work offline. Or heavyweight checkouts that can be offline, but commit to the server by default.

      See here for more about workflows from the simple to the involved.

  5. Familiarity? by gorrepati · · Score: 5, Insightful

    Thats all there is it to it, oh mighty one!

    --
    You will never have experience until after you needed it.
  6. go with Perforce by flannelboy · · Score: 2, Informative

    Seriously. I know it's $800 a user, or something like that, but it's worth every penny. (Yeah, yeah, it's closed source, and ships as a binary, but it _really_ works).

    Note that Perforce is free for open source projects.

    1. Re:go with Perforce by 32771 · · Score: 4, Insightful

      >Note that Perforce is free for open source projects.

      Yeah, so was BitKeeper and that used to really work too.

      --
      Je me souviens.
    2. Re:go with Perforce by nuttycom · · Score: 2, Interesting

      Ugh. I've used CVS, SVN, Perforce, Darcs, and Git over the years. Perforce was far and away the worst of the lot.

      Whose bright idea was it to make the clientspec an unversioned artifact? In the company that I used Perforce at, which shall remain unnamed, it took me two weeks just to assemble a clientspec that would give a checked-out version of the repository that would actually build. Every developer in the place had their own personal flavor. What a ridiculous nightmare that was.

      Git is far and away the best version control system I've ever used. Sure, it doesn't yet have decent IDE integration, but the command line interface is simple and gives you more power to rearrange your repository as needed than anything else I've seen. I love the fact that local development branches are so cheap; using independent branches for each of the features I'm working on at any given time helps make sure I don't let excessive coupling between subsystems creep in to my code, and merging (and rebasing, and rearranging commits) is faster and more painless than with any other system I've used.

    3. Re:go with Perforce by Dr_Barnowl · · Score: 2, Interesting

      The only thing distinguishing the commercial VCS tools now is their integration with the likes of project management and issue tracking tools, and possibly the ease of getting a support contract (for those organisations that just have to have someone to blame).

      None of them can compete with the next-gen DVCS systems in terms of performance ; Linus Torvalds notes that BitKeeper used to take about 10-15 seconds to merge an emailed patch to the Linux kernel, an "order or two" of magnitude faster than anything else available at the time. He thought it would be good to cut that down to 3 seconds ; when he had finished, he had git merging over 6 patches per second.

      Why go through all the rigmarole of proving you are an open-source project (or squeezing $800 per seat out of accounting) when you can install git (or bzr, or hg) and

      git init
      git add .
      git commit

      You're off.

  7. Comment removed by account_deleted · · Score: 5, Informative

    Comment removed based on user account deletion

  8. Integration in common tools by oever · · Score: 3, Insightful

    Git is not well supported on Windows like Subversion is with turtoiseSVN. There is no good integration in Eclipse or Netbeans. The workflow is more complicated and enterprise tools such as Jira and Confluence do not support it.

    These things may improve but right now, Git is not very well suited for use in corporate environments.

    --
    DNA is the ultimate spaghetti code.
    1. Re:Integration in common tools by Yokaze · · Score: 3, Informative

      The other dvcs Mercurial: Tortoise, Eclipse, Netbeans
      I don't see, why the workflow has to become more complicated for server-side things like Jira and Confluence: you simply create a automatic server-side conversion from your central dvcs repository to a svn repository for those tools are done with it.

      --
      "Between strong and weak, between rich and poor [...], it is freedom which oppresses and the law which sets free"
  9. Neck and Neck by Anonymous Coward · · Score: 4, Funny

    I can honestly say that I have no preference of one over the other; having only just heard of them both by the OP.

    1. Re:Neck and Neck by Tumbleweed · · Score: 2, Funny

      I can honestly say that I have no preference of one over the other; having only just heard of them both by the OP.

      Shut up, Palin.

  10. not 1:1 by sohp · · Score: 5, Interesting

    The most effective use of GIT happens when the team changes its mindset away from the central repository with multiple developers checking into it to a true peer-to-peer development team. I wouldn't switch away from svn until the organization I was with was prepared to "think different" and make that transition. Using GIT like a fancy svn just makes it like a complicated svn, not a better way of doing version control.

    1. Re:not 1:1 by Nevyn · · Score: 2, Informative

      Why, does that matter? Most of the git work I do there is a central repo. that everyone with privs pushes to. So instead of "svn commit" you have "git push" ... except with git you can create local branches, work disconnected, don't need to give commit privs. out as much, and it's much faster.

      --
      ustr: Managed string API with ave. 44% overhead over strdup(), for 0-20B
  11. Real programmers by David+Gerard · · Score: 5, Funny

    Real programmers type cat | cc and get it right the first time.

    --
    http://rocknerd.co.uk
    1. Re:Real programmers by Waffle+Iron · · Score: 5, Funny

      Real programmers type cat | cc and get it right the first time.

      Some of us don't have to cling to safety blankets like that. We prefer the simplicity of cat > a.out

    2. Re:Real programmers by dreamchaser · · Score: 2, Funny

      Meh. Talk about safety blankets. Real programmers use magnets to set the bits of the executable on the disk manually.

    3. Re:Real programmers by rikkitikki · · Score: 2, Informative

      Gah, hate to reply to my own post, but I got it working:

      cat << eof | cc -x c -

      i picked 'eof' as the marker of my end of input.  you can pick whatever you like.

      the compiler needs to know what language it is compiling, thus -x c

      and finally tell the compiler to read from stdin with '-'

    4. Re:Real programmers by ragarwal · · Score: 2, Funny

      Real programmers type cat | cc and get it right the first time.

      i pick up my handset... dial my modem... and whistle at 300 baud.

  12. Windows & Documentation by vladd_rom · · Score: 4, Informative

    Git wasn't really designed for Windows (where you lack the fork() call and must do everything using CreateProcess()-like API), and therefore the Cygwin port or the state-of-the-art in Git for Windows is horribly slow and inconvenient to use. Documentation is not optimal either; in some places you need to get accustomed with 2 or 3 different terms meaning the same thing, and often you must dig under the hood and learn how the underlying storage works in order to grasp the high-level functions (which doesn't happen in Mercurial's case, for example). For me the #1 blocker is the Windows thing because I'm not an idealist and I need to compromise, I suspect it's even more true in the corporate world.

  13. Linus on Git vs CVS/Subversion/Bitkeeper/etc by MrFreezeBU · · Score: 5, Informative

    How odd that I was just watching a talk that Linus gave at Google. Link to the talk

    1. Re:Linus on Git vs CVS/Subversion/Bitkeeper/etc by doug · · Score: 5, Informative

      Randal Schwartz, the Perl guru, gave a more detailed presentation on git, also at google. It has a lot more meat on its bones, and gives examples of using git.

      http://www.youtube.com/watch?v=8dhZ9BXQgc4

  14. Linus explains all by rehabdoll · · Score: 3, Informative

    http://www.youtube.com/watch?v=4XpnKHJAok8

    He might not be very objective and his talk obviously only offers one side. Still, might be informative :)

  15. Re:my choice by sohp · · Score: 3, Insightful

    I also like the central server aspect, so that there is one place where the code is located, and I just have to keep that backed up.

    Nothing wrong with that, if it's effective for you and your team, and clearly svn wins out over git. Trying to make git within that model is just adding complexity without getting the benefits. If, in the future, you and your team decide you need to change how you do source control, then git, or some other distribute peer-to-peer system, might be the solution. But don't just use it as a drop-in replacement for centralized server development.

  16. Go with Bazaar by bbn · · Score: 4, Interesting

    I found the Bazaar system to be superior to all other version control systems I have tried, including subversion and GIT.

    http://bazaar-vcs.org/

    Why? It is fast, it has tools integration and it can be used in much the same way as subversion/CVS. It is much easier to learn and just as powerful as something like GIT.

    There might be reasons to use GIT for extreme projects like the Linux kernel, but I believe Bazaar will do just fine for all reasonably sized projects.

    1. Re:Go with Bazaar by Quartz25 · · Score: 2, Informative

      I have to second this, I've used Git when working on OLPC and I've broken my repositories more times than I can count.

      Bazaar does not break.

      --
      Most people don't get why the integral of "e to the x" is so funny. Most math majors don't have a sense of humor.
  17. Depends what you need more. by Ant+P. · · Score: 5, Funny

    SVN is better for Windows users.
    Git is better for Git users.

    1. Re:Depends what you need more. by ignavus · · Score: 3, Funny

      My problem with CVS is that I keep confusing it with CSV.

      So when discussing file formats I can never remember which acronym I should be using, and keep referring to CSV data files as CVS. Age does that to you.

      Git, on the other hand, would distract me with thoughts of the "stupid gits" using it. And bzr just makes me think "bizarre".

      Mercurial sounds exotic, engimatic. Maybe I'll upgrade to that.

      Slashdot - where some stupid git will subvert the conversation by advising you to choose a SCM based on how bizarre the name is.

      --
      I am anarch of all I survey.
  18. Git and SVN by MemoryDragon · · Score: 5, Informative

    Well hard decision, I live in both worlds, currently I use svn as central repo and git mainly for versioning local repos. Well both have their advantages and disadvantages. SVNs biggest disadvantage probably is the speed, and the model (which also is its biggest advantage for certain team structures) Gits biggest problems are: Almost total lack of tool integration into existing tools. Rather unstable and not well integrated into Windows. You have a load of data which resides on your filesystem (basically a full repo copy) while SVN keeps only parts of the metadata locally. Git however has the bigger advantage of having a very compact meta format so this disadvantage basically is nullified unless you have a huge codebase with thousands of revisions! I would not despise one or the other. I personally for a mixed team still would choose svn over git as it is currently, mainly due to the unpolished windows integration and lack of visual tool integration (yes git gui is known to me)

  19. similar thoughts by Speare · · Score: 2, Interesting

    I've been using CVS forever, mainly because it was the only real noncommercial option ten years ago. But I'm interested in trying out any versioning system that will work better, because I know I'm abusing CVS with my file storage needs.

    I do a fair amount of hobby coding, so any of the systems work well for that. Thousands of tiny text files are easy to merge. The sandboxes are fast and I can set up my repository on another machine on my lan.

    However, I also do a fair amount of semi-professional photography. My sandbox may have a couple thousand binary files that range anywhere from 2 MB to 2 GB. The number of versions of a file may typically go as far as 4 or 5, rarely as high as 10. A new version is best handled by simply snapshotting the whole new binary file, like the old VMS filesystem does. My repository on my lan machine has several tens of thousands of these binary files. My sandbox is rarely complete: I only sync certain subfolders now and then, and when I've checked in my changes and need space, I just erase that area of the sandbox. As long as I don't try to (cvs update -d) at the top level, I'm fine.

    I know I may be wrong, but if I switched to git or mercurial, as I understand it, every sandbox is/has its own repository with complete history, and these tools are more interested in how to merge changes from repository to repository. This is not what I want, in that the local sandbox+history would easily bloom into the many-gigabyte range and start to crowd my regular working space. I read a bit about their repository 'packing' options but that's not a solution, it's a maintenance feature.

    --
    [ .sig file not found ]
  20. 3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 5, Informative

    Trac - One reason to use Subversion is the hard bindings you can get with Trac. Nothing enters the repository unless it is tied to a ticket. Ever been to a software process review? This is a must.
    With the newer trac versions you can pass the tickets though the review stages and if you just wish to peer-review the code you can do that in Trac without checking out anything at all. Just click on the links in the ticket and you see a diff of the source in the webbrowser.

    Tortoise - integration into Windows desktop. You can immediately tell by looking at the folder icons what needs to be checked in. Right click on a folder and select commit or update etc... For some reason this tools is so much better than anything on Linux...

  21. Re:CVS all the way baby by MemoryDragon · · Score: 4, Informative

    Sheesh tagging and branching really is the weak point of CVS while SVN does both pretty well! SVN just does it differently but unless CVS finally can make real tags or branches instead of doing full file copies I will stick to SVN. Sorry to say that CVS has some nice points, mostly being faster than SVN but thats basically it, everything else is way better done by SVN, especially tagging and branching! Git does both operations more along the lines of CVS with real tags and branches instead of hardlinking, but in the end the end result is the same, lightweight tags and branches, while CVS has heavyweight tags and branches!

  22. Does it matter? by Jeff+Hornby · · Score: 4, Interesting

    The truth is that despite the amount of invective on the subject, the choice of source control tools is not going to have any measurable impact on your project. Hell, most projects could easily run without a problem on a non-buggy version of MS-SourceSafe (if such an animal existed).

    The biggest cost you're going to have with your source control package is the initial setup. The biggest benefit you're going to get from your source control package is going to be minimizing that cost. Choose any of the modern source control packages and just get on with what you're being paid to do: write code.

    --
    Why doesn't Slashdot ever get slashdotted?
  23. I have considered Git but... by shellster_dude · · Score: 3, Interesting

    Many of the things that Git touts as huge improvements over svn really don't apply to any collaborative work I have ever done. So what, I can show people my little version of the repo with out committing it? I can just send the source files to them out of my svn checkout. So what, I can stash stuff and come back to it later? I can branch and merge in svn. I can leave comments, like every good programmer should, so that I will know what was done on the branch, and the current status of the project at a glance. So what, I can check stuff out of and commit the source on my local system without network connections? I can make multiple copies of my version of the source code that I checked out of the svn repository. In either case, if you don't make sure you have the latest copy of the code, you are gonna have fun trying to merge it later. So what, Git will allow me to make patches so that I can show the changes to my coworkers? I could just as easily send them a diff of my copy and the svn repo.

    There is nothing wrong with git. I just don't see a clear advantage to it. In every argumentative paper I have seen about git vs svn, they always tout the above "advantages" of git. These items don't translate to actual advantages during project work, in my experience. If anything, the multiple local repositories all over the place, would seem to me, to cause more wasted time trying to merge in changes to the central repository, because of the local git repo's having a tendency to allow themselves to get so out of date.

    The main reason I use svn still, is because I learned it first, it does not have any disadvantages, for me, when I compare it to get, and it is well supported, and has a large developer base.

    1. Re:I have considered Git but... by MemoryDragon · · Score: 4, Informative

      svn has no merge tracking. That's a pretty crucial feature.

      Resolved since SVN 1.5, merge tracking has been added!

  24. Re:my choice by befletch · · Score: 2, Insightful

    I'm in the same camp. I have to manage version control with some less than sophisticated Windows-based web guys, and TortiseSVN works well for that purpose.

    Personally, I come from a CVS on UNIX background so the smooth repository transition and similar commands and usage style were handy. All I needed out of a "better CVS" was the ability to version file name changes. If you aren't coming from CVS, I think SVN loses much of its charm.

    I'd be all over Git if I thought distributed repositories would be helpful for my projects, and I'm thinking of tooling around a little with it on the side just to keep up on all this new fangled stuff you kids are using these days.

    Rails, not so much. It looks nice, but it tickles my "get off my lawn" reflex.

    --
    If you say, "now I'll be modded down because of X", I'll happily oblige.
  25. Re:Because... by corprew · · Score: 2, Insightful

    I've been using Subversion largely through the eclipse plugins for a while, on a couple of different platforms. I would characterize the Eclipse integration (Subversion) as fairly mature, and it has exhibited recovery for me across a few different hilarious network failures, which caused me difficulties (and delta corruptions) on the commercial products i'd used previously.

    Benefits of Subversion:
    1. It's been working for a while, the last thing I need to do with my copious spare time is switch over to a new VCS mid-project.
    2. MacOSX version that works without having to deal with endless recompile/experimentation. Right now, it's a PITA to get git working under MacOSX.
    3. It's easier to back up a central server than it is to get developers to back up their machines on a regular basis. Who wants to risk losing code?
    4. I'm working for a startup. Right now, I'm evaluating VC systems on one basis -- and it isn't novelty, it's whether it does a job in an appropriate way without taking resources away from doing other high priority tasks. GIT (as of a month ago at least), hadn't reached that level of seamlessness.
    5. Good tools exist that non-technical people can use to check things in and out of SVN on a variety of platforms.

    --Corprew
    (and for those wondering, SVN works fine with the free AptanaStudio plugin that lets you write rails/ruby in Eclipse)

  26. Re:my choice by Jason+Earl · · Score: 3, Informative

    Precisely. I don't use Subversion for managing code anymore because for merging the distributed version control systems are much much better. However, Subversion is an excellent versioning file system, and that's what most people actually want. It handles large files well (try checking a 500M file into git, mercurial or bazaar sometime), and it can even be used as a WebDAV share for completely braindead use by normal end users. End users see the repository as a Network drive, but I can go back and get old revisions easily.

    Now that Subversion has more advanced merging abilities it might even be suitable for shops that like Subversions centralized nature but still need to merge on a regular basis.

    Besides, mercurial, git, and bazaar all interface well with Subversion. I frequently use bzr as a front end for subversion repositories if I know I am going to be doing any merging.

  27. How about GIT vs Mercurial ? by m.dillon · · Score: 2

    The DragonFly project is planning on moving out of CVS and has been looking at various repositories. We aren't actually interested in Subversion per-say, not any more, but some of our developers have used GIT and a few are advocating for mercurial as well. We need to come to a decision by mid-november.

    I haven't used Mercurial yet myself. I have used GIT. It took about a week to get used to it but once I understood the contextual labels things became a lot more obvious. We will maintain our central repository either by having it pull from the individual developer's repositories or by having the developers push into it. I'm still not quite sure what the best methodology is. It has to be automated no matter what.

    If someone is using GIT in a similar manner I would like to hear your story.

    I would also like to solicit opinions from people on GIT vs Mercurial.

    -Matt

  28. Command line is easier by mangu · · Score: 2, Informative

    most of the items that git 'claims' to be better on is something IDE plugins fix

    Funny, but I've never got the IDE plugin for *any* version control system working well. Since I always have at least one command window open, typing "git commit -a" is faster and easier than locating the corresponding menu, clicking on it, and praying that it will do exactly what I want.

    Disclaimer: Of course, this doesn't mean I don't use the many other functions that work better on an IDE than in a text command. I can use vi occasionally for a quick edit, but development of a large code base is much easier and quicker on a good IDE. It's just that version control is quicker on the command line.

    1. Re:Command line is easier by Cyberax · · Score: 2, Insightful

      For example, my IDE (IntelliJ IDEA) allows me to view history for a _selected_ _class_ or even a piece of code. Even across branches and merges.

      Try to do it from a command line (you can, but you'll need a lot of 'blame' and 'log' commands).

  29. Re:flamebait by MrMr · · Score: 3, Funny

    I'm sure that's just by accident. I suggest you explain the site maintainer, preferably in all caps, how poorly their site is programmed.

  30. Re:my choice by onefriedrice · · Score: 3, Interesting

    But don't just use it as a drop-in replacement for centralized server development.

    I disagree. You can take advantage of git's other positive aspects even if you manage a central repository: Common operations are speedy, local branching, and easy merges are all benefits you get by using git regardless of whether you take advantage of the distributed nature of git or not.

    I won't go so far as to say that all other SCM is total crap, but having recently switched my code repositories to centralized git repositories, I certainly wouldn't go back or put a new project in anything else. It was so easy converting my previous repositories to git (preserving history) that I think many people can and should consider git as a "drop-in replacement" for other SCM.

    The only reason I can think of to not go with git is (like the OP pointed out) the lack of nice UI tools (and premature Windows support). I can totally understand how this may be a show-stopper for many groups and projects, and that's fine. But to those groups or individuals not on Windows who aren't afraid of a few easy command-line programs, do yourself a favor and switch to git. Really, it's that much nicer.

    --
    This author takes full ownership and responsibility for the unpopular opinions outlined above.
  31. mercurial by BountyX · · Score: 2, Interesting

    How about HG (mercurial)? It offers the best of both worlds supporting excellent windows integration (TortoiseHg, Eclipse plugins, etc) and having a large subset of similar features compared to git.

    --
    Trying to install linux on my microwave, but keep getting a kernel panic...
  32. Comment removed by account_deleted · · Score: 2, Informative

    Comment removed based on user account deletion

  33. Git makes backups easy by togofspookware · · Score: 2, Interesting

    My biggest reason for switching to Git was that it makes backing up repositories vastly simpler.

    In subversion I had to set up a repository with svnsync, and that repository couldn't be used interchangably with the original. And I would constantly have to go in and figure out how to unlock the destination repo. Lots of problems.

    With git, I just clone the original repository and do a pull once in a while. And if I want, I can easily switch my clients to use the alternate repository (e.g., if a server goes offline).

    I've been using msysgit for months and have had no issues with it. I don't quite understand the argument that 'git is terrible on windows'.

    --
    Duct tape, XML, democracy: Not doing the job? Use more.
  34. Re:My own opinion (prob. very controversial) by Prien715 · · Score: 4, Insightful

    You've obviously never worked on a programming team.

    The best reason to use CVS or Git is the situation where multiple programmers are touching the same file(s) at once and you need to both commit. Also, the blame tool on SVN lets you easily tell when any given line of the code was added and why (see the commit message). The SVN repository I work on professionally has well over 25K commits...try managing that with a bunch of copies and text files!

    (I've done the versioned tarballs for a project I worked on alone...never again!)

    --
    -- Political fascism requires a Fuhrer.
  35. Re:CVS all the way baby by MemoryDragon · · Score: 2, Insightful

    Actually the lack of atomic commits in CVS is reason enough for me not to touch it with a ten foot pole. CVS was good enough when it was the only competition on town (It still is better than VSS and RCS) but nowadays basically all revision control systems having atomic commits one way or the other. CVS being put on hold and have been put on hold for so many years, I would not touch it anymore and would consider even to move old repos over to newer systems. There are so many systems around that there is no single reason to stay with CVS, unless bad habits you dont want to get rid of!

  36. Re:My own opinion (prob. very controversial) by imbaczek · · Score: 4, Funny

    cp sucks at merging.

  37. Re:my choice by Otto · · Score: 2, Insightful

    I'm not afraid of the command line, but I'll be damned if I'm going back to IDE-less development for any project more complex than a simple webapp.

    I don't use Windows for development, but I DO need my IDEs.

    Git fails because of the lack of integration. Until it has that, it does not fit my needs. What's more, it fails to start with because they didn't consider that in the first place. A "simple text editor" dev environment stopped being useful or productive back in the 90s.

    --
    - Give a man a fire and he's warm for a day, but set him on fire and he's warm for the rest of his life.
  38. Re:svn == unpleasant and maybe buggy by CaptSaltyJack · · Score: 5, Informative

    Subversion usability leaves a lot to be desired (although the book is really nice). For example, cd into a working copy that you've never seen before and try to determine its exact repository URL.

    Uhh, ok.


    $ cd tortoiseSVN
    $ svn info
    Path: .
    URL: http://svn.collab.net/repos/svn/trunk
    Repository Root: http://svn.collab.net/repos/svn
    Repository UUID: 612f8ebc-c883-4be0-9ee0-a4e9ef946e3a
    Revision: 33826
    Node Kind: directory
    Schedule: normal
    Last Changed Author: hwright
    Last Changed Rev: 33826
    Last Changed Date: 2008-10-21 15:16:27 -0500 (Tue, 21 Oct 2008)

    That was tough. I think I broke a sweat.

  39. Re:My own opinion (prob. very controversial) by BitZtream · · Score: 3, Interesting

    You can leave comments on snapshots with versioning filesystems? I'm asking, I really don't know, haven't ever dealt with them, but any version control system that doesn't have comments is nearly worthless to me. I really need to know why my developers make a change as looking at the code for a bunch of changes across several files does not always result in the clearest picture of a change if you don't have some idea of what the goal was.

    The commit comment log is priceless to me, but then again, the developers I work with are pretty good about making small changes and committing often with useful and informative comments. We try to avoid large commits that change lots of files, and when we have them, we generally warn everyone in advance that its coming and to be prepared for it so as to make merging things together a little easier. If everyone knows its coming, they tend to work together to make the merge smoother and make sure things work well together.

    --
    Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
  40. Exactly. Use a solution for modern problems by CarpetShark · · Score: 2, Informative

    Git, Bazaar, Mercurial, Darcs and a few other distributed systems are the only ones I've entertained since I lost interest in RCS/CVS years ago. No one in their right mind should be even thinking about so-called tools like SVN these days.

    Even just to keep my simple documents like lesson plans and tutorials up-to-date across a few machines and platforms I don't control (with pen drives/emails in-between), I need to use rsync-like tools that can cope with more than a single central repository, and sync in both directions. The days of big central mainframes which hold the One True Source Code Repo are long gone.

    So far, my thoughts are this:

    Bazaar( aka bzr, aka bazaar-ng until recently ): very nice, but a little flakey now and then.

    Git: seriously fast, powerful, but too complex for any project with lay-contributors and too easy to hose your work with

    Mercurial and Darcs: not much experience with them, but at least Mercurial's TortoiseHg option for windows seems ready to go, which is a huge win if you care about a cross-platform solution.

    1. Re:Exactly. Use a solution for modern problems by mcvos · · Score: 3, Interesting

      Git, Bazaar, Mercurial, Darcs and a few other distributed systems are the only ones I've entertained since I lost interest in RCS/CVS years ago. No one in their right mind should be even thinking about so-called tools like SVN these days.

      Well, there is one big advantage to SVN: it's possible for mere mortals to understand how it works. To understand git you have to be a fucking genius.

      But the awesome magic that git does makes git a worthwhile investment.

    2. Re:Exactly. Use a solution for modern problems by Quartz25 · · Score: 3, Insightful

      It should also be noted that Bazaar actually works on Windows. Git does not.

      --
      Most people don't get why the integral of "e to the x" is so funny. Most math majors don't have a sense of humor.
  41. RCS os OK for very small projects by ChrisA90278 · · Score: 3, Funny

    What size is your project? For small projects with one to three people who all work in the same place yu can use RCS. It is serverless and works inside the file system. For many years I simply NFS mounted the RCS directories onto the development machine. There is almost zero setup and very little learning curve.

    CVS was a server centric RCS. If you don't need a server because you are the only developer on the project RCS is everything you need

    I also use RCS for all those small 8.conf file in /etc. just do a "mkdir /etc/RCS" and you are setup and running. It's that easy.

  42. They don't exist by OrangeTide · · Score: 3, Insightful

    There is no such thing as a "die hard" subversion fan. People use subversion because they already use subversion. Not because they are fanatical about their choice. Which sets them apart from people who go for Git, Mercurial, etc. it puts subversion people roughly in the same group as CVS people.

    It's hard to be fanatical about the philosophy of "if it ain't broke, don't fix it"

    --
    “Common sense is not so common.” — Voltaire
  43. Re:Reasons Not to Switch by qualidafial · · Score: 2, Informative

    • Subversion will use less space on indivual developer's computers disks.

    I've heard git is pretty bad about disk space, but Subversion is a bit ridiculous in it's own right. With SVN you are storing the working copy twice: once for the files you will work on, and again as a backup copy so svn can do diffs.

    In mercurial the repository is heavily compressed and revisions are stored as diffs (with occasional full copies) so this is a non-issue if you don't have a lot of binary data. If you're going to use that much disk space with svn, you may as well go with mercurial and have the entire repository history while you're at it.

    • Using a central server will give you an obvious place to go to for a system of record.

    You can synchronize on a central repository using git, mercurial or bazaar. The difference is that you have the choice of when to push your changes upstream, and you have the option to continue working and performing commits locally when you are offline.

    • Using a central server will let you check user ids based on an external authentication system to make sure you can blame the right person when they break the software.

    This is all possible with distributed repositories too.

    You don't use branching that much and can safely ignore the dumbest decision ever on the part of the subversion developers

    I'm not sure what the "dumbest decision" you're referring to is. But I don't blame you if you don't use branching with CVS or SVN--branching is easy, but merging branches is horrid. The is due mainly to the fact that neither CVS nor SVN knows when a particular commit represents a merge from another branch of development. So you have to either merge from the branch point, or research the commit history to determine when the last time the two branches were merged--otherwise you'll have a major mess on your hands trying to merge two branches with many duplicate changes.

    With a distributed VCS this is not a problem. git, mercurial and bazaar all keep track of how you merge different changesets together so that a merge only as complicated as the actual changes make it, not how complicated your VCS tool makes it.

    For example, let's say you release version 3.0 of your software. You tag the changeset as "v3.0" and continue on work for 3.1.

    hg tag v3.0

    Now suppose that a week later, a security flaw is discovered which must be patched immediately. You update your working copy to the "v3.0" tag, and start a branch "3.0_maintenance". You make the changes and commit them to the 3.0_maintenance branch.

    hg update -r v3.0
    hg branch 3.0_maintenance
    // make the required changes in code
    hg commit -m "Security fix see bug 19237"

    You want your ongoing development on 3.1 to include the bug fix you just committed to 3.0, so you switch back to the default branch, merge the changes from 3.0_maintenance, and commit.

    hg update -r default
    hg merge -r 3.0_maintenance
    hg commit -m "merge bugfix from 3.0_maintenance"

    Later, when another bug is discovered in 3.0, this same process will suffice to patch the 3.0_maintenance branch and to merge the change back into the default branch.

    hg update -r 3.0_maintenance
    // fix bug in code
    hg commit -m "FIXED: bug 20122"

    // merge bugfix into default branch
    hg update -r default
    hg merge -r 3.0_maintenance
    hg commit -m "Merge bugfix from 3.0_maintenance

    Mercurial (or git, or bazaar) kept track of not only the branch points but the merge points for you, which makes merging simple like it should be.

    Contrast this with CVS or SVN where you have to track dow

  44. Re:flamebait by caluml · · Score: 3, Informative
  45. CVS > SVN by Tetsujin · · Score: 2, Funny

    I'm normally all for newer better systems, but I have to agree... CVS > SVN because of branching/tagging.

    So, wait... You're running CVS and directing its stdout to a new file "SVN" in the current directory?

    Or are you saying CVS is a higher-valued number than SVN? Couldn't you simplify that and say C > N? I suppose that's only safe if you assume S and V are non-negative and that complex numbers and matrices don't figure into this...

    --
    Bow-ties are cool.
  46. Easy by lewp · · Score: 3, Interesting

    Git vs. SVN is more of a philosophical argument than a technical one. Git encourages disconnected operation and independent work more, while SVN tends to pay off the most if you're working regularly in lockstep with your team and everybody has a clear picture of what everybody else is doing. Not that you can't work on one kind of project with the other software, but it's more painful.

    There are bona fide technical issues you'll probably encounter no matter which one you pick, but those issues are trivial compared to the productivity you'll gain/lose by choosing the right one for your project and your (team's?) way of working.

    For you specifically, since you work with Rails, use Git. Everybody else is now, so it'll make dealing with other Rails developers easier. Most of the junior Rails folks we looked at recently (and haven't hired) are familiar with Git but not SVN.

    For everybody else, if you're a solo/freelance developer working by yourself, the choice doesn't matter at all. You don't really run into the major differences between the two until you start collaborating with other people.

    --
    Game... blouses.
  47. Re:my choice by mcvos · · Score: 3, Interesting

    I also like the central server aspect, so that there is one place where the code is located, and I just have to keep that backed up.

    Nothing wrong with that, if it's effective for you and your team, and clearly svn wins out over git. Trying to make git within that model is just adding complexity without getting the benefits.

    Not true. I hadn't even heard of git one month ago, but we just set up a central repository system. Actually we already had a central git repository (on github) before I started working here, but that meant everybody pushed their commits into the same repository, which the guy responsible for deployment to production didn't like: he wanted to keep it stable and only accept changes he approved of.

    So now everybody has his own fork on github, pushes commits to his own fork, and the guy merges those forks (branches, basically) back into the main repo. Since merging is trivial, this works out very well. Everybody can access everybody's commits without messing with the stable trunk or making a big mess of things, because git does all the heavy lifting for us.

    Having used SVN before, I was very skeptical about git until less than a week ago. Now that I've seen what it can do, I'm a believer.

  48. Re:my choice by mcvos · · Score: 2, Interesting

    So as a cmd-line user who only uses centralized repositories (with only a couple of other developers), what kind of benefits would git provide over subversion?

    Git would allow you to revert individual commits by other developers. That's something SVN will never be able to do. We just implemented a setup where each developer has his own repository on github, forked from the main repository on github. This makes it very easy for the guy with the final responsibility for deployment to decide which code he accepts and which he doesn't, while everybody else can easily accept whichever commits they like.

    This is really useful when some people are committing crazy shit, or some people are working on a big new feature that shouldn't go live yet, while others are working on bugfixes that should go live as soon as possible.

    Doing this with SVN is bloody hard. With git it's trivial.

  49. GIT is great, but it requires learning by Xua · · Score: 3, Interesting

    We've been through CVS, SVN and finally GIT when developing our code internally for a big open source project before opening it.

    Git actually requires changing the mindset for developers from producing the code to producing the patches.

    This is an excellent description from one of my colleagues and I think that Git is ideally made for making patches. Patches are what are valued and needed in the open source world while it is still often different for the corporate inner projects.

    When we were going to open source the code and understood that we'll have to behave like it is done in the open source, send patches to committers, Git became a natural choice although the central repository of the project is in SVN (Apache repository). Developing patches is different from developing the code in a small sized team. Git offers absolutely the greatest power to operate with code changes (patches) locally than any revision control that I've seen.

    The article misses a tremendously useful feature of Git called "rebase". It is useful when you develop some changes against a trunk that changes while you work on your code locally. You make some local commits and to make them synchronized with the current state of trunk it is necessary to rebase them on the new version. Git does it by far in the most convenient way I've seen applying all of your local commits one by one and asking to resolve conflicts when it is necessary. Of course it requires some discipline to commit locally in small portions, but it is easier than "merging often" with the trunk of development than subversion handbook says. Merging is often tedious and it is way easier to just commit small changes to a local repository than every time resolve the same conflicts when "merging often". You never have to resolve a conflict again after you've done rebase with Git.

    I didn't find performace on windows so bad. Cygwin port works ok, not so fast as on Linux, but it is good enough compared to subversion update. TortoiseSVN has to keep a separate cache to make windows performance decent. This cache is sometimes renewed and slows down a system for a long time if your checked out repository is big enough. All of subversion transactions like "svn log" require server interaction while Git is lightning fast. So I think even if filesytem performance of Git to clone or checkout may not be so good on Linux it is compensated with no delay to do every day commands like log, annotate, diff, etc.

  50. Re:Keyword: Herd by jimdread · · Score: 5, Insightful

    I like to use git because I find it easy to make a branch for testing out some new code, and easy to merge the branch into the trunk if I want to keep it. Here are some aliases I wrote that cover pretty much all the git I use. If I decide to change version control systems, I can change the aliases. alias vca='git add .'; alias vcb='git branch'; alias vcc='git commit -a'; alias vcd='git diff'; alias vcm='git merge'; alias vco='git checkout';

    As for choosing between git and subversion, why not try both? It's pretty unlikely that somebody will tell you what you like best. You have to find out for yourself. Considering that they are free software, easy to install, and pretty easy to use, you can try both and see if one of them seems better to you. I tried both, and I chose git. But I don't mind if other people use subversion, RCS, SCCS, or whatever they feel like using.

    Subversion and git have different models. Subversion has a client-server model with the repository accessible by http. Git uses a distributed model, with each user getting their own copy of the repository, and the possibility of merging things from one repository to another. This might make git work better if the users' computers aren't always able to connect to a remote repository.

    Try them both, see which one you prefer.

  51. Re:my choice by jonabbey · · Score: 2, Informative

    Ugh. Subversion 1.5 has 'merge tracking', if you want to call it that, in the most primitive fashion imaginable. Subversion has no way of tracking merge history in its essential structure, and certainly no way to do anything between multiple repositories.

    With Git, it's all content addressable, so you have complete flexibility, no matter the order or sequencing of branches and merges, across any number of branches and/or repositories you care to have, foreign and domestic.

    I used Subversion for several years with a large project, and it was a lot better than when we were using CVS, and I was rather fond of it.

    But Git is *so* *much* *better* with regards to branching and merging that it's not even funny. Add in fantastic tools like 'git gui', 'gitk', 'gitweb', and public project hosting sites like repo.or.cz, and there's no contest.

  52. Re:Keyword: Herd by Ploum · · Score: 2, Interesting

    That's a very good point that also applies to bzr.

    (I personnaly use bzr and I've never used git but I think that most bzr functionnalities are available in git).

    I use bzr over svn because when I start a project, I don't have to create (or have) a server, I don't have to make a complicated import. I just go in the folder and type "bzr init". VoilÃ, my project is under bzr.

    I use bzr because I can commit even when I'm offline and I'm not afraid of small untested commits because they are local. It's really a lot more confortable.

    I use bzr because if I want to test something on an existing project, I know that branching and merging will be trivial. By comparison, just look at how many pages the branching chapter of the subversion book has.

    I use bzr because I cannot use svn without breaking my local folder every week. I very often delete and rename file with using the svn command. I move a complete folder and, poof, all is broken. It takes a lot of time to repaire. Most of the time, I end by doing a new checkout and manually copying the modified files in the new checkout. When it happens, I hate subversion. Really. I also cannot recommand svn for non geek users. Bzr simply works and I never had any problem like that.

    Finally, I use bzr because I don't care about my VCS, I just use it. Bzr is still young. The documentation is far from perfect. Using it is easing but advanced stuff like setting a shared server over Apache are still not well documented and not features complete but, still, if you take a few days/weeks to learn it then to use it, you will wonder how you have been doing before. Really

  53. Re:my choice by moonbender · · Score: 2, Insightful

    An IDE would have caught that typo.

    --
    Switch back to Slashdot's D1 system.
  54. Other true statements: by Zero__Kelvin · · Score: 2, Funny
    1. Angelina Jolie is HOT!!!, but Windows is not so great
    2. Chocolate cake is YUMMY!!!, but Windows is not so great
    3. Plants grow via a process known as photosynthesis, but Windows is not so great

    ... what's your point?

    --
    Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
  55. Re:my choice by PeterBrett · · Score: 2, Informative

    Um. In git's case, it makes a copy of the 500 MB file, and calculates its SHA1. And that's all it does.

    Oh, no, that's not all. Try *changing* said 500MB file, and watch the difference in backend repo size. :3

    Try git gc. It initially stores the repository unpacked as a speed optimisation, on the assumption that the latest commits are likely to be accessed frequently. When you run the garbage collection tool occasionally, it 'packs' the commits into delta-compressed files. Why not do it straight away? Because the packing is an expensive process, it defers carrying it out so that when you git commit it completes as fast as possible to allow you to get on with your work.

    I hope that explains the 'lack of performance' you perceive.