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

667 comments

  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 xbytor · · Score: 1

      I'll stick with sccs.

      Now get off my lawn!

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

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

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

    9. Re:Blah by Anonymous Coward · · Score: 0

      Um, vi is older than even RCS. Were you trying to suggest you had something modern or feature-filled, there?

    10. Re:Blah by Anonymous Coward · · Score: 0

      What's your beef with RCS?

    11. Re:Blah by bigmouth_strikes · · Score: 1

      Hi there colleague!

      --
      Oh, I can't help quoting you because everything that you said rings true
    12. Re:Blah by chrish · · Score: 1

      I'm still using Visual SourceSafe for a few projects. Not by choice, obviously. Sure it's newer than RCS, but MS wouldn't even use it in-house...

      --
      - chrish
    13. 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
    14. Re:Blah by Oo.et.oO · · Score: 1

      i'm using cmvc at the company that "created" it. derivative or not.
      it's hellish in certain ways and great in others.

      hey, i went to rpi as well.

    15. Re:Blah by WhiteDragon · · Score: 1

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

      You mean like this? Of course it hasn't been updated in a while...

      --
      Did you mount a military-grade, variable-focus MASER on an unlicensed artificial intelligence?
    16. Re:Blah by EdelFactor19 · · Score: 1

      if you didnt notice, the company that developed all of those products IS the company that developed CMVC as well.... 3 letters long... and its not HAL

      --
      "Jazz isn't dead, it just smells funny" ~Frank Zappa
      EdelFactor
    17. Re:Blah by EdelFactor19 · · Score: 1

      in what ways is it great? I think CMVC is proof that the devil exists... that and windows.

      --
      "Jazz isn't dead, it just smells funny" ~Frank Zappa
      EdelFactor
  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 Anonymous Coward · · Score: 0

      I was going to say, "svn has a GUI client for those with a Windows handicap". You kinda beat me to it!

    5. Re:Windows. by rgviza · · Score: 1

      Yea, you'd need vmware or a bootloader plus a second OS to help windows =D

      --
      Don't kid yourself. It's the size of the regexp AND how you use it that counts.
    6. Re:Windows. by Anonymous Coward · · Score: 1, Informative

      Also, most .NET developers work on Windows with Visual Studio. Subversion has more traction on that platform, there's TortoiseSVN that integrates Subversion in Explorer and AnkhSVN that integrates Subversion with Visual Studio. I have looked at Git, but I'm very happy with these tools, and they are essential for getting others on the team to use source control at all.

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

    8. Re:Windows. by Just+Some+Guy · · Score: 1

      Be aware that she's available to anyone who asks.

      --
      Dewey, what part of this looks like authorities should be involved?
    9. 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!
    10. 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.

    11. Re:Windows. by Anonymous Coward · · Score: 1, Funny

      You wouldn't want it to paint your girlfriend

      Why not? Half the neighbourhood already has! Ba-zing!

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

      Mmmmmm, body-painting...

      --
      Ignore this signature. By order.
    13. Re:Windows. by Anonymous Coward · · Score: 0

      I use Hg too (previously SVN). I see no practical reason to pick Git (or Bazaar for that matter) over Hg (which also happens to work great on Windows).

      The only bad thing about Hg on Windows is the lack of AnkhHg or similar (we got TortoiseHg though).

    14. Re:Windows. by Fulcrum+of+Evil · · Score: 1

      Can it paint your girlfriend and buy me a house?

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    15. Re:Windows. by Creepy · · Score: 1

      I'd be reiterating if I went over the fairly minor issues with mercurial vs git (and to a lesser extent Bazaar). I think rockstarprogrammer says it fairly nicely.

      My project uses mercurial, mostly because when we switched, git was difficult to use. I don't regret the choice, either - I struggled with git for about a week-and-a-half when we were testing repository tools and was not in favor of it. I can't say I'm a fan of TortiseHg on Windows, however, as it always seemed to cause more problems than it solved (we got some weird errors when it was involved and it had version compatibility issues with Hg for a while), but Hg itself has worked well for us.

    16. 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.
    17. Re:Windows. by Anonymous Coward · · Score: 0

      'girlfriend' is not politically corect. maybe 'significant other'

    18. Re:Windows. by Cyberax · · Score: 1

      We have a lot of directories with 5000-10000 files. Git works noticeably faster with them. But that's not a very common scenario.

    19. 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
    20. Re:Windows. by Anonymous Coward · · Score: 0

      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.

      Try deleting a branch some time.

    21. Re:Windows. by aitsu · · Score: 1

      Correction: the guy that steals your girlfriend is the git. Granted, this being /. the point is somewhat moot.

    22. Re:Windows. by Pseudonym · · Score: 1

      I'd be interested in knowing how Git compares to Mercurial on Windows.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    23. Re:Windows. by iabervon · · Score: 1

      I wouldn't be surprised if, for most operations, git is faster on Windows than SVN is. The secret is to avoid ever using git on Linux, because then you'll find pretty much any other combination (except, perhaps, Mercurial on Linux, which has similar performance characteristics) unusably slow. Also, git's performance problems on Windows are gradually improving as operations that are okay on Linux and terrible on Windows are replaced with operations that are slightly better on Linux and okay on Windows. There is, however, a fundamental performance problem with Windows, which is that the hot-cache case of verifying that none of the files in a large directory tree have been modified takes a noticeable amount of time on Windows, so any operation that requires noticing changes to the checked-out state is going to be slow. Which is to say, on Windows, you'll never be able to make 100 commits in under a second, at least if you go through the working tree.

    24. Re:Windows. by iabervon · · Score: 1

      Having your repositories in some random directory on a file share that other people can read from is actually the ideal situation for git. The options for servers are really (in decreasing order of niceness): some filesystem that some people can write to and more people can read from; such a filesystem on a machine people can ssh to; anonymous read access with a special server program (and one of the other options for writing); some web space that people can read from on a system writers can ssh to; WebDAV.

      For example, Linux kernel development is largely around the web-served and mirrored subdirectories of people's home directories on master.kernel.org, with the git daemon running to provide efficient anonymous read access for non-core-developers.

    25. Re:Windows. by szap · · Score: 1

      http://tortoisehg.sourceforge.net/
      http://swik.net/tortoisegit

      Haven't used either, can't attest to stability or usability.

    26. Re:Windows. by shinma · · Score: 1

      Of course I do. Kirk was right about those green girls... mmmmm

      --
      Shinma
    27. Re:Windows. by zhiwenchong · · Score: 1

      I use Mercurial on Linux and OS X. I've found that for medium-sized projects, it is comparable to Subversion in terms of speed. But it is miles ahead in terms of ease of use.

      I realize ease of use is a subjective thing -- svn would probably be intuitive to someone who's been raised on cvs. But for folks like me who have never used cvs before, Mercurial's design feels much cleaner.

    28. Re:Windows. by Daniel+Phillips · · Score: 1

      Try deleting a branch some time.

      Indeed, that's my number one complaint about Mercurial. But it's doable, just not in a pleasant way. On the other hand, try just about anything with git. Like commit. Oh wait, commit -a or it just doesn't do what the naive person would expect.

      --
      Have you got your LWN subscription yet?
    29. 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
    30. 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.

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

      I want to dye a virgin. Ian

    32. Re:Windows. by Zebedeu · · Score: 1

      Have it paint my girlfriend and buy me a house and I'm sold.

    33. Re:Windows. by deniable · · Score: 1

      Bloody stupid git.

    34. Re:Windows. by indifferent+children · · Score: 1

      In this market, a house is cheaper than a girlfriend.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
    35. Re:Windows. by indifferent+children · · Score: 1

      This is /. "Significant digits" is more likely.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
    36. Re:Windows. by wzzzzrd · · Score: 1

      Another factor in a Windows-centric corporate environment, SVN will function very usefully without a server

      Which is actually the point in using git, almost all the time you work locally or by pushing to repos in your intranet.

      --
      On second thought, let's not go to Camelot. It is a silly place.
    37. Re:Windows. by DuckDodgers · · Score: 1

      At our company, CVS is adequate to our revision control needs in every way save speed.

      Any replacement we check needs to meet or exceed CVS feature-for-feature. As far as I know, SVN, HG, Git, Mercurial and for that matter DARCS all do that. But in order to be worth the switch, they also need to be significantly quicker.

    38. Re:Windows. by Just+Some+Guy · · Score: 1

      I never mentioned green girls. Of course, things in my earlier years are a little hazy.

      --
      Dewey, what part of this looks like authorities should be involved?
    39. Re:Windows. by Myen · · Score: 1

      Yep, especially if you want to use git-svn - using MsysGit (which, as of the last time I installed it, uses a md5 implementation that's non-native), it was less painful to host my git-svn bridge repo on a VM.

      (FWIW, hg was also pretty damned slow on my workloads. And the staging area in git plus better GUI tools has made git the better choice for me.)

    40. Re:Windows. by ckaminski · · Score: 1

      How is that possible? By running the commit operation, you're telling it to do just that. Commit everything it knows about... Any other behavior is, IMHO, flawed.

    41. Re:Windows. by timkientzle · · Score: 1

      TortoiseSVN is the only GUI SCM interface I've ever used that I actually found preferable to the command-line. More powerful than the SVN command-line tool in many respects, and easy enough to use that we even had the marketing folks at my last company using SVN thanks to TortoiseSVN. Now I'm back on Linux, FreeBSD, and Mac OS, and I can honestly say that TortoiseSVN is one of the very few things I miss about Windows development.

    42. Re:Windows. by Daniel+Phillips · · Score: 1

      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.

      The crazy thing about Git is that it doesn't commit changed files that are under version control unless you provide the secret code. Now, if that's the behavior you really want you're in the minority and that behavior should require the option. Instead, Git breaks the default, expected behavior, and violates the principle of least surprise.

      --
      Have you got your LWN subscription yet?
    43. 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.

    44. Re:Windows. by try_anything · · Score: 1

      Could my digits be more significant to me than my girlfriend? Nah, sex isn't everything.

    45. Re:Windows. by Jellybob · · Score: 1

      I see that as expected behaviour - git add isn't adding a file to version control, it's adding to the current changeset.

      I can see how if you're not expecting that, it can be a bit annoying, but I find it less annoying then commiting the wrong code, or worse, broken code.

      If you really want it to work how you expect it to, just add an alias so that it always gets the -a flag.

  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 Anonymous Coward · · Score: 0

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

      You just keep telling yourself that. Offline capabilities, possibility of distributed workflows, commits as _real_ atomic changesets, speed... All features that SVN will never have.

      Personally, I'm never going back to SVN if I get the choice.

    3. Re:IDE Integration by morgan_greywolf · · Score: 1

      Right on the money. Although I'm aware of Git a Eclipse plugin, last time I looked at it, it sucked maturity-wise. Subversion and CVS have been supported on Eclipse and for other tools, including Microsoft IDEs, for quite sometime, so...those are the source control systems I use, too.

    4. 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.
    5. Re:IDE Integration by Anonymous Coward · · Score: 0

      "commits as _real_ atomic changesets"

      Please expand on this. Are subversion commits not really atomic?

    6. Re:IDE Integration by johanatan · · Score: 0, Offtopic

      Mod parent up.

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

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

    9. Re:IDE Integration by nautical9 · · Score: 1
      We're facing this at my company too. We're just about to upgrade from SVN 1.4 to 1.5 (far better branching and merging), but it's still painfully slow, which means developers are less likely to do one-off branches to try some experimental feature. Instead, they make the change to trunk, which can make back-tracking out harder. Git is lightning quick for this kind of thing, and allows them to work off-line and sync up later.

      The problem with Git is the utter lack of visualization, plugins, and integration with other tools.

      For example, we use Fisheye as a web-interface to our SVN repository - it's a great way to watch the codebase, or query it to drill down to see specific changes. There's an svn-git gateway tool, but it's rather rudamentary.

      If there was a similar tool, plus a proper Eclipse plugin, I think we'd make the switch. Git's speed is just unbelievably fast.

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

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

    12. Re:IDE Integration by Daniel+Phillips · · Score: 1

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

      You have no idea what you are talking about. Subversion doesn't even have real branches for crying out loud, and is pathetically slow compared to Git. I have used Subversion extensively and it often makes me feel like slitting my wrists.

      --
      Have you got your LWN subscription yet?
    13. Re:IDE Integration by alan.briolat · · Score: 1

      You don't need to even if you don't get the choice!

      Where I work at the moment, *everything* is in Subversion, but on joining I already had about a year of experience using Git, and quite frankly find Subversion too restrictive.

      Luckily, Git has a wonderful tool called 'git-svn' which allows you to interact with Subversion repositories. As long as you keep your master branch linear (i.e. merging onto 'master' is always a simple 'fast-forward') your commit history won't confuse other people, and you can do all the things you like to do with Git.

      I did this on the most recent project I worked on, and it worked amazingly well. I even learnt a whole load more about Git in the process. And even better than that, rather than cramming 'use Git!' down people's throats, I actually had other developers asking me to introduce them to Git after seeing/hearing me talk about things I could do with it.

      As a side note, I've never found *any* version control GUI to be faster than knowing what you're doing in the equivalent CLI tool (and with something as powerful as Git, the equivalent GUI tool would be monstrous).

      --
      I swear we should be allowed to give mod points to sigs... "-1, Offtopic"
    14. Re:IDE Integration by CharlieHedlin · · Score: 1

      Subversion 1.5 greatly improved merging.

      I haven't used git, so I can't compare

    15. Re:IDE Integration by MarkScott65 · · Score: 1

      If you're using IntelliJ IDEA, there is a nice plugin called 'git4idea' that allows a pretty decent git integration experience. Eclipse integration is not so good yet, but is getting better...

    16. 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 =)

    17. 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.
    18. Re:IDE Integration by smallfries · · Score: 1

      So how would you handle maintaining a stable branch with a small amount of day-to-day changes at the same time as an experimental branch where live dev work is going on?

      There are plenty of reasons why this is necessary, and it drives people to branch merge big chunks of codebases. What alternative method would you use?

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    19. 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.

    20. Re:IDE Integration by leighklotz · · Score: 1

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

      I thought that with Emacs I was using IDE source control integration.

    21. Re:IDE Integration by epine · · Score: 1

      I recently adopted Eclipse (Ganymede) for embedded development, along with JIRA for issue tracking and subversion for source control. Previously I've always used distributed version control. At home I use monotone. Here, we have a mixed Windows / Linux team, without much need for distributed SCM at this point in time.

      I've been pleasantly shocked at the quality of Tortoise SVN on Windows, and the stability of subclipse under Eclipse. The Mylyn integration where the active JIRA issue is auto-populated into the subclipse commit message is mana from heaven.

      We haven't needed to do any heavy merges yet, but in all other respects, subversion has been a perfectly adequate tool. Long term, I expect the distributed designs to prevail, but in the short term, the Windows integration offered by subversion is hard to beat.

    22. Re:IDE Integration by Jerf · · Score: 1

      But branching and merging adds a fair bit of overhead

      I use git, via git-svn. Branching and merging in git reduce my overhead by enabling workflows in my team that would be nightmares in SVN. (Which I know by experience.)

      SVN != source control. You have not seen branching until you've seen "rebase".

    23. Re:IDE Integration by dubl-u · · Score: 1, Redundant

      Larger projects with many developers require the ability to branch and merge large bodies of code. Larger projects with many developers require the ability to branch and merge large bodies of code.

      Yes, and why is that?

      It's because people have trouble forming teams and maintaining strong relationships in large groups. The cost of communication gets too high for humans to effectively maintain the shared understandings necessary to work smoothly together.

      So again, branching is what you do when a group fails to work effectively as a team.

      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.

      I see. Please link to your data proving these are facts, because they look a lot like your personal opinions to me.

    24. Re:IDE Integration by mcvos · · Score: 1

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

      Subversion is perfectly usable if you never ever need to merge a branch back into the trunk.

      But even within that limited use case, it still can't do some of the amazing magic that git can do.

    25. Re:IDE Integration by dubl-u · · Score: 1

      So how would you handle maintaining a stable branch with a small amount of day-to-day changes at the same time as an experimental branch where live dev work is going on?

      My first step would be to figure out why the team is unable to produce stable code every time they check in.

    26. Re:IDE Integration by dubl-u · · Score: 1

      Yes, I'm not denying that git's branches have less overhead than subversion branches. But less is not zero, and mere software can't reduce branching cost to zero because much of the cost isn't in the software at all.

      If I had to branch a lot, I would surely use the tool that was best at it. But if I can eliminate the cost of branching by not branching, that seems a much more effective to me.

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

    28. Re:IDE Integration by dubl-u · · Score: 1

      So again, branching is what you do when a group fails to work effectively as a team.

      Sorry to reply to myself here, but although that makes sense in the context of what I'm saying, taken on its own it would overstate the case.

      More precisely, I mean that when a group fails effectively to work as a team, branching is a popular solution.

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

    30. Re:IDE Integration by dubl-u · · Score: 1

      Branching and merging adds a lot of overhead if your SCM isn't built to handle it.

      As I've mentioned elsewhere in this thread, I agree that some version control systems are better than others at handling branches. But the awesomeness of your tools can never reduce the cost to zero, because much of the cost isn't in the software.

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

    32. Re:IDE Integration by j-pimp · · Score: 1

      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.

      /quote>

      While I agree that such behavior is unacceptable in most corporations, some open source projects run just fine the git way. Linus modeled git after how he perceived the kernel developers interacted. The model is one that rarely works, but works well when it does. It requires the sort of leadership that one would inspire one to march into the pits of hell./p>

      --
      --- Justin Dearing http://www.justaprogrammer.net/ We're just programmers.
    33. 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.

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

    35. Re:IDE Integration by Daniel+Phillips · · Score: 1

      The problem with Git is the utter lack of visualization, plugins, and integration with other tools.

      Have you tried gitk? Or with Mercurial, "hg view". Awesome, light and tight.

      --
      Have you got your LWN subscription yet?
    36. Re:IDE Integration by ThePhilips · · Score: 1

      We are all happy to acknowledge here that you have read "Version control for Dummies" book already and have plethora of theoretical advices for people who manage and do coding of huge codebases in large organizations.

      On practical side, though, it seems you never actually tried to organize team out of two programmers. Because even two coders with same coding style following same rules would immediately declare that they want three branches: one main (to merge their work) and two for each other to work independently. In SVN having three branches is P.I.T.A. In git this is trivial. In SVN managers can control what devels do. In git - they can't. Consequently choice of SCM falls onto management and degree of control over developers you want to exercise. Generally, large organizations have too much organizational overhead leading to use of centralized systems like SVN. Git just adds to the management mess.

      Practically feasible solution is hybrid to make everybody happy: use SVN on R&D (department) level; let teams maintain their own git trees. I do that regularly, when development of some feature takes long time and checkin into SVN (actually here this is CC) is not possible due to possible breakage introduced by half-implemented feature. I keep intermediate results in git (and on some Unices in RCS) and when I'm ready I send the code to central repository (to avoid merges we use exclusive locks on files).

      But please, do not let us distract you from going on to "Version Control in 21 days."

      --
      All hope abandon ye who enter here.
    37. 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.

    38. Re:IDE Integration by mcvos · · Score: 1

      "commits as _real_ atomic changesets"

      Please expand on this. Are subversion commits not really atomic?

      Often when I want to commit a really big change in lots of files (admittedly something you should try to avoid anyway), my SVN GUI fails and I end up having to commit it a few files at a time. But I assume it's the GUI that sucks here.

      Most SVN GUIs suck. (But at least they exist, unlike git GUIs, all of which seem incomplete and unusable).

      But even if I do commit a lot of files at once, I'm not really sure SVN treats this as a single commit rather than a lot of small commits. Then again, this doesn't matter much in SVN, because you can't revert individual commits anyway.

    39. Re:IDE Integration by ThePhilips · · Score: 1

      OTL

      Did you ever tried to code yourself? You look/sound like idiot here.

      General rule is quite simple: to thoroughly test code written in 1 day, you need 2 days. If you spent one week developing piece of code, to test it you would need at least another week. That's already two weeks without revision control.

      This is sure recipe for disaster and some companies even have rules to checkin everything at the end of the day as to not to loose something to computer failure.

      You can backup repositories on server - you can't backup everybody's hard drive.

      --
      All hope abandon ye who enter here.
    40. Re:IDE Integration by mcvos · · Score: 1

      Right on the money. Although I'm aware of Git a Eclipse plugin, last time I looked at it, it sucked maturity-wise. Subversion and CVS have been supported on Eclipse

      They have, but subclipse is a buggy piece of crap, and while subversive seems better, I still don't trust it the way I trust git. Although it's possible it really is eclipse that's the source of the bugs here. I don't really know about that.

    41. Re:IDE Integration by smallfries · · Score: 1

      Imagine for a second that the timescale for developing a new feature is longer than your timescale for releasing minor builds on your stable branch. That's why the branch gets the name experimental. This is a common requirement in lots of software, and not simply bad management.

      How would you deal with this without branching and merging?

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    42. Re:IDE Integration by thelibrarian · · Score: 1

      Yes, and why is that?

      It's because people have trouble forming teams and maintaining strong relationships in large groups. The cost of communication gets too high for humans to effectively maintain the shared understandings necessary to work smoothly together.

      So again, branching is what you do when a group fails to work effectively as a team.

      I see. Please link to your data proving these are facts, because they look a lot like your personal opinions to me.

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

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

    45. 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.
    46. Re:IDE Integration by Anonymous Coward · · Score: 0

      What about cases like Operational software where you may need to keep an Operational branch, a Development branch and perhaps even a Prototype or Test branch.

    47. Re:IDE Integration by dubl-u · · Score: 1

      Which part would you like data on?

      The bit about relationships not scaling is well documented. The studies most interesting to me are the ones that suggest it is an evolved limit. If you'd like a general introduction, pretty much any introductory cultural anthropology text would cover that. Or you could dive right in with Co-evolution of Neocortex Size, Group Size, and Language in Humans and the references from there.

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

    49. Re:IDE Integration by dubl-u · · Score: 1

      Did you ever tried to code yourself? You look/sound like idiot here.

      Heh. My parents are programmers. I started programming for fun in the very early 80s, and for money towards the end of that. I haven't written any code this week, but about half my time over the last couple of years is still coding.

      The teams I have run recently have defect-in-production rates below one per developer-month. What are yours?

    50. 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
    51. Re:IDE Integration by Niten · · Score: 1

      As I've mentioned elsewhere in this thread, I agree that some version control systems are better than others at handling branches. But the awesomeness of your tools can never reduce the cost to zero, because much of the cost isn't in the software.

      Then what is the nature of this cost you refer to?

    52. Re:IDE Integration by Un+pobre+guey · · Score: 1
      Like the bi-line suggests...

      The line has a sexual preference? Damn, I'm way behind the times.

    53. Re:IDE Integration by dubl-u · · Score: 1

      There are a lot of ways to deal with it.

      The best way is to build features iteratively, so that you start extremely small and release continuous improvements. The internet has made users very comfortable with this when done right. Nobody knows or cares what Google's release schedule is, for example.

      Next best is to work in ways which hide the change. If you're adding a new flow, for example, you can build it all out of sight of the user, and connect it to the rest of the app as your final commit. It might still be released, but nobody sees it. But you can easily test it internally, and because integration happens in small steps, it's much easier.

      You can also make the feature switchable. Google's a good example there as well; by making a feature conditional, it lets them test features on a small segment of the general public before making something generally available. Launching a feature is flipping a switch, rather than related to the release process.

      Some people also make things conditional in a different way, so that they can create multiple builds of the app from the same source code base.

      But I never use any of those tricks if I can just start small.

    54. Re:IDE Integration by GooberToo · · Score: 1

      You're completely incorrect on every point. If you had a clue as to what you were talking about, you would not be making such assertions. My position is RC-101; so unless you have documentation which provides any substance, you've not even left the gate. Since my position is the defacto position, it is you that needs to provide proof that the industry at large and best practises to boot are wrong.

      You seem to be under the impression that revision control (RC) is all about people. It's not. It's about quality, reproducibility, accountability, and lower cost of maintenance, integration, and testing. In turn, people have a role to play in each one of those aspects; and their role is tempered by process. You're working under the assumption that every developer can understand the smallest detail in every aspect of the code. This is almost never true for complex software.

      The basic ability to branch and merge is required for complex software and magnified by the number of developers involved in a given feature set. Having the ability to modify code and then integrate and test code changes in a selective, controlled fashion means fewer bugs and faster fixes. Without the means to selectively merge means the act of bug hunts potentially changes from hours to a needle in a haystack effort.

      It's obvious you've never worked on complex projects and likely never on large projects with large numbers of developers. If the world developed as you proposed, no large/complex project would ever be completed as every developer would suddenly be forced to debug/integrate every other developer's code which was constantly changing - repeat infinitum. Or, as you suggestion, you now have serialized all software development; meaning one developer bug-fixes while all other wait. That would be pure chaos and/or a huge waste of man power while working overtime to lower overall quality. In short, your pet theory breaks the second the words, "complex", and, "multiple developers" are thrown into the mix on a single software feature. And when I say, "breaks", I mean, "horribly breaks."

      I strongly urge you to either read the freely available information on revision control and configuration management before you contribute more pet theories. Additionally, many books are available which will explain in short order why your theory is fundamentally broken.

    55. Re:IDE Integration by dubl-u · · Score: 1

      Yeah, I completely agree. If I were starting an open-source project today, especially one that I hoped to become giant, I'd definitely use something like git.

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

    57. Re:IDE Integration by dubl-u · · Score: 1

      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.

      This is true only when you think your changes have a substantial chance of introducing bugs. If you are not worried, this is not a problem. See my reply a couple up thread for more on that.

      Ship early ship often is not a recipe for being taken seriously in a lot of businesses.

      As far as I can tell, this is mainly because they are used to software sucking a lot. If your software is sufficiently reliable nobody cares. What company insists that you can't use the new version of Google until it has been vetted by IT?

    58. Re:IDE Integration by dubl-u · · Score: 1

      What about cases like Operational software where you may need to keep an Operational branch, a Development branch and perhaps even a Prototype or Test branch.

      Could you say more about the business case you're thinking about?

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

    60. Re:IDE Integration by dubl-u · · Score: 1

      Yes, yes, it's all totally impossible. Except that I do it and have done it. For years.

      If you've got questions about how, feel free to ask. But until you can accept that what you call "RC 101" is just one approach to solving problems in software development, there's not a lot I can do for you.

      But here's a hint: Try googling for "agile" or "extreme programming".

    61. 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
    62. Re:IDE Integration by mveloso · · Score: 1

      Actually, you're wrong.

      Simple examples:

      We ship version 1.0
      We ship version 1.1
      We ship version 1.2

      A customer wants a fix to 1.1 and doesn't want to upgrade to 1.2. That fix should also be moved forward to 1.2.

      We want to try something in 1.3, but we don't want to mess with everyone else's build.

    63. Re:IDE Integration by dubl-u · · Score: 1

      Then what is the nature of this cost you refer to?

      It's a human cost.

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

      It makes me think of juggling. Branching is throwing another ball in the air. Maybe it's a tiny rubber ball that I catch and put down again right away, in which case I don't care much. Or maybe it's a giant flaming chainsaw that we have to keep going for months, in which case it's a lot of effort. But either way, I have to keep it going.

    64. Re:IDE Integration by pthisis · · Score: 1

      The teams I have run recently have defect-in-production rates below one per developer-month.

      Or, to rephrase, even _your_ team is unable to produce stable code every time they check in.

      --
      rage, rage against the dying of the light
    65. Re:IDE Integration by Anonymous Coward · · Score: 0

      So you managed somehow to sell helloworld.c?

      With R&D, Support (bug fixing) and Client Services (dedicated customer features team) running above 300 developers, you know, it is very hard to count defect-per-developer. Not that it make any sense.

      In my department we in fact do count (because our work can be easily accounted; not generally applicable to R&D) and my personal rate is about 1 errors in production per year. We have allowed rate of 3 production problems per year and most of the team manages that.

      With code base running above 5 million lines of code (and that's only our part) I think having about 100 defects during project launch on average is quite good mark. Best projects were launching after less than 20 bug reports. Worst - were running above 800 bug reports due to heavy source code customizations.

      Reality is that if you have project with more than one file, you already can run into conflicts. And if branching is cheap and easy - why not to use it?

      Some custom features touch many (5-10 or more) of modules (== 5-10 or more developers from different teams), modify dozens of files (50 or more) and the changes are interconnected. Development might take several weeks and cannot be coordinated since people are from different teams. Check-ins sometime take 1 or 2 weeks making particular modules not compilable, when some developers already finished but others might have not yet even started coding. That's why such work is always done in branches (at least one branch per customer release; special branches for major features). Even partial testing sometimes is impossible (depends on special equipment) and customers have to test themselves. Actually that's why to avoid problems in production, our customers have extra test deployment where they can test new revisions of software. That's how we manage to have much less than 3 defects per year in production per developer, still delivering pretty much on any customer request.

      With your rate of 1 defect per developer per month, all our customers would have ran away already: after all we are doing charging software, we are responsible for managing customer's money.

    66. Re:IDE Integration by dubl-u · · Score: 1

      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.

      That strikes me as a perfectly legitimate use of branching, just as long as the reason they aren't upgrading isn't to do with hard upgrades or fear of breakage.

      I change the broken API to FooLib.

      Personally, I solve this by a) when it's the same project, fixing every caller in one go, or b) when it's a separate project, treating FooLib as its own product. When a team is ready for a new library, they can upgrade.

      Or I write the tests for the new refactor, commit them (all broken), and then another programmer pulls them down and does the refactor.

      This is generally the kind of thing where I pair. If I don't know enough to do the job on my own and neither do they, then it seems to make more sense to work together.

      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"

      Could you give an example of that? I just can't think of when that's happened to me; we just do the changes incrementally and check them in piece by piece.

      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.

      Here I'd favor automating the acceptance tests, plus pair programming and possibly other quality-oriented practices. There's still some risk of a bug, but it's pretty low. Branching means a doubling of the test effort, as you have to test both before merge and after.

    67. Re:IDE Integration by D+Ninja · · Score: 1

      and their manager was a chinless milquetoast who let them get away with it.

      That is just an excellent use of an insult right there. I applaud you.

    68. Re:IDE Integration by dubl-u · · Score: 1

      That would be a different case than the "large team" discussion that triggered this sub-thread.

      I agree that maintaining different released versions can sometimes justify branching (although there are other options, too).

      But it's worth asking why your customers don't want to upgrade. It's often because previous upgrades have introduced new bugs, have some incompatibility, or aren't as good as older versions. In other words, that newer versions aren't better. You could fix that by branching, but wouldn't it be better to always send them software that is actually better?

    69. Re:IDE Integration by dubl-u · · Score: 1

      Or, to rephrase, even _your_ team is unable to produce stable code every time they check in.

      So?

      The point is that you can get defect rates low enough that nobody cares, and you can therefore stop screwing around with branching just because you're scared of your teammates.

      There are definitely good reasons to branch, but not knowing how to make reliable software isn't one of them.

    70. Re:IDE Integration by pthisis · · Score: 1

      Personally, I solve this by a) when it's the same project, fixing every caller in one go, or b) when it's a separate project, treating FooLib as its own product. When a team is ready for a new library, they can upgrade.

      Well, I'm talking about an internal library that only our team uses. We go through this all the time. When we can, we pull out libraries into separate "products", but there's always a blurred line between "a method that gets called from another class" and "this is a self-contained library that's external to the product".

      The point is, if you're doing serious re-architecting of the code you can wind up having a portion of the product that's converted over and tested.

      You can either bottleneck it at one programmer making sure he understands every place that interfaces with the change, and how to change them to work with the new semantics, or you can let those familiar with the callers work in parallel to update them. The latter is often a much more efficient use of programmer talents, and is facilitated by a development branch.

      This is generally the kind of thing where I pair. If I don't know enough to do the job on my own and neither do they, then it seems to make more sense to work together.

      In the case I outlined, neither side "doesn't know enough". You're just firewalling the testing from the code development so that you get a different brain writing the tests from the code.

      Here I'd favor automating the acceptance tests, plus pair programming and possibly other quality-oriented practices. There's still some risk of a bug, but it's pretty low. Branching means a doubling of the test effort, as you have to test both before merge and after.

      Usually you pull master into the dev branch before you test; you've already merged, but you haven't supplanted master until post-testing.

      And even where automated testing is feasible, you normally want a sanity check by a human tester ("Yeah, it has the right text there, but for some reason it's now in large green!" or "Whoah, that's a glaringly obvious omission from the test suite"). I'm all about writing tests up front, but even the best programmers occasionally miss something and merging into master before getting human testers to look at things is a bit irrational, IMO.

      --
      rage, rage against the dying of the light
    71. Re:IDE Integration by mcvos · · Score: 1

      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,

      I'm not talking about one person regularly checking in bad code. I'm talking about one person doing it once. And who hasn't checked in something that wasn't quite finished at least once?

      Even if it happens once, in SVN you have to undo it by hand. In git you simply revert the bad commit.

      Why would I let him go on doing dumb things any longer than necessary?

      It's not about one person doing dumb things constantly, it's about everybody making mistakes every once in a while. I don't believe for a minute in perfect, flawless programmers.

      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.

      Not much, but it may happen sometimes. Unless you're perfect or psychic.

      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.

      No, branching will save you every time if you branch every time. While explicit branches are used (and easy) in git, you might actually consider every single commit a branch of its own, that's immediately merged into the trunk.

      I think the solution to bad ideas is better product management, not better version control.

      I think the solution to bad implementation is to make sure you can fix it easily. Can you really honestly say you've never written any code that did more harm than good?

      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.

      I count 2 + one for each developer.

      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.

      In git, each branch is simply a big pile of commits that are easily merged. Divergence only matters when two specific commits conflict with each other. So branches don't add any more complexity than commits do. A bit maybe, but git makes this quite managable.

      Now try to have two programmers work on an big new feature while the rest works on bugfixes, still all in the same trunk. Release day comes, and the new feature isn't finished. Suddenly you've got a lot of complexity on your hands that could have easily been solved by putting this in a separate branch.

    72. Re:IDE Integration by dubl-u · · Score: 1

      Reality is that if you have project with more than one file, you already can run into conflicts. And if branching is cheap and easy - why not to use it?

      Because branching is frequently easy, but not nearly as often cheap.

      In my experience, the cost of finding a defect is larger the longer it sits, and the larger the merge, the more expensive it is, and in a way that's worse than linear. Ergo, I believe in doing everything possible to find defects as early as possible, branching as little as possible, and integrating as early as possible.

      With your rate of 1 defect per developer per month, all our customers would have ran away already: after all we are doing charging software, we are responsible for managing customer's money.

      Well, I did say "below". I have also done financial trading software, and there my defect rates are lower. All of my recent projects are consumer-facing web projects, though, and I can think of only once in the last year (so ~52 releases) that we've had to branch and do a special release because the bug was bad enough that people couldn't wait until the next release.

      My point is not that people shouldn't branch. What I'm mainly objecting to in this thread is people solving problems that have nothing to do with versioning via version control systems.

      Maybe in your situation, every branch really is necessary, in which case, bully for you. But it sounds like a lot of your branches are not driven by shipping different versions of the software, but by people who are having a hard time working together. For those, I think it's worth asking, "Hey, is there some other way we could solve this problem?"

    73. 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
    74. 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.
    75. Re:IDE Integration by smallfries · · Score: 1

      OK, so your answer is that you don't think there should be large changes to the source in isolation from the main branch. I can buy that being possible in small projects. I can also buy making those changes switchable in some cases.

      The reason that I say some cases is that sometimes a change cannot be isolated from a large swathe of code. When this happens every point that it touches the code becomes a point of failure. Isolating the changes in the source control guarantees that they cannot affect the stable release until the dev team is ready.

      By adding switches to the code to choose versions you are moving that responsibility from source control into runtime code. Although that may work, it is also a potential source of failure.

      I agree that it is a good aim to start small, and change things incrementally, but experience tells me that this is not always possible. Say for example you're working on a compiler, and after a few versions have been released it becomes apparent that one of the internal representations is wrong. Maybe it was a bad decision in the design, or maybe the functionality required has shifted over time. Whatever the reason this type of major surgery - changing a basic datatype that everything depends on does occur some times in big projects.

      In those cases it doesn't seem feasible to change it all in one go, freezing the mainline code. Or to code conditionals in each bit of code affected - as this introduces too many potential points of failure.

      This type of case is the rational for branching and merging in source control. It's there because there is a real need for it. Even if the theory says that you shouldn't get into that position, in practice is can be unavoidable. It is a major decider in which version control to use.

      I use subversion day to day. The merging support doesn't seem to be fantastic - although it is better than I remember cvs being. Lots of people seem to recommend git because it has a strength in merges. I was curious if you had some silver bullet to prevent merges, but it would seem that you just have the same regular grade bullets as everyone else. :)

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    76. Re:IDE Integration by IanCal · · Score: 1

      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?

      Committing often is good practice. Local commits allow me to have full revision control for my work, then push it to the central server when it passes all the unit tests (and of course, have the server set up to only accept my commits when they do). This is particularly useful when each stage of my work may take several weeks and go through many revisions before it should be included in the main branch (or even the dev branch).

      It also allows me to easily fix bugs in the main branch while working on complete replacements for the file to be changed, simply by creating a local branch and switching back and forth.

      The real thing that made me want git over svn (personally) was working on a large project over several machines. I had a choice of either copying files manually across, or committing to svn and checking out on the other machine. The second approach could cause problems with me breaking a vital component which others may have checked out. Neither is particularly nice.

      If you want, you can treat git the same as svn and not change your workflow. Then you can let others who want to commit locally work differently.

    77. Re:IDE Integration by Anonymous Coward · · Score: 0

      Experimental branches are one thing, but feature branches, over the long haul are actually a drain on developer throughput. It feels better, but it turns out not to be, as I have found out in several clients where we actually looked at project numbers.

    78. Re:IDE Integration by israfil_kamana · · Score: 1

      The problem I have with this, is that it's a tool that enables a lot of funny games with branches, because the developers liked to work that way. SVN was developed in another direction, based on their philosophies around development (largely drawn from painful lessons in CVS).

      I have this argument a lot, and the truth is - pick your development, integration, and release philosophies, THEN pick the tool that works for that way. I've worked using SVN on hundred-developer projects with lots of changes. We organized the work in such a way that branching was a very small and rare activity. I've been in other places where there was one-branch-per-new-feature.

      SVN isn't better or worse than GIT, except perhaps when examining a given feature. But overall, one isn't better than the other, because they are built around very different approaches. I've seen both approaches work well, and fail miserably. You can't rescue a failing approach with a good tool, because you're not solving the root-cause.

      --
      i - This sig provided by /dev/random and an infinite number of monkeys at keyboards.
    79. Re:IDE Integration by Anonymous Coward · · Score: 0

      Or... you know... you can use TortoiseCVS or TortoiseSVN, with their handy-dandy Windows Explorer integration. Go ahead, mod me +5 fascist.

    80. Re:IDE Integration by SlashV · · Score: 1

      I don't check in things that I don't think are stable.

      OK, but that may not be sufficient. When a bugfix is needed to an existing release, your changes are probably unwanted even when they are stable. e.g. because you changes are not yet described in the manual that came with the release.

    81. Re:IDE Integration by Nerdfest · · Score: 1

      While everything you say is true, many people would get great value from integration into an IDE that's a bit more automated. Don't forget those forced to use Windows ... they deserve your pity.

    82. Re:IDE Integration by zoips · · Score: 1

      I think this boils down to the fact that you've got some really thick, like triple bottom of a Coke bottle thick, rose colored glasses. You expect everything will always work out just great. I wish you the best of luck.

    83. Re:IDE Integration by SanityInAnarchy · · Score: 1

      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.

      Those are certainly situations which could force people to branch/merge more than they otherwise would. But it's by no means a measure of how useful branching/merging are.

      Taking a simpler example: The case could be made that most people use version control at all as a response to a dysfunctional organization. After all, if people worked well together, you could simply keep your code on a shared folder, and make sure people only updated it when it was their turn.

      A more blatant analogy: A cripple needs a car. That doesn't mean a car is useless for anyone but cripples. Just because something is useful to a cripple doesn't imply it's a crutch.

      branching and merging adds a fair bit of overhead

      ...on SVN. On Git, branching and merging is less painful than checking out and committing is on SVN.

      --
      Don't thank God, thank a doctor!
    84. Re:IDE Integration by SanityInAnarchy · · Score: 1

      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.

      Which means it should be doing something for you to be worth that cost -- like reducing what you have to keep track of.

      I know I can keep track of a number of branches -- both in my head and by looking at current available branches -- much more easily than I can keep track of a number of features, which may or may not be implemented in my current branch.

      The time I and the people on my team spend talking about the different branches.... If my ops guy or my product manager has to figure out what's where and what's elsewhere....

      You're doing it wrong.

      Branches in Git are so cheap, and so easy to manage, that you might well create a few branches just for yourself, that no one else even has to know about, unless you decide to commit that branch.

      Once it's merged to Master, you don't have to think about them, because that branch is gone. Your ops guy and your project manager only really need to worry about Master (equivalent of Trunk in SVN).

      --
      Don't thank God, thank a doctor!
    85. 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!
    86. 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.

    87. Re:IDE Integration by Abcd1234 · · Score: 1

      Solution: stop checking in stuff that doesn't work.

      You completely missed the point, didn't you? I said *large* features. You know, the kind where you have multiple developers working on various aspects of the problem, in which case it's most natural for them to interact through the SCM. Branches are the only sane way to handle this.

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

      Again, missed the point. Specifically, all the SCM bells and whistles. Local copies are a poor man's SCM. Better to just use a real SCM and get all the advantages that come with it.

      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.

      *Slower* code review? What? How is being able to say "Do a diff of branch X against HEAD", or "check out X", not *faster* than manually handing out the code for review?

      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.

      Well of course. I never advocated otherwise. But in those cases where you *do* screw up, and I assume you screw up on occasion, using the SCM for what it was built for, changing tracking and control, makes it easier to revert broken code, etc.

      I have never seen that not be the road to maintenance hell.

      I never said it wasn't. But it's the reality for some companies.

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

      No, you said "So again, branching is what you do when a group fails to work effectively as a team." Or, to put it another way, people only advocate branching because their organization is broken. My point is, that's wrong.

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

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

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

    91. Re:IDE Integration by kylben · · Score: 1

      Wouldn't it be better to have every check-in be stable? ... It's pretty rare that people mind waiting a few days.

      If you didn't have a five-digit ID, I'd tell you to get back to us once you actually graduate and get a job. Instead, I'll just assume I've dreamed the last ten years of my career. Thanks for waking me up, lemme tell you about the nightmare I've been having...

      --
      Insightful and funny are really the same thing, except one has a punch line.
    92. 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.

    93. Re:IDE Integration by iabervon · · Score: 1

      Actually, it's more than that. Having multiple people working at the same time on different computers requires branching (to put a version on each computer with its own state) and merging (to generate a consensus version). What "svn update" does is a merge (it even uses the "merge" program from rcs-utils). What git is very good at is being able to have tons of these branches for a single developer, with almost no cost in either space or time. It's also good at protecting the work you do on one of these branches, and good at letting you make pristine commits out of the changes you've done on a branch, so that the history comes out clean and informative.

      As an example, I have a personal project where the current history is almost entirely linear, with the exceptions being ~6 cases (in several years) where changes were made for use in different applications at the same time; once I had 3 parallel threads, but otherwise I've only ever had at most two, and by far the most common width is 1. On the other hand, I do this development in a repository with about 20 branches, each with some work I've started and then decided I wasn't happy with its current state but I didn't want to discard it. As I go back to working on those topics, I rebase on the latest version, and then I improve the code until I think the final state is good, and then I generate a clear series of changes to get there, which is what I push to the main repository.

    94. Re:IDE Integration by ardor · · Score: 1

      And what about experimental code? Your solution would be to keep this experimental code locally on the HD until its either stable or determined to be useless, yes?

      In git, I create a branch, put the experimental stuff in, if it turns out to be useful, I merge it with the head branch and remove the branch, if its useless, I just delete the branch. Meanwhile, I can continue developing and maintaining the stable branch. Try this with svn...

      --
      This sig does not contain any SCO code.
    95. Re:IDE Integration by Baricom · · Score: 1

      What company insists that you can't use the new version of Google until it has been vetted by IT?

      The only thing saving me is that my IT can't see the version numbers.

    96. Re:IDE Integration by jebblue · · Score: 0

      I've found Subclipse over the past 6 months I've used it to be flawless and combined with Eclipse makes VS look like a toy.

    97. Re:IDE Integration by ardor · · Score: 1

      First, all of these methods are hacks. Putting experimental, disabled code in your stable release is a really ugly hack.

      Second, sometimes you cannot start small. If you replace an entire subsystem, you want to keep the current one until the new one is stable. A good example is a new renderer; software X has been using its old OpenGL renderer, but it just can't handle the ever increasing datasets anymore. So you write a new renderer Y, which CAN handle large sets. It is not possible to start small here; you cannot just develop "a little bit" of Y, neither can (and should) you introduce small changes in X, because Y is fundamentally different. In git, I create a branch for Y. It is especially useful in cases where components (like the renderer here) cannot be plug-ins, but need to be hooked in the main program. git merge vs. re-enabling all previously dormant code parts ...

      --
      This sig does not contain any SCO code.
    98. Re:IDE Integration by ardor · · Score: 1

      But "not branching" may turn out to be more expensive than the branching overhead. In fact, this is often the case. The costs you saved by not branching are spent on hacks inside the stable branch to have the experimental bits only optionally enabled. (In C, its a sea of #ifdef/#endifs.)

      --
      This sig does not contain any SCO code.
    99. Re:IDE Integration by cratermoon · · Score: 1

      about 90% of the time I see people doing lots of branching and merging, it's a response to screwed-up organizations

      I'm with you there. Now imagine the what the situation must be like where the STATED POLICY of the SCM group involves continuous branching and merging. And yes, the developers *have* noted that every time there's a merge code gets lost and screwed up -- problems with both the tool (ClearCase) and the skills of the SCM group.

    100. Re:IDE Integration by thoglette · · Score: 1

      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.

      If you are constantly branching and merging then your Engineering Change Management Process is out of control. Oh, but software is art and you're too creative to be constrained by other people's processes. Sigh!

      If it's a prototype (aka risk reduction excercise), then 'fess up and stop pretending you're doing implementation.

      --
      -- Butlerian Jihad NOW!
    101. Re:IDE Integration by xero314 · · Score: 1

      Ignoring the fact that reverting changes can be a pain in the ass when multiple people are working on the same codebase.

      Really? 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. Of course you would need an SCM that recorded changes and not point in time records.

      Perhaps you should mention it to all those distributed SCM users.

      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. Now if you have even anecdotal evidence to prove that wrong I'd be happy to review it.

      So that my code can become broken while another developer incrementally works on a major change?

      Why do you have broken code in your working copy? And why is anyone committing code that either does not compile or does not pass your unit test suite? Continuous integration and automated testing would really be your friend in these cases.

      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?

      Huh? Why revert or delay anything. Branch out only the stable code into your release branch. If you can't determine what is stable then you need to work on your tagging process and issue tracking a little more.

      When I'm done, I instruct my SCM to merge from the branch back to trunk.

      And this works great as long as no one else has touched any of the code that you just worked on in any of their branches that they merged before yours. The moment that happens you get the joy of resolving the conflicts wether it be manually or automated, which will happen even in a distributed SCM, and will undoubtedly lead to one change or the other requiring significant changes to resolve. Resolving conflicts from dozens of branches is not my cup of tea, so I personally avoid them.

      This is a *far* more sane way to manage major changes

      And that is a valid opinion, but it is just an opinion. I have been running projects for a long time without any merging issues, until I was recently forced to use this branch for everything model and seriously I have no desire to ever have to do it again.

    102. Re:IDE Integration by Yenya · · Score: 1

      Simpler solution: stop merging reasonably-sized branches.

      There definitely _are_ cases when branching and merging huge branches make sense. One such example is one developer doing huge structural changes all-over the code base, while other developers continue doing their own work (e.g. development of new parts of code). Think changing a previously ASCII-only project to use UTF-8 internally. Or adding i18n support to all strings.

      --
      -Yenya
      --
      While Linux is larger than Emacs, at least Linux has the excuse that it has to be. --Linus
    103. Re:IDE Integration by mcvos · · Score: 1

      I've found Subclipse over the past 6 months I've used it to be flawless and combined with Eclipse makes VS look like a toy.

      Maybe there's a better version out. My problem with subclipse is that when I copy or rename a directory, it keeps its old .svn folders, which fucks up the the source control. When I copy a directory from one project to another, it sometimes(?) keeps synchronising with the old project instead of the new one.

      This is by far my biggest issue with subclipse, although I've had many others. And I'm not sure Subversive doesn't have the same problem (although it fixes some of the other issues, I think).

    104. Re:IDE Integration by mcvos · · Score: 1

      If you want, you can treat git the same as svn and not change your workflow. Then you can let others who want to commit locally work differently.

      This is I think possibly one of gits biggest strengths: it doesn't force you to work in a particular way. It supports lots of powerful weird stuff, but you can ignore it if you like.

      You have your local repository with your local branch, but if you really want, you can write a simple script that does git-add, git-commit and git-push with a single command, and suddenly it's nearly indistinguishable from your basic SVN workflow. Only branching is really different, I think, but if you're branching anyway, that just adds more reasons to use git.

    105. Re:IDE Integration by SnowZero · · Score: 1

      Get back to work Kyle, you broke the build again!!!

    106. Re:IDE Integration by moonbender · · Score: 1

      Or maybe it's a giant flaming chainsaw that we have to keep going for months, in which case it's a lot of effort.

      You have met some hard core clowns!

      --
      Switch back to Slashdot's D1 system.
    107. Re:IDE Integration by locofungus · · Score: 1

      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.

      1. Assume I test my code thoroughly before I check in.

      2. Once my code is tested I must be able to check in the known good tested version even if someone else has committed independent good but conflicting changes.

      Therefore branching and merging must be painless. Once you have 2, distributed VCS becomes trivial.

      Tim.

      --
      God said, "div D = rho, div B = 0, curl E = -@B/@t, curl H = J + @D/@t," and there was light.
    108. Re:IDE Integration by JasterBobaMereel · · Score: 1

      You are missing the point, even if your Version Control system does not do branches/merges at all people will still do them, just on their own machine (or in the IDE) and when they are "right" or Stable they will be merged by hand and become the main branch

      All that Git does is let people do this in the version control system easily (and in most cases only in their local copy)

      With a VCS that does not handle branches/merges well (or at all) people still branch they just don't back it up anywhere ....

      --
      Puteulanus fenestra mortis
    109. Re:IDE Integration by archeopterix · · Score: 1

      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.

      You understood nothing of the GP post. First, GP acknowledged said overhead. Second, and more important, pointed out there is some inevitable complexity in branching that is tool-independent. No tool will help you when one branch changes some properties of your code which another branch relies on.

    110. Re:IDE Integration by delt0r · · Score: 1

      Once you try it you never want to go back. I have used GIT for a year now and i dread the day that i have to work with svn again. I always recommend a distributed SCM systems now.

      --
      If information wants to be free, why does my internet connection cost so much?
    111. Re:IDE Integration by j-pimp · · Score: 1

      Yeah, I completely agree. If I were starting an open-source project today, especially one that I hoped to become giant, I'd definitely use something like git.

      And that comes down to organizational model, not technology. For many SVN's concept of a "central" repository is a feature. If I were running a software company, with paying customers, I'd be wary of developers wanting to use GIT. I need one repo and a centralized chain of trust as to what gets in there. My developers can make all the public branches they want, but they code they write needs to be on the central repository.

      If you have the personal charisma where the benefits of GIT outweigh the risks, then go for it. I don't. GIT only works when you have a strong cult of personality leading a group.

      --
      --- Justin Dearing http://www.justaprogrammer.net/ We're just programmers.
    112. Re:IDE Integration by doug · · Score: 1

      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?

      No, you do not want to require every check-in to be stable. When I go home for the day, I want to check-in everything that I've been working on. I want to use the SCM system to ensure that I don't lose anything. If the code doesn't compile, that is no biggie. Doing a checkin (or a commit, or whatever your SCM system calls it) is not the same as publishing to the development community at large.

      I agree that every published (pushed, delivered, whatever) change should be stable. That is a wonderful requirement, but not what you said.

    113. Re:IDE Integration by Just+Some+Guy · · Score: 1

      I don't check in things that I don't think are stable.

      I recently modified a mission-critical application from a multi-threaded to running distributed across multiple processes on multiple machines. Now, I think I'm a pretty good programmer or I wouldn't have tackled the project in the first place, but I openly admit that the first checkin of the new version had bugs. What was I supposed to do with that - keep it on my hard drive until it was perfect and then do a single giant merge?

      --
      Dewey, what part of this looks like authorities should be involved?
    114. Re:IDE Integration by Just+Some+Guy · · Score: 1

      Some large projects are organized and run in ways that require branching and merging. Some are organized and run in ways that don't.

      No project of consequence is run in a way that doesn't. There are always branches of a non-trivial application, even if it's only the difference between production code and what's living on the developers' hard drives. The only difference between that situation and "proper" branching is that the developers don't get the benefit of version control on code they haven't copied to production yet, where in a branching system they can check in all sorts of minor tweaks and experiments without breaking anything else.

      --
      Dewey, what part of this looks like authorities should be involved?
    115. 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

    116. Re:IDE Integration by lokimad · · Score: 1

      I'm in charge of support the moving of our projects from CVS to Mercurial. IDE Integration isn't a problem since are using TortoiseHG as primary hg interface tool. We just did add the commands arguments in the external tools menu from Visual Studio, Delphi 2006, and so on.

      The performance, integration and tracking abilities of Mercurial is just amazing.

      In the processes of evaluation I tested Git, and it poor support for windows and repository reindex requirement just lame.

      In one project we have tree Branchs with four people working on it. The branchs merging is very, I mean VERY, easy, I just canÂt imagine doing this in CVS or SVN.

    117. Re:IDE Integration by CrazedSanity · · Score: 1

      This may already have been said (since I came into this article late), but I have to add my two cents:

      Wouldn't it be better to have every check-in be stable?

      Have you ever worked on a large software project? Sorry if it sounds offensive, but really, it is unlikely at best to make sure that a given commit (or "check-in") is entirely stable. The likelihood decreases exponentially as the number of target systems increases (especially if it includes both Windows and Linux).

      When I setup a source control system, I use it as much for the ability to keep track of my changes as I do for maintaining the code. I've been known on occasion to make a commit that I know beforehand will destabilize the product, and then revert those changes immediately in the next commit; the log often includes "I know this is broken" and something about needing to have the change in there for historical reasons.

      If there's lots of developers on a project and the leader is anal about having every commit as stable as possible, I suggest SVK. It can mirror a repository locally, and all changes can be committed whenever needed without breaking the repository (especially handy when the repo is setup so that there's no chance of branching).

      --
      Sanity is like a condom: rather have it and not need it, than need it and not have it.
    118. Re:IDE Integration by Abcd1234 · · Score: 1

      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?

      Rose-coloured-glasses, much?

      Besides, believe it or not, sometimes features are developed by *multiple* people. And those people need to work together and share their in-progress, possibly not-completed work through some mechanism. Some sort of... management system, if you will, for their source code.

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

      Sorry, but some corporate clients are *not* happy with you dropping a new release every week. And this is doubly true if you work in the area of high-availability software. The idea that our company could just throw out a new code drop for every little feature is, quite frankly, laughable, given our product has to go through a third-party certification process.

      And that's ignoring the case of large features developed by multiple people that are more than a few man-months worth of effort, which is also a common reality in the software world (not everyone is in the maintenance game).

    119. Re:IDE Integration by GooberToo · · Score: 1

      So then it's agreed you pulled this pet theory out your butt.

      Here's a hint: Try googling revision control, software development process, and configuration management.

      As I said before, there are plenty of books and free information available. There are even courses you can take. Regardless of which sources you use, you direly need to use at least one.

      You need to do something. If you insist you know what you are talking about, when it's clear you don't, at least don't start preaching to others like it's fact. You're making this stuff up and it shows.

    120. Re:IDE Integration by CrazedSanity · · Score: 1

      Okay, so a developer using GIT has 10 branches working on a couple of different features and bugfixes. They're long-running works, so that developer hasn't put them into the main repository yet... all of a sudden, that developer disappears: they were involved in a car accident & killed, their laptop--which contained the branches--was mercilessly burned into a pile of smoldering ashes in the process.

      Now we've got a company with X developers that were waiting on those changes. They'll never see the changes, because they were destroyed along with the person that was about to implement them. So now another developer (or a few) has to devote time to fixing something that was never documented; they may not even have any idea how the afore-mentioned dead developer found the problem or how to fix it without crippling the entire program...

      That seems bad. If they'd been using SVN with their own branch(es), there would be a history of it. The remaining developers could just go through and finish up those branches & merge them into the main line. Seems to me like SVN is better, but maybe I'm wrong (I've only ever used CVS & SVN, upgrading to the latter from the former).

      --
      Sanity is like a condom: rather have it and not need it, than need it and not have it.
    121. Re:IDE Integration by osi79 · · Score: 1

      Usually you have production code, in a stable branch. Branch 1. Then you have the development version. Branch 2. As soon as you want to develop something that takes some time to finish and you don't want to break the development version for everyone else working on it. Branch 3. None of these branches can be reasonably avoided, but you need to merge between them, esp. between 2 and 3 (If the number of branches is 2, it's often as easy to backport bugfixes manually to the production code).

    122. Re:IDE Integration by osi79 · · Score: 1

      > 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? That impossible for bigger changes or even whole features. Or you work for a very long time on your local checkout without committing. That's even more pain and risk than merging in SVN. In GIT (or any other distributed VCS), it's easy to do local commits and later push those commits upstream keep the commits separated (In SVN, a complete merge is one big commit, or you need to merge each commit manually).

    123. Re:IDE Integration by osi79 · · Score: 1

      > Solution: stop checking in stuff that doesn't work. You never worked on a feature that took more than a day to finish? Maybe even a week or more? If you work with a SCM that doesn't allow local commits and people don't commit their work at least twice a day something goes wrong. I've seen companies where people worked for weeks or even a month on a local checkout without committing. Which has tons of disavantages: You can't do partial reverts if a part of the solution didn't work out, the work is not backed up in a sensible manner and not available to any co-workers, you don't get changesets from upstream and the conflicts when committing your stuff will kill you (you basically have a branch without SCM support...). If I can't commit my work at least every hour, I feel uncomfortable.

    124. Re:IDE Integration by mr_da3m0n · · Score: 1

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

      Have you ever tried Subversion 1.5? It does branch reintegration well now. Also merging trunk changes in your branch is much easier, too.

      Even with 1.4, merging reasonably-sized branches was certainly possible, if done correctly. However, nobody does it correctly, ever. So I guess your point is valid in that regard.

    125. Re:IDE Integration by Zero__Kelvin · · Score: 1

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

      If you read the article, you would realize how foolish you sound, and you might learn what branching and merging are as well!

      --
      Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
    126. Re:IDE Integration by Zero__Kelvin · · Score: 1

      "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 agree that's popular, but wouldn't it be better if developers never saved a file that wouldn't compile properly, run optimally, and be bug free?
       
      Seriously though, there is a lot of confusion here about branching and cheching in/out. You seem to think the two are related, probably because you have used SCM tools that didn't rock to the power of git ;-)

      --
      Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
    127. Re:IDE Integration by xero314 · · Score: 1

      If comes down to your experience and preference. You either don't mind "cherry picking" revisions/commits for release, or you don't mind merging.

      My experience has been to target the common path rather than the exception. If you branch and merge with every change, regardless of scale, then you have to branch and merge every time you make a change and will need to resolve conflicts regularly. If you only branch for releases and use your mainline as the development line then you only have to worry about difficult branching if the unexpected happens.

      Now if your developers are constantly committing broken code, or your projects are constantly being delayed, then by all means use the solutions that fits that best. I prefer to hire developers that don't commit broken code, and work with project managers that don't ask for requirements they don't actually want implemented.

      And I'm not totally against branching and merging, just saying that the majority of the time it is unnecessary overhead. This also is not to say that centralized SCM is any better than distributed SCM, just saying that distributed SCM seems to be a solution looking for a problem that just doesn't exist. That being said, if I was asked to work on a project that used Git, I wouldn't demand it be converted to Subversion, and I'm not against using Git on new projects, as long as there is a good plug-in for common IDE for the language being used

    128. Re:IDE Integration by Wonko · · Score: 1

      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.

      Where do you keep things that you don't think are stable? Are you expecting that code to become stable at some point? If the code is eventually meant to go into production then your RCS is probably a good place to keep it while you're working on it.

      I can only imagine that branching+merging is more difficult with your RCS than checking out a fresh copy. Either that, or you rarely have to check in a bug fix while you're in the middle of a "2-3 week" change.

      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.

      I bet most people would agree with you.

    129. Re:IDE Integration by damg · · Score: 1

      Many interfaces and plugins have been created for Git, so it is not command line only. Also, how on earth do IDE plugins fix deficiencies inherit in the svn/cvs model? Do you have any example of what you're talking about here? The closest thing I can think of is svk, but that isn't an IDE plugin.

    130. Re:IDE Integration by Abcd1234 · · Score: 1

      My experience has been to target the common path rather than the exception. If you branch and merge with every change, regardless of scale, then you have to branch and merge every time you make a change and will need to resolve conflicts regularly.

      Why? My working copy is effectively a small branch. Every day, I do an "svn update" which merges my working copy with what is in HEAD. And 99.99999% of the time, I never have a merge problem. So why would this magically become an issue with real, honest-to-god branches within the SCM itself?

      I prefer to hire developers that don't commit broken code

      I never said broken. I said in progress. Why you keep assuming the latter implies the former, I have no idea. Have you never wanted to check in partially-complete code so that another person could work with it? Or so that it's not sitting there on your desktop, waiting for a drive failure to render your work non-existent? Or so you could check in the solid stuff you have, now, so that you could experiment with an idea you had?

      And I'm not totally against branching and merging, just saying that the majority of the time it is unnecessary overhead.

      Only because you're biased against the process, probably because you've used tools that make it more difficult than it needs to be.

      just saying that distributed SCM seems to be a solution looking for a problem that just doesn't exist.

      If that were true, we wouldn't have projects moving to them. :)

      Besides which, branch-and-merge workflow need not be unique to distributed SCMs. It's just that many of the centralized SCMs suck at it (although my wife, working at Nortel, used this exact workflow many years ago using ClearCase, IIRC, and it worked quite well... and in that case, they used it specifically so they could facilitate code review and a change gating process).

    131. Re:IDE Integration by GooberToo · · Score: 1

      Git just adds to the management mess.

      How does Git add to the management mess?

    132. Re:IDE Integration by Anonymous Coward · · Score: 0

      Wow, your job really sucks.

    133. Re:IDE Integration by Crias · · Score: 1

      Ok, I think I get what dubl-u is getting at. And I agree. I'll admit before I start, though, that I'm spoiled. Our project lead acts as the proxy to the customer, and understands the processes involved very very well, so he's very sympathetic to our needs as developers and communicates them effectively to our client.

      "Tagging" and "Branching" in SVN are handled the same way - they're identical, but have different names. They really are conceptually different - two different tools that are implemented the same way. It really is important to remember the difference between them, because most of your post can be handled.

      "Tagging" is a point-in-time snapshot of the code. It stays where it is, you don't develop on it, it just sits there. It's good practice, for example, to tag releases of your software. When you release Version 1.2.3 you make sure to create a tag for V1.2.3. You really shouldn't be updating this code at all.

      There are situations where you want to edit the code in a tag. High-priority production issues, for example, sometimes require a re-release. In these instances, you should be checking out the tag and making your changes there. Then you commit there, and you patch the changes to your current trunk. Re-release as necessary, of course.

      "Branching" is for when you want two concurrent versions of your software to be developed. In my experience, this is most commonly used for two incompatible versions of the code, such as "Windows" version and "Linux" version, or "Implemented using Java Servlet" vs "Implemented using PHP". Occasionally you actually branch in order to develop a long-term change in parallel with the main software, then merge it in. I recommend, if you're doing this, that you actually patch the changes accross from the trunk to the experimental branch as often as possible - this reduces complexity of merging.

      One last thing to note: I recommend using 2 repositories if you want to expose the SVN to your customer (as we do). One is your Release Repo and this is where you commit releases to allow your customer access after they've been cleared, and the other is a development repo that you use in-house.

      Since many of my answers here are going to be the same, I'm going to shorten my post - whenever I say "Tag, Update, Patch" I am referring to the practice of tagging your releases, making high-priority updates there, and then quickly patching your trunk. You always want to edit the tag, because it's easier to patch the changes to the head. Also, with short cycles, it should never be more than a few weeks between releases, so the code differences between a tag and a head should be minimal.

      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.

      High-priority changes requiring a re-release.
      Tag, Update, Patch

      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.

      Branches, or tags? Prod and staging should be copies of your latest Release Repo head, or your latest tag.
      Tag, Update, Patch.

      System Rewrite? Are you _rewriting_ or just doing maintenance? Rewriting is probably not something you want to merge your old faulty code with, and maintenance should be done on the head revision.As for your system rewrite - if the system is being _rewritten_, do you really want to merge parts of the old system back into it? Really? I'm not sure what you're getting at here. If you're talking standard maintenance though, I say he should be working in the trunk ju

    134. Re:IDE Integration by darkvizier · · Score: 1

      So I guess you've never worked in the real world

      Exactly. Anyone arguing against branching either a) has never worked on a large scale production or b) isn't able to wrap their mind around keeping track of various branches. The system suggested by the grandparent would be a disaster at any of the places I've worked. It just doesn't allow any flexibility in responding to the needs of the customer. Most software teams now are moving towards the 'agile' model, or some variation, and the tools that they use should reflect their principles. So branching is a given, the question is, which system does it best?

      Everyone is living in a personal delusion, just some are more delusional than others.

      I think it's more that some people agree to have the same delusions. :-)

    135. Re:IDE Integration by sydneyfong · · Score: 1

      Merging sucks when all you have is CVS or SVN

      --
      Don't quote me on this.
    136. Re:IDE Integration by jgrahn · · Score: 1

      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.

      It's an unnatural example. You either branch, or you hack the trunk. A team doesn't hack the trunk and then suddenly decide to branch from some point on it and hack the branch.

      The way I work with branches, the head is irrelevant. It's identical to the latest release, and my branch is in sync with it, so the only delta I see is between the latest release and my branch. And (the best part) everybody else working on unrelated things can happily ignore my branch. The things it contains doesn't become relevant to them until I merge it and make it the next release. Then they are supposed to sync their branches with this latest release.

      (Of course, letting such a branch stay active for weeks, contain massive and/or unrelated changes or lagging behind the latest release, that's asking for trouble. That's the only thing everyone here seems to agree on.)

    137. Re:IDE Integration by smenor · · Score: 1

      Just wanted to make a "me too" post.

      I love Git and use it for just about everything that I'm doing on my own, but the lack of (usable) IDE integration is a killer for group projects.

    138. Re:IDE Integration by try_anything · · Score: 1

      This is true only when you think your changes have a substantial chance of introducing bugs.

      You do have a substantial chance of introducing bugs. Or maybe not, but that's how the customer will see it. Good luck convincing them otherwise if they have any experience with software.

      Plus, unplanned changes in the software, even enhancements, can be extremely unwelcome for some kinds of software. Theoretically, only the customer knows whether the enhancements will require training, process changes, or integration work (of the "oops, it turns out our code calls your buggy undocumented private API" kind.) In practice, sometimes even the customer is surprised. The customer only wants the potential for surprises when and if there is time budgeted for dealing with them, not with every bug fix.

      Even a bug fix can require retraining personnel whose original training took the bug for granted. You'll need advance permission from the customer for a change like that. I.e., you can't just roll out all the changes on TOT without running each change by the customer, even if all the changes are just bug fixes. They might have a good reason for demanding one fix urgently and asking you to hold off on another.

    139. Re:IDE Integration by try_anything · · Score: 1

      Putting experimental, disabled code in your stable release is a really ugly hack.

      Amen! As well as the potential for mistakes in switching, it makes code navigation harder (on the file or directory level) and makes it hard for new developers to get a feel for the code.

      Also, when you introduce switching, you commit yourself to the future cost and risk of ripping out the old code. The temptation to bail on that responsibility is high. Here's a simple heuristic: if your team doesn't produce thorough API documentation, they probably won't do a good job of ripping out obsolete code. You'll end up paying the mental code complexity overhead of code you don't even use.

    140. Re:IDE Integration by 2short · · Score: 1


          I was speaking of branching and merging within the source control system. If you want to call any different version of code a branch, then of course those exist.

      Mind you, our "production" branch is binaries handed off to fulfillment every 3-6 months when a release happens, so if I'm not going to break that if I check in the wrong thing. I guess I don't do many "experiments" with the potential to break much else; I seldom leave for the day with anything not checked in.

      Whatever; I'll not debate whether you think my project is of "consequence" as I don't care.

        SVN works great for us. If you don't feel the need for more branch management than it provides, I highly recommend it. If you feel the need for greater branch management capabilities, you might want something else.

    141. Re:IDE Integration by honkycat · · Score: 1

      Exactly. Very well put. A bug is an unexpected consequence of your code. It's hard to expect the unexpected, no matter how good a programmer you are.

      Furthermore, if you're developing stable software, by definition you're carefully controlling when new features roll out. You don't add a new feature in a bugfix release, you fix bugs! It's hard to manage that without a separate branch for the releases, or some other equivalent construct that's somehow technically not a branch.

    142. Re:IDE Integration by honkycat · · Score: 1

      As far as I can tell, this is mainly because they are used to software sucking a lot.

      Making lots of unnecessary changes as part of a bug-fix release is hardly a recipe for non-sucking software. A code change should make it in to a release either because it's required to fix a critical bug as part of a bug-fix (i.e., emergency) release or because it's part of a planned, scheduled change. If you're mixing these up, you're not serving stable software to your customers.

      Remember, stable software is not just software that doesn't crash. It's software that works the same today as it did yesterday and the day before that. It's predictable and boring. New version roll-outs are expensive.

      And no, a new version of Google coming out isn't even remotely relevant. I'm not talking about the kind of shops where users are responsible for their own software choices. Most of these places the users have to be *trained* to use the software. Even if they're technically capable of doing that, it's too risky because unless you've tested the process end-to-end, it's possible you don't understand what the software is doing. *Any* new version requires testing and training. Even a bug-fix release may not be rolled out unless the bug is so severe that no acceptable work-around exists.

      Release early release often works well for geeks who don't mind fiddling, but for a huge number of gigs out there, it's gotta be release once and forget about it.

    143. Re:IDE Integration by thelibrarian · · Score: 1

      No, that bit is all well known and documented. I was querying your assertions that branching is what people do when they fail to work effectively as a team. More, that you imply that this is the ONLY reason people use branching, and that if people could only learn to get along and work as a team, they would not need branching in their source control software.

    144. Re:IDE Integration by Gimble · · Score: 1

      Absolute tosh. I have no idea what GUI you use, but I've never seen such an issue with TortoiseSVN or the command line tools, and we regularly commit hundreds of files at a time.

      I suspect that something is up with your svn server. We use svnserve and have never had issues like that.

    145. Re:IDE Integration by mcvos · · Score: 1

      Absolute tosh. I have no idea what GUI you use, but I've never seen such an issue with TortoiseSVN or the command line tools, and we regularly commit hundreds of files at a time.

      I suspect that something is up with your svn server.

      No, it's the client. We had this problem with Subclipse, but not with Subversive (while using the same SVN server).

    146. Re:IDE Integration by everslick · · Score: 1

      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.

      i can't agree more. in the company i'm in we have switch the development process from a monolitic sourcetree with lots of braches (some of them proved themselfs unmergable, so they have to be maintained seperatly) to a modular aproach. this switch was only possible because we started a complete rewrite of the old code (besides switching from windows to linux at the same time) though. the old windows code is still maintained by a 10 members team, while the rewrite is done by 8 people. constantly branching and merging proved to be a big headache but was unavoidable. now we make heavy use of tags and a sophisticated modul versioning system and we didn't have to branch once 'til now.

    147. Re:IDE Integration by badkarmadayaccount · · Score: 1

      Oh, so its like Inferno, an integrated IDE and OS? Nice. *ducks*

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    148. Re:IDE Integration by Crias · · Score: 1

      So I guess you've never worked in the real world

      Exactly. Anyone arguing against branching either a) has never worked on a large scale production or b) isn't able to wrap their mind around keeping track of various branches. The system suggested by the grandparent would be a disaster at any of the places I've worked. It just doesn't allow any flexibility in responding to the needs of the customer. Most software teams now are moving towards the 'agile' model, or some variation, and the tools that they use should reflect their principles. So branching is a given, the question is, which system does it best?

      Everyone is living in a personal delusion, just some are more delusional than others.

      I think it's more that some people agree to have the same delusions. :-)

      Dude... how is branching a given? If you're running Test Driven Development + Agile things should always be stable and transparent.

      Changing to TDD+Agile from Waterfall-ish styles overnight? Heck yes that would be a disaster. Period. You have to make a more gradual step-by-step change.

      Right now our team is doing exactly that. The company hired someone, and we're learning how to do it right.

      Here's the TDD+Agile cycle, as he explained to us yesterday:

      1. Write tests (only a few)
      2. Write as little code as possible to make them pass
      3. Refactor the existing architecture, if needed, to adapt (timebox this)
      4. Commit

      And this should happen, as he said, on order of 20 times a day. Just today I've committed 5 times and I'm just learning

    149. Re:IDE Integration by dubl-u · · Score: 1

      I think this was very true for some shops in Ye Olden Dayes. But it wasn't true for all of them; I've interviewed retired programmers who released frequently in manufacturing and office environments, for example.

      Regardless, it's getting less true all the time. People are used to software changing more frequently on the web. That's true for both simple software and complex software. More importantly, interface and interaction designers are learning to change interfaces in ways that don't disturb normal workflows. And they're making applications more self-documenting, so that people can self train.

      For the consumer web, building software like that is a necessity. You can't force people to deal with bad UI, and you can't force them to sit through training sessions. It has to work. People will eventually learn to apply these lessons to a lot of other software as well. Not everything can work this way, but anybody boldly asserting that it is impossible for their particular project is making a big gamble. A lot of other people have said that and been proved wrong lately.

    150. Re:IDE Integration by dubl-u · · Score: 1

      Sorry, I replied to myself minutes later to clear up that false implication. Perhaps you missed that.

      I was writing in the context of my parent post, where I said that branching was certainly necessary in some cases, but about 90% of the branching I see is due to failures to work effectively as a team. I still stand by that, but don't have any published data to back that up.

    151. Re:IDE Integration by dubl-u · · Score: 1

      You do have a substantial chance of introducing bugs. Or maybe not, but that's how the customer will see it. Good luck convincing them otherwise if they have any experience with software.

      My teams don't, but we work hard to keep it that way. My point is that a lot of people don't, and that's why they have to do a lot of monkeying around with stable versus dev branches. If you reduce your bug count to near zero, then nobody cares, and that need for branching goes away.

      And yes, even customers come to think that. It's actually surprisingly easy to convince them. If you release new versions weekly and your bugs are small and very rare, then they come to see releases as easy and safe. It doesn't take long before you don't have to push them at all to release. There are new features they want to use, after all.

      You'll need advance permission from the customer for a change like that.

      Yeah, that's why I have a product manager in the room, often within arm's reach. They represent the customer fully, and are empowered to make those decisions.

    152. Re:IDE Integration by dubl-u · · Score: 1

      It's hard to expect the unexpected, no matter how good a programmer you are.

      Not really. A fall for a trapeze artist is always unexpected, but the fact that they will eventually fall isn't. So they have nets and other safety gear.

      If you use test-driven development, automated end-to-end tests, pair programming, and promiscuous pairing, you can get your bug rates very low. Combine that with a skilled exploratory tester in the room, and they get very low indeed. And in my experience, you can develop much faster, so the work put into testing is essentially free.

      You don't add a new feature in a bugfix release, you fix bugs!

      And if you stop putting in bugs, you don't have any bug fix releases, therefore no bug fix branches. For a lot of situations, that means you can then work off trunk.

    153. Re:IDE Integration by dubl-u · · Score: 1

      Yes. Most of us agree that shorter and simpler branches are better. The teams I work with commit to trunk every few hours. You could call that short branches, or you could call that checking out, and I don't much care which.

    154. Re:IDE Integration by dubl-u · · Score: 1

      Where do you keep things that you don't think are stable? [...]Either that, or you rarely have to check in a bug fix while you're in the middle of a "2-3 week" change.

      I commit every few hours, and it's the rare bug fix that can't wait that long. (Actually, for my teams, any bug fix is relatively rare.) When it can't, I'll either use the "shelve changes" feature in my IDE, or create a new workspace. Either's sufficiently quick for me, especially when I do it maybe once a quarter.

      If code isn't stable by the end of the day, then obviously I and my pair have lost track of what's going on, creating a bigger mess than we know how to manage. So usually we just throw out the change and start over in the morning. And when we don't, we generally wish we had. Untangling a giant knotted ball of string isn't worth it; it's cheaper just to buy more string.

    155. Re:IDE Integration by dubl-u · · Score: 1

      If you read the article, you would realize how foolish you sound, and you might learn what branching and merging are as well!

      I am well aware that philosophically, checking out is effectively branching, and updating and committing are effectively merging. Some people really think of it that way. In my experience, a lot more people think of it the other way.

      I'm going to stick with that language, partly because that's the default, and partly because local, private branches and merges are very different than public ones, and I am focusing on the public ones here.

    156. Re:IDE Integration by dubl-u · · Score: 1

      You never worked on a feature that took more than a day to finish?

      I work on things that never finish. Most people do; if your product is really finished, that means the company is closing.

      Given that work is endless, the only question is what size chunk you work in. I commit to trunk every few hours, and I always try to keep trunk releasable. So although I have worked on things that took more than a day to finish, I now see that as a problem, and it rarely happens to me these days.

    157. Re:IDE Integration by dubl-u · · Score: 1

      That impossible for bigger changes or even whole features.

      I think it's more accurate to say that you don't do that, and don't know how. Impossible means that you can prove that it could never happen. Proving a negative is hard, as somebody just has to come along with one counter-example. Perhaps you could consider what that example might look like?

    158. Re:IDE Integration by dubl-u · · Score: 1

      Yes. If you stop making things unstable, then you don't need that extra branch. See the rest of my posts here for how that might happen.

    159. Re:IDE Integration by dubl-u · · Score: 1

      All the advice I'm giving is pretty standard agile advice. You'll here it especially from the Extreme Programming end of the agile spectrum, but a number of Scrum people talk this way, too.

      If you'd actually like to find out how that works, try, say, reading a book. Or drop by the Extreme Programming mailing list on Yahoo. There are a number of people expert with revision control and configuration management. There were entire presentations on the topic at Agile 2008 this year.

      I've tried it, and it works just fine. I've also tried it your way, which is why I'm pretty comfortable saying which one I think works better.

    160. Re:IDE Integration by dubl-u · · Score: 1

      Rose-coloured-glasses, much?

      Hardly. I'm living the dream. But to get there takes a fair bit of hard-eyed realism.

      Besides, believe it or not, sometimes features are developed by *multiple* people. And those people need to work together and share their in-progress, possibly not-completed work through some mechanism. Some sort of... management system, if you will, for their source code.

      I'm a big fan of working in teams. I just don't think it has to involve leaving a lot of half-finished stuff around. As Yoda would point out: "Do or do not."

      Sorry, but some corporate clients are *not* happy with you dropping a new release every week.

      Right. And why is that? Because they are used to software sucking. You're not thinking this through. If you could actually reduce your bugs in number and severity to a level where nobody cared, then they would be fine with releases.

    161. Re:IDE Integration by dubl-u · · Score: 1

      I just worked with a team that took a mission-critical single-box application and made it fully distributed. It took them quite a while, as it was a complicated app, but they did it by committing every few hours and releasing every week or so. There was no significant increase in bugs compared with their normal feature development, which followed a similar checkin and release schedule. And that's good, because by "mission critical," in this case I mean it's the entire purpose of the company, and where all the money comes in.

      You do that the same way you eat an elephant: one bite at a time.

    162. Re:IDE Integration by dubl-u · · Score: 1

      Have you ever worked on a large software project?

      Sure. I've worked on systems with hundreds of other active developers. These days I focus most of my effort on smaller teams, as the fall-off in productivity is incredible. For things that are too big for one team, I favor a team-of-teams approach, with distributed responsibility.

      but really, it is unlikely at best to make sure that a given commit (or "check-in") is entirely stable

      I believe that for most software, you can solve this through fully automated testing. And further, that investment in automated testing is usually much cheaper over the long haul than manual testing.

    163. Re:IDE Integration by dubl-u · · Score: 1

      You're part way there. I agree you should commit before going home. I just think you should work in such a way that before going home you can commit to trunk, or however it is that you publish the change to everybody.

    164. Re:IDE Integration by dubl-u · · Score: 1

      Sorry I was confusing; I understand that.

      My point is that people should stop doing that. In a team context, the more divergence you have, the harder it is to understand, and therefore the harder it is to resolve.

      The teams I work with commit every few hours, so they don't have much need for branching, local or central.

    165. Re:IDE Integration by dubl-u · · Score: 1

      If you have the personal charisma where the benefits of GIT outweigh the risks, then go for it. I don't. GIT only works when you have a strong cult of personality leading a group.

      That's a great point.

      One of the things a lot of people in this thread seem to struggle with is how the social structure affects your software needs, and how your software can encourage or discourage particular behaviors. Glad to see somebody else gets it!

    166. Re:IDE Integration by dubl-u · · Score: 1

      Personally, I tend to do those things either incrementally or automatedly, so they can be checked in frequently. I personally prefer that; once I got good at it, it saved me the hassle of trying to keep up with other people's conflicting changes.

    167. Re:IDE Integration by dubl-u · · Score: 1

      First, all of these methods are hacks.

      I guess you could call them hacks. But if we're going to talk like that, then I'd be happy to say that branching just to isolate you from what your team is up to is putting your hands over your ears and pretending that you're in your own little bubble. It's ignoring reality. La la la!

      Hacks or not, they can work very well. In my view, as long as you're disciplined about it, there's no real problem with having modest amounts of in-progress work committed. It lets other developer know what's going on. It lets you test the feature as early as possible and in a way that's as real as possible. If you've got to deal with reality sometime, I'd say do it now.

    168. Re:IDE Integration by dubl-u · · Score: 1

      Could be. For me, the costs turn out to be much lower. But given that my teams are doing pair programming, weekly releases, and test-driven development, with >95% unit test coverage and high levels of acceptance test coverage, I could see a lot of things like that would be different for us.

    169. Re:IDE Integration by dubl-u · · Score: 1

      Heh. That is entirely the truth. :-)

    170. Re:IDE Integration by dubl-u · · Score: 1

      I'm probably comfortable with it because my colleagues and I are merciless refatorers. Dead code doesn't last long, as it tends to stand out in the code base. Since we trust we'll clean it up, we're not afraid of making a little mess now and again.

    171. Re:IDE Integration by dubl-u · · Score: 1

      Yeah, that's a horror. In the agile software development world, there's a saying: either change your organization, or change your organization. If I worked there, I'd call it an obvious opportunity to apply that. :-)

    172. Re:IDE Integration by honkycat · · Score: 1

      Interesting approach. It sounds like it's very nearly equivalent to keeping a release branch and not playing with multiple repositories. Is there a particular advantage to keeping completely separate repositories?

    173. Re:IDE Integration by GooberToo · · Score: 1

      I'm loosely familiar with both. Both are development processes. A development process is not a replacement for RC/CM process. Given that CM falls well outside of a development process and RC, when done right, simply has an intersection with development, I seriously doubt you understood what they were teaching. They may be self proclaimed experts but if you're accurately representing what they are teaching, they are no more an expert than you are.

      Did you happen to note that pretty consistently, everyone told you the same thing? There is a reason for that. Regardless of where the source of the issue is, it's very clear the process your preaching is fundamentally broken. I strongly urge you to learn it from a credible source.

    174. Re:IDE Integration by dubl-u · · Score: 1

      Did you happen to note that pretty consistently, everyone told you the same thing? There is a reason for that.

      You're seriously telling me to change my process because some people on Slashdot got upset at a deliberately inflammatory post? Heh. That's precious.

      I've been doing Extreme Programming and other agile methods for many years now. From the beginning, some people said it was impossible and broken. Like you, the people who said it the loudest were a) steeped in old methods, and b) mainly ignorant of the new ones.

      I might have been put off by that years ago, but guess what! The new methods worked better for me. Your sour theories and dogmatic arguments are not as persuasive to me as my successes.

      This year the agile conference was 17x larger than when I first attended, and surveys show major agile uptake. Agile methods may be in a majority of organizations by now. If you think "everybody says so" is a valid argument, then you're on the wrong end of it.

      I'm loosely familiar with both. Both are development processes. A development process is not a replacement for RC/CM process.

      I wouldn't say it's a replacement, but the they're not as separable as you seem to suggest. The right RC/CM choices are driven by development needs and how you handle business needs. Agile methods radically alter both.

      If I am releasing weekly, if my developers are all in a room, if our bug rates are negligibly low, and if we're committing every few hours, then 99% of the time, we all just commit to trunk. It is not a problem. (That 1% is when somebody really needs an in-production change that can't wait a few days, in which case we find our last release tag, branch, and do our thing.)

      As to the business side, our practices are equally lean. We always have business people in the room empowered to make decisions. Every Monday morning, we decide what we'll do for the week. And as we build, we work closely together. That makes traceability easy. Since, like a lot of people, we build apps that run on servers we control, managing deployed software is easy. Because releases are so frequent, our release process is heavily automated.

      In sum: we release weekly and have for years, our bug rates are very low, the business people get what they want when they want it, our users are happy, and business is great. Oh, and developers go home on time every day. If that's a sign of failed traditional RC/CM, then please, tell me how to fail harder at it.

    175. Re:IDE Integration by darkvizier · · Score: 1

      Yeah, I know about test driven development. I've read the book. The reality is that doesn't happen in most places, and even if you've got an Agile development model, say Scrum, you've still got a two week cycle for new development. If a production issue occurs that needs to be patched same day, you need the ability to branch.

      It depends though, on what level of reliability you want to ensure. In most cases, committing your code and making sure it compiles and passes unit tests is not enough. Production needs to be kept sanitary, and that means any code that gets there has to go through regression and user acceptance tests. This all takes time, and the more code you're dumping into production, the longer it's going to take. So it's very useful, and often integral to the operation of the business, to be able to branch, in order to limit the amount of change you're introducing to a critical system.

    176. Re:IDE Integration by GooberToo · · Score: 1

      I've participated in the agile process early on. I've never heard of anyone, until now, suggest that it's more than a development process. And I can't imagine how it can begin to address CM process. Your post seems to suggest the same. And to be clear, your people-argument is nothing but hand waving. All development models/processes benefit from strong communication and team work. Period.

      I'm not anti-agile. To be clear, I'm not an agile expert, but I just don't see the benefit. Even if you are able to make it work for you, it's still just another *development* process. There are lots of processes and all bring something to the table. Development processes do not directly address RC/CM process. They are distinct processes. It's true RC elements must be part of a strong development model - there is clear overlap. But there is lots that doesn't overlap and falls squarely into the CM arena. Many are able to largely ignore RC/CM issues because frankly, their project is so small, their project not complex, and the development pool tiny. And that's fine, but that's a far cry from claiming a broken/deficient process is superior to others.

      What is sounds like is you have very poor RC/CM process and have developed a development process to hide that fact. If it works for you, that's fine, but it's still inferior to RC/CM best practises. Does the earth stop spinning? No. Do you have a lot to learn? Absolutely.

    177. Re:IDE Integration by try_anything · · Score: 1

      You'll need advance permission from the customer for a change like that.

      Yeah, that's why I have a product manager in the room, often within arm's reach. They represent the customer fully, and are empowered to make those decisions.

      What do you do when the customer rep says: "This time is extremely critical for us. It will be very expensive for us if your changes reveal any bugs in our code or our business processes. Therefore we want no new features, no enhancements, and no bugfixes except this one."

      I know there are some kinds of software where you don't hear this kind of thing. I worked on a desktop app where we sometimes rolled out major new features without any notice and sat at our desks with big grins waiting for the excited calls of gratitude to come in :-)

      I've also delivered software to a customer whose normal procedure for receiving new software was to spend a week on integration testing and roll out the new version to all their sites over a couple of weeks. Bypassing that process for an urgent bug fix was a really big deal and it would have been entirely unacceptable to ship anything more than a minimal bug fix applied to the version that was already in production.

      Also, thinking of that customer brought an entirely different argument to mind, which is that there are times when you have to keep a feature exclusive to one customer, because two of your customers compete against each other and are obsessive about secrecy. When customer A was planning a significant change to their operations, or had a big new deal in the works, any development we did to support those changes was considered confidential. We had to keep it exclusive to them to help ensure that customer B couldn't figure out their plans.

      That might be a pretty rare scenario, but I imagine that temporary exclusivity is common practice when a customer contributes money or expertise to the development a new feature.

    178. Re:IDE Integration by dubl-u · · Score: 1

      Yes, I understand you haven't heard of it and can't imagine it. That's why we're having such a long discussion here.

      The agile approach works best when agile principles infect an entire organization. It can affect product management, marketing, budgeting, rollouts, support, and yes, configuration management.

      What is sounds like is you have very poor RC/CM process and have developed a development process to hide that fact. If it works for you, that's fine, but it's still inferior to RC/CM best practises. Does the earth stop spinning? No. Do you have a lot to learn? Absolutely.

      Yes, I've heard that same line from pretty much every specialist perspective. "Sure, agile's fine for development, but you can't possibly do good X that way. It's impossible!" Where X is visual design, interaction design, product management, software release, QA testing, usability, project planning, project budgeting, and product portfolio management. But guess what, people are making it work, and have spent the last decade confounding naysayers like yourself.

      Note that you haven't pointed out any particular practical, real-world consequence of, say, an Extreme Programming team not following your precious best practices. You're arguing dogma, not results.

      I'm happy to put pretty much any specialist book people recommend to me on my reading list; I've got shelves and shelves of books on various aspects of software development. If I can find some practical benefit in some particular practice from any field, I'll adopt it, and I'm continually experimenting with new options. I'm done with other people's dogma, though, especially from random people and/or dogs on Slashdot.

      I stand by my statement that started this: 90% of the branching I see is to compensate for social or technical brokenness. If you solve those root causes, not only do you avoid the need for the branch-and-merge shenanigans, you also solve the root problem. Getting bug rates to approach zero, for example, has all sorts benefits beyond meaning you don't have to screw around with stable branches. Benefits like reliable schedules and going home on time.

    179. Re:IDE Integration by dubl-u · · Score: 1

      What do you do when the customer rep says: "This time is extremely critical for us. It will be very expensive for us if your changes reveal any bugs in our code or our business processes. Therefore we want no new features, no enhancements, and no bugfixes except this one."

      In the short term, I'd always say yes. But in the longer term, I'd look at why they don't trust that our stuff would just work. If it's because there really is a substantial risk of a significant bug, I'd fix that. Once quality is sorted, I'd figure out how to build more trust.

      I know there are some kinds of software where you don't hear this kind of thing. I worked on a desktop app where we sometimes rolled out major new features without any notice and sat at our desks with big grins waiting for the excited calls of gratitude to come in :-)

      Yes, that is indeed delicious.

      That might be a pretty rare scenario, but I imagine that temporary exclusivity is common practice when a customer contributes money or expertise to the development a new feature.

      Yeah, definitely. One team I'm working with produces software that they sell as a service, but each client pays for different features, and has different customizations. They manage that all through allowing for configuration and localization. I've seen others use content management systems. If that got complicated enough, it would be reasonable to put all those config files and special templates in version control, but I would treat those as separate projects, and not clutter my main code base with them, as the customizations and configurations have very different needs and moderately different lifecycles than the main code base.

    180. Re:IDE Integration by try_anything · · Score: 1

      Yeah, definitely. One team I'm working with produces software that they sell as a service, but each client pays for different features, and has different customizations. They manage that all through allowing for configuration and localization.

      I could see configuration management being perfect for code customization if you had a nice plugin system a la Eclipse. I have done some Eclipse RCP work and am completely sold on the plugin model for customizing and extending applications. I believe Qt provides some support for building plugin-based apps, too.

      Unfortunately, we didn't have a plugin system, so that didn't work for us. Either the feature was compiled in (which broke confidentiality even if it wasn't enabled) or it wasn't. Build-time configuration at the #ifdef level or the Makefile level would definitely have worked, but we had all had bad experiences with those techniques and were keen to avoid them.

      As for the config files and templates not being in version control, how did you achieve reproducibility for your builds?

    181. Re:IDE Integration by GooberToo · · Score: 1

      Yes, I've heard that same line from pretty much every specialist perspective. "Sure, agile's fine for development, but you can't possibly do good X that way. It's impossible!" Where X is visual design, interaction design, product management, software release, QA testing, usability, project planning, project budgeting, and product portfolio management. But guess what, people are making it work, and have spent the last decade confounding naysayers like yourself.

      You obviously don't get it and that's the point. A process is a process. No process is magic; yet that's what you're saying. That's why the BS detector has exploded and so many pounced. I know enough about the process to know it's nothing close to what you're asserting. Regardless, ultimately, a process is a process. Period.

      No process can hide the fact that everyone working on trunk/master/main (whatever your RC software calls it) is going to cause problems for complex software problems and feature sets. That's the reality of developing and maintain complex software. It is not and has never been a people/community/team problem; it's all about managing concurrency. Since you're not managing concurrency, you have serialized your developers which is slow and incredibly inefficient; costly to boot. Furthermore, unless you're blessed (some are) where you can always move your customers to the latest software, you must have the ability to branch and merge. If you are so blessed, this strongly implies you do not have complex software.

      If you want to imagine your magical process has solved a problem you don't have (because your software is simple and your feature set development concurrency is low), that's fine. You're not fooling anyone but yourself. Likely after you've matured more, perhaps in five years or so, you'll realize why you missed the boat; and that's no hand waving.

      To boot, CM is an entire process in of it self and most developers will have nothing to do with it aside from dealing with the associated implications. If CM is entirely in your development process then your process is both broken and inefficient.

      I could go on and on but simple RC/CM 101 books pretty well explain why you wrong.

      At this point we have to agree to disagree. Reply if you must, but I'm done talking to the wall.

    182. Re:IDE Integration by Yenya · · Score: 1

      You cannot change the function to use UTF-8 internally without also changing all callers of this function. The same for database - you have to modify (or at least check whether they are doing anything encoding-sensitive such as a case conversions) all places which execute database queries. Sometimes incremental changes are simply not possible.

      Sure, they are small changes, but it takes time to find all the places where the change is needed, and they are scattered all over the code base. And the move of the whole application (think web-based information system) to the new UTF-8 environment should be done atomically.

      When averything you are doing in your branch are small (one-line) changes like this, you don't have a big problem a month later when you do the merge. Or you can incremenally merge the changesets from the trunk to your own branch (i.e. rebase), and then at the end merge your branch to the trunk.

      --
      -Yenya
      --
      While Linux is larger than Emacs, at least Linux has the excuse that it has to be. --Linus
    183. Re:IDE Integration by dubl-u · · Score: 1

      You cannot change the function to use UTF-8 internally without also changing all callers of this function. [...] Sure, they are small changes, but it takes time to find all the places where the change is needed, and they are scattered all over the code base.

      Well, maybe you can't. I don't know enough about your specific case, but I've got a whole bag of tricks for working incrementally on things like this.

      Often to me things that "have to" be changed everywhere at once are signs of poor encapsulation. If I'm changing the internal encoding of some data structure and I have to touch code all over the place, then that's a sign that it's not really internal, so I need to first pull together that code. Duplication is my sworn enemy, and I work in the style often called Once And Only Once (OOAO) or Don't Repeat Yourself (DRY).

      I don't quite get your situation, but this sounds like poor encapsulation of the string. That's not uncommon; a lot of code out there confuses char arrays and byte arrays and strings. But I'd solve the confusion to refactoring to use real string objects first, which can indeed be done incrementally. Then the code I actually have to change is not spread out all over, it's in one place.

      When averything you are doing in your branch are small (one-line) changes like this, you don't have a big problem a month later when you do the merge.

      Depends on your project. Releasing new features weekly and a team refactoring aggressively means that branching for an entire month would mean a giant, giant painful merge at the end. So it might be ok in your environment, but it'd be awful in mine.

  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 porl · · Score: 1

      i'd like to know the main differences here too. i'd never heard of bazaar, but then ubuntu/launchpad started using it and now it's everywhere.

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

    3. Re:What about Git vs. Bazaar? by Bromskloss · · Score: 1

      It may not perform quite as well, but it's also less rough around the edges and supports more workflows.

      What does "workflows" mean?

      --
      Swedish plasma phys. PhD student; MSc EE; knows maths, programming, electronics; finance interest; seeks opportunities
    4. 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. Re:What about Git vs. Bazaar? by SanityInAnarchy · · Score: 1

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

      Typically, Git checkouts take up less disk space than SVN checkouts, even though Git checkouts have history, and SVN checkouts don't.

      Most of the workflows mentioned are just as possible with Git. All bzr does is make them easier, and that's arguable.

      --
      Don't thank God, thank a doctor!
  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.
    1. Re:Familiarity? by CarpetShark · · Score: 1

      Most of us are very familiar with addition, but learning multiplication even moderately would still be a huge benefit over addition alone.

  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 Anonymous Coward · · Score: 1, Interesting

      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.

      To be fair to perforce, I have used it at various different companies, source tree sizes, etc. and I have no idea what you are talking about.

      Making a client spec is super easy. Type "p4 client" and map the revision control directory to somewhere on your local machine.

      So your previous company may have done something foolish that you are now blaming on Perforce.

      I've worked with 5,000,000 line source trees in perforce and it is extraordinarily fast. It integrates to virtually every IDE and Editor out there, and it has a fantastic command line if that is your tool of choice.

      It works on many many platforms, including the usuals (Window$, Linux, Solaris, Mac OS X, BSD, etc.)

      Perforce's strength is that it makes it really easy to branch and then merge.

      So if you work with a lot of developers, and you need to do parallel projects, Perforce is incredible at this.

      It's definitely worth a look.

    4. Re:go with Perforce by davester666 · · Score: 1

      Yeah, way back, Perforce didn't version clientspecs. And it still doesn't by default. But since about 2002 or so, they've supported a separate 'spec' database, that if an administrator created it, Perforce would populate it with branch, client, depot, group, and user changes.

      What I couldn't believe is that subversion couldn't track branch points. The end-user had to manually 'remember' which revision of each file was branched from to aid in merging later. Sure, some clients added their own support for tracking this info, but it sure is nice that Perforce does that all for me.

      Haven't used git, so I can't compare it with these.

      I even use Perforce at home, using the free 2-user license.

      --
      Sleep your way to a whiter smile...date a dentist!
    5. Re:go with Perforce by chrysalis · · Score: 1

      Even before Subversion 1.5, the svnmerge.py tool just did this.

      --
      {{.sig}}
    6. Re:go with Perforce by mevets · · Score: 1

      I've only worked at one shop that used it, and it was awful.

      Most developers would keep a shadow workspace that they worked from. When they were ready to sync, go to the actual one, p4 edit the diffed files; manually copy the new versions over top; p4 sync; repeat as necessary. Pretty much defeated the point of it.

      I was new and tried to use it as intended, but it had no whims about clobbering anything it didn't understand, so its bugs were disastrous.

      It was fast; though I could have saved half my workspace if it had been a bit slower.

    7. Re:go with Perforce by ThePhilips · · Score: 1

      Whose bright idea was it to make the clientspec an unversioned artifact?

      ClearCase has the same sickness.

      We have periodic breakages since people routinely use wrong config_specs or simply make a typo there.

      CC's dynamic views are no solution and even ten people compiling something in parallel overload one server very easily. And the fact that dynamic view doesn't allow you to select what to have in the view (you have always whole repo - like ... WHOLE F***ING REPOSITORY) is another plain suckage.

      --
      All hope abandon ye who enter here.
    8. 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.

    9. Re:go with Perforce by SanityInAnarchy · · Score: 1

      The only thing distinguishing the commercial VCS tools now is their integration with the likes of project management and issue tracking tools

      And it's my guess that Ditz will change all of that, when it's mature enough to actually replace the existing tools.

      It already has one feature I haven't found anywhere else. Not that it doesn't exist, but that I doubt it could be done this well:

      Since Ditz is stored as simple text files inside git (or bzr, or whatever, even SVN if you like), this means that changes to the Ditz repository follow development. Which means that your ticket workflow automatically matches your development workflow.

      It means that, for example, it's possible for a ticket to be marked resolved, but only within a given branch. The statement claiming the bug is fixed would follow the fix itself.

      Which means that you get (for free!) a comprehensive list of new features in a given release, a comprehensive list of known bugs, even a kind of poor-man's roadmap. And you get this information simply by tagging the release, no need to mess with whatever your issue tracker calls "milestones" or "versions" (separate concepts in Trac, for some reason).

      --
      Don't thank God, thank a doctor!
    10. Re:go with Perforce by SanityInAnarchy · · Score: 1

      Yeah, it works.

      About as slowly as it is possible for it to work, and still be faster than copying and pasting those changes by hand.

      We use SVN 1.5... with -r and --ignore-ancestry. In other words, we use it exactly like SVN 1.4.

      This also doesn't give you any less conflicts, it only saves you from looking up the versions. That's significant, but it's not enough. Most of us are running git-svn branches, now. A full conversion to Git seems inevitable.

      --
      Don't thank God, thank a doctor!
    11. Re:go with Perforce by Dr_Barnowl · · Score: 1

      In-tree file-based issue tracking isn't unique, BugsEverywhere does it too, and you can do it with at least one of the commercial offerings.

      And of course, it intrinsically works with any VCS that can version the files, not just git.

      What I really want to see is an in-tree tracker with a Mylyn bridge.

      Thanks for the link to Ditz though, I'm reviewing these things at the moment for an internal project.

    12. Re:go with Perforce by John+Betonschaar · · Score: 1

      Seriously, I know it works for projects with 1 developer or less, but for any collaborative effort perforce is the worst SCM system I've ever used. I'd even prefer CVS over it if I had the choice. I'd even go as far as saying P4 is possibly the worst SCM system on earth, it has absolutely zero advantages over SVN (granted, it has some over CVS but thats 20 years old), but at the same time it has multiple disadvantages _for every simple SCM task you can think of_.

      To summarize:
      - Cannot sensibly work offline because even p4 help requires a network connection
      - Checks out files read-only which evokes chaos if you want do check some small hack fast
      - Need to p4 open to be able to edit the file, if you forget and changed the code without opening it, perforce will happily send all your work to /dev/null and update to the depot version
      - Even the most simple operations require either a) several distinct p4 commands or b) gobbles of shell commands (try adding a directory full of files: 'find . -type file | xargs p4 add', what did I get an SCM for again??). Command-line use without the visual client (which is pretty much ok for what it does btw) will take so much time and specialist p4 knowledge you might just as well do all your SCM by hand.
      - The brain-dead idea of having host-bound 'client workspaces'. Why the fsck do I have to recreate and/or switch client workspaces on every machine all the time, by hand, by free-form editing some file the perforce server apparently needs to store somewhere for me to work locally
      - All state on the server, after a good month's work every developer will have 10 different clients, half of which are dangling and created by accident (and are near impossible to delete)
      - Branching and merging: don't even try to do this (p4 calls it 'integration') because you are guaranteed to screw up, you need 20 different commands to merge from one branch to another
      - Every file that was opened by another developer while you were also working on it will be marked as a conflict, even if you didn't change a single character. In practice this means every time you submit code that has been under development you will be resolving half of the source files you edited.
      - There is no way to easily see which files have changed from the CLI. Even from the visual client it is impossible to see which files have local modifications but aren't 'p4 open'-ed. Major headaches if you tried doing some work offline and changed files you want to check-in later.
      - P4 is agonizingly slow, don't believe a single word of the performance statistics you'll find on the p4 site, if you're working off a LAN or WAN, the network latency will kill p4 performance if you have a large tree
      - It already screwed up and nullified changes I made on multiple occasions, and typical SCM tasks that take me 5 to 10 seconds in CVS or SVN sometimes take 10 minutes on P4, just because _it sucks so much_.
      - You have to shell out good money to use is commercially, while literally 10s of better, faster, portable, interoperable systems are readily available for free.

      I'm seriously suspecting you either never used P4, only used it for a single-developer project or are actually employed by perforce.

      Disclaimer: I've been working as a professional software engineer for over 10 years, and in the mean time used CVS, SVN and now (sadly) perforce (which I'm forced to use by my employer). My

    13. Re:go with Perforce by Anonymous Coward · · Score: 0

      Sure, it did ...incredibly slowly.

    14. Re:go with Perforce by John+Betonschaar · · Score: 1

      Astroturfer...

      Making a client spec is super easy. Type "p4 client" and map the revision control directory to somewhere on your local machine.

      Make sure you don't mess up free-form editing the file, don't misspell the (sometimes over 200 characters long) directory mapping, don't forget to change the word 'locked' to unlock in the spec, don't forget to unset the environment variable 'P4CLIENT' before you do, and yes, it's pretty easy. Now try changing hosts if you're doing cross-platform development and presto, you can do it all again. And again if you go back to the previous host.

      I've worked with 5,000,000 line source trees in perforce and it is extraordinarily fast.

      Until you go home or try to work off-site and are bound by a 10Mbit connection.

      It integrates to virtually every IDE and Editor out there, and it has a fantastic command line if that is your tool of choice.

      Fantastic command line?? You actually just made me laugh. Yeah it's fantastic the CLI cannot add directories, cannot move files in a single command, cannot branch or merge with less than 5 distinct commands, tries to use a different naming convention for everything all other SCM systems already have (the same) names for etc.

      Right now my P4 visual clients repeatedly does a

      p4 change -o
      p4 client -o jbijlsma-krypton-brion-vhv
      p4 changes -s pending -l -u jbijlsma -c jbijlsma-krypton-brion-vhv
      p4 fstat -P {15 items}
      p4 depots

      Just to check which files have been changed on the server... Brilliant...

      It works on many many platforms, including the usuals (Window$, Linux, Solaris, Mac OS X, BSD, etc.)

      So does almost every other SCM on earth.

      Perforce's strength is that it makes it really easy to branch and then merge.

      Again, this makes me laugh, If anything, branching and merging is one of the worst things about perforce, because it offers 100 different ways to screw up.

      So if you work with a lot of developers, and you need to do parallel projects, Perforce is incredible at this.

      Incredible at marking all your source files in conflict that is, even when you only p4-opened them to quickly test a fix.

      Again, please mod this guy down, he's definitely an astroturfer

    15. Re:go with Perforce by flannelboy · · Score: 1

      Not even sure where to begin. But I guess I should start my response by qualifying how I've used Perforce, so that we can at least agree that I'm qualified to comment on it (which you assert I am not qualified to do).

      I use Perforce at a Fortune 500 company, with over 3000 developers on the system. My particular project spans Linux for the back end (approximately 5mm lines of code), and uses Windows on the front end (another 2mm lines of code). Our developers span the globe, from the West Coast of the USA, to New York, to London, to Hong Kong, Australia.

      So I think we can agree that I'm qualified to comment on the platform.

      I do not work at Perforce, never have, don't own shares, etc. etc.

      Quite a few of the arguments I see you have above are the religious ones - you'd prefer that your files are read/write 100% of the time. Perforce's model is that if you don't have the file checked out, then you can't touch it or change it. The reason it does this is that it wants to know exactly when you _started_ editing a file, so that that it can keep track of any changes that might come after you. Timestamps in the filesystem are not able to do this, so you have to tell revision control when you start editing.

      OK, so the religion of read-only takes some getting used to, and it's different than 100% writable files. But the idea is pretty simple - don't ever edit a read-only file. Check it out, then edit it.

      100% of the IDE integrations just do this for you, so if you are on an IDE it's pretty seamless. If you are in VI or emacs, you have to check the file out before you touch it.

      If you don't agree with that religion, p4 is not for you.

      Some of the commands you say are impossible are actually super simple, so let me clarify for anyone reading who wants to know how to do these things.

      - Host bound "client-workspace"

      This isn't true - just set the host to an empty string, and it works on any host.

      - All state on the server

      You'll have to let me know why this is a bad thing. So if you lose your local machine, you have EVERYTHING still in revision control? That sounds great.

      - Branching

      You state that branching is impossible and takes many commands, but that just isn't true.
      o Create a branch
      p4 integrate dev/... branchname/...
      p4 submit branchname/...

      o Merge between branches
      p4 integrate dev/... branchname/...
      p4 resolve branchname/... # resolve any conflicts
      p4 submit branchname/...

      - Every file that was opened by another developer while you were also working on it will be marked as a conflict

      Umm .. if you didn't change the file, then you probably never checked it out. If you checked it out because the read-only thing was bothering you, then just revert any unchanged files via:

      p4 revert -a ...

      - There is no easy way to see which files have changed from the CLI

      p4 opened ...

      - Slow

      I have to just plain disagree - given my project size, and the fact that we were on a WAN, it was very very fast. Our tree was enormous.

      - Nullified changes

      You don't really substantiate this with much information, so all I can say is that I haven't seen what you are referring to here.

      - Actions take 5 to 10 seconds in CVS take 10 minutes in p4

      Again, not much information here, but I've never seen p4 take time to do really much of anything. The only thing that can take a while is if you have to pull a 5 GB file over a slow network connection, then it's going to take a while in any revision control system. But that is just a network constraint, not a p4 constraint.

      - You have to shell out good money

    16. Re:go with Perforce by SanityInAnarchy · · Score: 1

      And of course, it intrinsically works with any VCS that can version the files, not just git.

      Of course. A DVCS is what makes it really shine, though.

      Thanks for the link to Ditz though, I'm reviewing these things at the moment for an internal project.

      I'd be interested to know what you find out. I didn't look beyond Ditz, because I didn't really know what was out there.

      --
      Don't thank God, thank a doctor!
    17. Re:go with Perforce by John+Betonschaar · · Score: 1

      Not even sure where to begin. But I guess I should start my response by qualifying how I've used Perforce, so that we can at least agree that I'm qualified to comment on it (which you assert I am not qualified to do).

      I use Perforce at a Fortune 500 company, with over 3000 developers on the system. My particular project spans Linux for the back end (approximately 5mm lines of code), and uses Windows on the front end (another 2mm lines of code). Our developers span the globe, from the West Coast of the USA, to New York, to London, to Hong Kong, Australia.

      .

      That's all very interesting but I already knew it is technically possible to use P4 for such things, but that doesn't make it a good system.

      So I think we can agree that I'm qualified to comment on the platform.

      I think we can agree I'm just as qualified since I also have to work with the thing on a daily basis.

      Quite a few of the arguments I see you have above are the religious ones - you'd prefer that your files are read/write 100% of the time. Perforce's model is that if you don't have the file checked out, then you can't touch it or change it. The reason it does this is that it wants to know exactly when you _started_ editing a file, so that that it can keep track of any changes that might come after you. Timestamps in the filesystem are not able to do this, so you have to tell revision control when you start editing.

      These points are religious for a reason, forcing read-only checkouts does not serve any purpose, and only leads to enormous local changelists which lead to conflict hell. The whole idea of having to 'open a file for editing' is ridiculous, because in practice working on software of even moderate complexity is almost never confined to files or directories but requires edits in multiple files. I don't even want to start giving use cases where the 'p4 open' system works against sensible software development and maintenance practices, just because there are so many of them.

      Also I don't see other SCM systems have any problems using timestamps or MD5 sums to track changes, the supposed advantage of P4 completely eludes me.

      100% of the IDE integrations just do this for you, so if you are on an IDE it's pretty seamless. If you are in VI or emacs, you have to check the file out before you touch it.

      Yes, brilliant, except for situations where you don't have or want the IDE (e.g. scripting the SCM). Or are tracking a nasty bug which requires adding debug statements in 10 different files _that you don't ever want to check in_. P4 gives you the choice of either a) opening each file as you touch it, creating a huge mess of supposedly 'modified files', which you can only revert file-by-file or b) just writing through the read-only bit using w!, creating modifications that will be nullified without any warning and without a backup option on the next p4 sync. Even worse is, without the IDE you cant even see which files you opened or edited.

      If you don't agree with that religion, p4 is not for you.

      You're right about that one

      Some of the commands you say are impossible are actually super simple, so let me clarify for anyone reading who wants to know how to do these things.

      Well try adding a directory or listing all changed files. Or checking who changed a particular line of code. Or reverting to a different revision and merging with a branch version.

      I just tried reverting a complete tree to the depot version by deleting all the files and syncing (reverting recursively is, again, not possible from the CLI). This works ok with P4, if you now you first have to edit your client and put a bogus path in it, then syncing, then editing the client again, reverting to the right path and doing another sync. There is no other way to do this, since p4 does not see your directories are empty, and will keep insisting 'all files are up-to-date. Nice going

      - Host bound "clie

    18. Re:go with Perforce by GolfBoy · · Score: 1

      I use the paid version of perforce at work. I would rather use _any_ other system I've had experience with. That includes cvs and svn, as well as, believe it or not, SourceSafe.

      Perforce is decent for merging. However, the model is incomprehensible; the terminology seemingly chosen by randomly selecting words from a dictionary. Perforce is designed for SCM and build gurus; not for the developers who actually have to use it. (For example; have I forgotten to 'p4 add' a file? Tough luck; no way to find out. 'svn stat' tells me just what I want to know.)

  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"
    2. Re:Integration in common tools by Anonymous Coward · · Score: 0

      I work for a 200 million dollar corporation that uses git for web devlopment, which kind of refutes the argument that git is not well suited for corporate environments. I just spent a couple years at a job where I used svn exclusively, and I loved it right up until the moment I started working with git.

      I admit that I probably only use 1/3 of the features of git, if that, but I find the workflow very simple. Even our css guy with a degree in business information systems has no problem using git.

    3. Re:Integration in common tools by Anonymous Coward · · Score: 0

      I work for a 200 million dollar corporation that uses git for web devlopment, which kind of refutes the argument that git is not well suited for corporate environments.

      oh come on! one instance of something doesnt refute anything. it barely qualifies as anecdotal. "I know a guy with 11 toes, which kind of refutes the argument that people only have 10 toes"

    4. Re:Integration in common tools by mcvos · · Score: 1

      I just spent a couple years at a job where I used svn exclusively, and I loved it right up until the moment I started working with git.

      I have exactly the same thing. I hadn't even heard of git three weeks ago (when I started at a new job), and while the bugs in SVN front-ends were annoying, I'd learned to work around them.

      But now I really truly love git. And github.

  9. Because... by Anonymous Coward · · Score: 0

    Because Subversion "Just Works".

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

    2. Re:Because... by waveclaw · · Score: 1

      Because I am the only developer or user of my code?

      Seriously, I really really like the model of GIT has for group development. But when by myself I can just cp filename.ext{,.bak} if I'm feeling lazy.

      And that is the key. I am typically the only developer on most of my projects. If I hadn't gone out of my way to learn to version control files on my own, I wouldn't have even known about it until my first real programming job. I still work with people who either use tape backup or the cp .1 .2. .old .bak to manage their files after decades as developers or sysadmins.

      FTA:

      Youâ(TM)d like to work on each of your 4 features A, B, C, and D independently and somewhat in parallel,

      And I already mastered branching using other VCSes. This is just Yet Another Version Control Syntax. (YAVCS? Sounds like a disease...)

      You start working on A and youâ(TM)re about 100 lines of code into it when you get stumped on a math function. The math wiz on your team is out for the day and youâ(TM)d rather not continue until you consult him. ...
      So now we can work smoothly between multiple branches without worry of the consequences of interruption.

      Working on my own personal projects means I don't have a 'math wiz' to ask...

      Git offers power by putting collaboration up front before commits are public for all to see.

      Most projects on sourceforge.net have 1 developer. But then most are essentially dead so probably not the best.

      To quote Linus Torvalds on Subversion vs Git:

      Subversion used to say CVS done right: with that slogan there is nowhere you can go. There is no way to do cvs right. No comments.

      Git is wonderful for group work. And if you are introducing version control to a group environment you can probably start out with it.

      For some of the solo developers, subversion is just CVS with nicer features and the old, familiar workflow.

      To quote Linus again:

      If you like using cvs, you should be in some kind of mental institution or somewhere else

      Ever hear the story about the sanitarium? It was for insane people only, so to be safe they had the contractor build it inside out.

      --

      "You cannot have a General Will unless you have shared experiences. You cannot be fair to people you don't know."
    3. Re:Because... by md27 · · Score: 1

      More explicitly, Subversion already represented a huge mental and workflow hurdle in getting people out of VSS. There would have been torches and pitchforks if we had tried to leap that far into the current state of the world. And no, fire all the people that don't get it wasn't an option. Also at the time, ~2 years ago, Git was just coming onto the scene. Maybe at some point in the future merging will cause enough pain to force our hand, but it's not on the horizon.

    4. Re:Because... by Anonymous Coward · · Score: 0

      Commit logs? Commit logs several years down the track?

    5. Re:Because... by caluml · · Score: 1

      cp filename.ext{,.bak}

      Wow. I've been using Linux for *mumble* years and I'd never seen that. How does that expand? (Save me reading the bash man page)

    6. Re:Because... by cerberusss · · Score: 1

      cp filename.ext{,.bak}

      expands to

      cp filename.ext filename.ext.bak

      Another perhaps more clear example;

      cp movie.{doc,odt}

      expands to

      cp movie.doc movie.odt

      --
      8 of 13 people found this answer helpful. Did you?
    7. Re:Because... by SanityInAnarchy · · Score: 1

      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.

      Probably not as easy, but I would imagine git is much less susceptible to that kind of problem. For one, every file, every commit, everything has a SHA-1 hash, and these are actually used internally to refer to things.

      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.

      Do it in stages. Our developers are slowly switching over to git-svn.

      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.

      Erm, WTF?

      sudo port install git

      That wasn't so hard, was it?

      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.

      Every checkout is a backup. As long as you don't have a simultaneous failure of your central server and every single development machine you have, you're fine. Not that it's any more difficult to backup a central server -- in fact, it's easier (git-clone to a remote backup server, or to a USB drive).

      5. Good tools exist that non-technical people can use to check things in and out of SVN on a variety of platforms.

      We don't have a problem where non-technical people are expected to directly check anything into the repository.

      --
      Don't thank God, thank a doctor!
    8. Re:Because... by SanityInAnarchy · · Score: 1

      I am typically the only developer on most of my projects.

      Sounds like a perfect candidate for a DVCS.

      I know that when I work on personal projects, I've been using bzr, or (more recently) git.

      I don't even know how to setup a brand-new SVN repository anymore. But I do know this:

      mkdir my_new_project
      cd my_new_project
      git init

      And it's ready to go.

      --
      Don't thank God, thank a doctor!
    9. Re:Because... by Anonymous Coward · · Score: 0

      3,

      > Erm, WTF?
      > sudo port install git
      > That wasn't so hard, was it?

      What happens on your system when you type 'sudo port install git'? Because I get

      Error: Port git not found.

      in response to that. Assuming you meant 'port install git-core', that produces a version of git that doesn't interface properly with the Eclipse git plugins on my machine, although it mostly seems to work on the command line.

    10. Re:Because... by SanityInAnarchy · · Score: 1

      Assuming you meant 'port install git-core', that produces a version of git that doesn't interface properly with the Eclipse git plugins on my machine, although it mostly seems to work on the command line.

      I've only used a Mac recently for a little over a week, so I'll assume you're right.

      I only ever used it from the commandline, and I don't remember it "mostly" working there. I remember it simply working, without exception.

      And the commandline actually isn't bad, when you don't have to consider #5.

      --
      Don't thank God, thank a doctor!
    11. Re:Because... by moonbender · · Score: 1

      So far, that's the neatest thing I learned from the whole discussion of the article. ;)

      --
      Switch back to Slashdot's D1 system.
    12. Re:Because... by caluml · · Score: 1

      Yep, I realised *what* it expanded to - echo foo{,.bak} showed me. What I was curious about was how? Does , within {} equal the thing that went before? It doesn't seem like any shell expansion I've ever seen before.

    13. Re:Because... by kelnos · · Score: 1

      Right now, it's a PITA to get git working under MacOSX.

      Really? If you don't mind installing MacPorts, it's as easy as 'sudo port install git-core' (1.6.0.2 in there right now, so it's definitely kept up to date). Fink probably has a package for it as well. I imagine it wouldn't be hard for someone to make an installer .pkg if they really wanted to. The lack of this isn't git's fault, it's just lack of interest.

      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?

      I could go either way on this one. SVN suffers from the same root "problem" -- if you don't commit code to the central repo, you risk losing it if your hard drive dies. But git also tends to encourage more "offline" workflows than svn does.

      Good tools exist that non-technical people can use to check things in and out of SVN on a variety of platforms.

      Yep, that's the thing that a lot of people have problems with. Git's IDE integration and GUI tools are almost nonexistent, and from what I understand is a bitch to get running on Windows (though you seem to have the misconception that it's hard to get running on Mac, so this could just be a misconception on my part).

      --
      Xfce: Lighter than some, heavier than others. Just right.
    14. Re:Because... by cerberusss · · Score: 1

      I guess you could say that, yeah. However I prefer to read the comma between the curly braces as a separator. But your description describes the algorithm better.

      A colleague of mine objected to this syntax, saying it's not orthogonal. However,

      echo {foo,bar,bak}

      also works.

      --
      8 of 13 people found this answer helpful. Did you?
  10. 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 Anonymous Coward · · Score: 0

      I use Subversion because I'm familiar with it. There's a cost to learning to use and admin a new versioning system, and while I honestly believe that Git is better, I just don't care enough to make the switch.

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

    3. Re:Neck and Neck by ignavus · · Score: 1

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

      What? You've never heard anyone tell you you're a git? Or that your relationships at the office are tantamount to subversion of the management?

      And clearly (to answer the OP) it is better to engage in subversion than be a git - it shows you have intelligence.

      --
      I am anarch of all I survey.
    4. Re:Neck and Neck by Anonymous Coward · · Score: 0

      Same here, although Git has eeked out a minor lead in the past 32.7 seconds with its slightly more humerous name.

      'Subversion' kinda gets my kinky on, so this could be a long term race.

  11. 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 MemoryDragon · · Score: 1

      Actually the main proble with GITs approach compared to SVN is. SVN means one central repo, GIT means every developer has a mirror of his local repo lingering in the net and devs pull from everywhere. In SVN the integration must basically be done on the fly by everyone committing, with build processes and continous integration servers trying to verify the project state being in order. GIT basically enforces the model of a central integration branch an and integrator doing the integration work all the time. This might be a feasable model for some, like it is for the Linux guys, but in many projects this is not viable. But git is flexible enough that you even can do the central approach, and I dont see any reason why not, the tooling is very flexible and definitely faster than SVN (with the downside of having a complete repo mirror on your local hd) The biggest issues GIT currently faces, simply is the lack of a decent windows port, neither cygwin nor mingw are ideal, the Windows port must be really native without any emu layer on top! And the lack of any tool integration into the major ides (VStudio, Eclipse, Netbeans, Intellij) while some integration is there, it is far from being really usable and in case of eclipse driven forward by one person outside of the Eclipse consortium! (Same goes for Netbeans afair, this is done also outside of Sun)

    2. 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
    3. Re:not 1:1 by hardaker · · Score: 1

      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.

      You might try SVK sometime if you get a chance. It's sort of in between SVN and git. It basically is a fancy wrapper around SVN that lets you syncronize with multiple repositories and do push/pull type operations to merge stuff together. I've used it extensively when traveling on a plane to work offline from a svn server and then push everything back in incremental chances once I get to network access again.

      In short, svk rocks. It's one big downside, though, is that it's slower in execution time. (since it doesn't need network access, diffs and logs and stuff are faster but the actual execution of the binary to do anything is a bit slower).

      --
      The next site to slashdot will be ready soon, but subscribers can beat the rush and start slashdotting it early!
  12. 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 32771 · · Score: 1

      Wow! Does that even work? I mean how do I enter binary codes into cat?

      I know this has to work somehow - I'll read the man page.

      --
      Je me souviens.
    3. 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.

    4. Re:Real programmers by pyrosim · · Score: 1

      I'm sorry, it's gotta be butterflies. There just isn't any other way.

    5. Re:Real programmers by cromar · · Score: 1

      Don't be a wuss. Develop mutant powers in a nuclear accident* and burn the pits into optical media with your newly acquired laser eye.

      *Some trial and error may be necessary.

    6. Re:Real programmers by CBravo · · Score: 1

      Yeah!

      And they use the sun and a magnifying glass to burn their DVD's.

      For BluRay you need to filter the light with a prism.

      --
      nosig today
    7. Re:Real programmers by dubl-u · · Score: 1

      For entering raw binary, start with stty's man page.

    8. Re:Real programmers by Anonymous Coward · · Score: 0

      MOD PARENT DOWN

    9. Re:Real programmers by undertow3886 · · Score: 1

      cat (base64 it in your head) | base64 -d > a.out

      --
      Sick of people knocking on Gentoo's greatness in completely unrelated .sigs? Me too!
    10. Re:Real programmers by Anonymous Coward · · Score: 0
    11. Re:Real programmers by nategoose · · Score: 1

      You don't even need to use cat

    12. Re:Real programmers by Anonymous Coward · · Score: 0

      http://xkcd.com/378/

    13. Re:Real programmers by 32771 · · Score: 1

      I had no luck with stty -istrip and unicode input. The reason is mentioned on the cat info page:

      "On systems like MS-DOS that distinguish between text and binary
      files, `cat' normally reads and writes in binary mode. However, `cat'
      reads in text mode if one of the options `-bensAE' is used or if `cat'
      is reading from standard input and standard input is a terminal."

      So if I enter something like Ctrl-Shift-U 00ff I only ever get 0x3f in the output file.

      --
      Je me souviens.
    14. Re:Real programmers by Isvara · · Score: 1

      A real programmer would realise that there's no point in the 'cat |' part of that.

    15. Re:Real programmers by Ian+Alexander · · Score: 1

      ian@ian-desktop:~$ cat | cc
      cc: no input files
      ^C
      ian@ian-desktop:~$

      I suppose this is from the XKCD school of programming? http://xkcd.com/303/

    16. Re:Real programmers by .tom. · · Score: 1

      Useless use of cat !

    17. Re:Real programmers by cromar · · Score: 1

      Hee hee.

    18. Re:Real programmers by David+Gerard · · Score: 1

      WORKSFORME on K-Unbuntu Leengux 8.10. What shell you using?

      --
      http://rocknerd.co.uk
    19. Re:Real programmers by 32771 · · Score: 1

      You are right. But he added a nice level of additional complexity to it with the base64 stuff. I'm grateful for that, and guess what nice quote I found on the base64 wiki:

      "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure."

      (http://en.wikipedia.org/wiki/Base64)

      Explains Slashdot well enough.

      --
      Je me souviens.
    20. Re:Real programmers by Anonymous Coward · · Score: 0

      You joke, but I once worked with a radar system that had a remote computer system, whereby the boot sequence had to be manually entered in binary over an HF radio link to allow the remote computer to start up.

    21. Re:Real programmers by Anonymous Coward · · Score: 0

      Don't make me bring up butterflies.

    22. Re:Real programmers by Anonymous Coward · · Score: 0

      Psh. Real programmers manipulate the local atoms of the region to adjust the magnetic fields in the area to set the bits of the executable on the disk manually.

    23. Re:Real programmers by JSund · · Score: 1

      Actually, real programmers use butterflies.

    24. Re:Real programmers by rikkitikki · · Score: 1

      I got the same thing:

      cc: no input files

      I tried bash and tcsh. I'm on Fedora Core 8.

      Funny thing is, i was just trying to remember the syntax for this earlier today. I was trying to determine whether my 64bit machine as LP or ILP. Shamefully, i broke down and wrote my code in a file and compiled that file. would've been nice to avoid that.

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

    26. Re:Real programmers by Anonymous Coward · · Score: 0

      Isn't there an emacs command for that? M-x laser-eye I think it is...

    27. Re:Real programmers by highways · · Score: 1

      Randall got it right...

      http://xkcd.com/378/

    28. Re:Real programmers by omuls+are+tasty · · Score: 1

      You didn't get your shipment of friggin sharks with friggin lasers attached either? Meh. Tough times.

    29. Re:Real programmers by Austin+Schuh · · Score: 1

      The obligatory Hello World.

      austin[1] carbon ~/
      $ cat #include
      > int main(int argc, int ** argv){
      > printf("Hello World\n");
      > }
      > austin[2] carbon ~/
      $ a.out
      Hello World

    30. Re:Real programmers by Anonymous Coward · · Score: 0

      That's so old school real programmers us cat > app.tgz

    31. Re:Real programmers by Anonymous Coward · · Score: 0

      Real programmers use a magnetized needle and a steady hand

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

    33. Re:Real programmers by Anonymous Coward · · Score: 1, Funny

      cat | dd -of /dev/hda

      Nuff' said.

    34. Re:Real programmers by moonbender · · Score: 1

      At least he didn't leave a blank before a punctuation symbol.

      --
      Switch back to Slashdot's D1 system.
    35. Re:Real programmers by Nicolay77 · · Score: 1

      Thank you, your 'redundant' post made the other posters put some NEW material, and that only happens once in a fortnight.

      --
      We are Turing O-Machines. The Oracle is out there.
    36. Re:Real programmers by xouumalperxe · · Score: 1

      You'd probably get away with cc -x c - and just using ^D to mark EOF.

    37. Re:Real programmers by harry666t · · Score: 1

      try this:

      while read l; do for i in `echo $l`; do echo -ne "\\$i"; done; done > a.out

    38. Re:Real programmers by dodobh · · Score: 1

      You use magnets? Real programmers use butterflies.

      --
      I can throw myself at the ground, and miss.
    39. Re:Real programmers by badkarmadayaccount · · Score: 1

      Look who's talking. REAL programmers burn the bits on the CD the customer receives with a magnifying glass.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
  13. Re:flamebait by arotenbe · · Score: 1, Offtopic

    Just for reference, it's the Slashdot users who add the tags, not the editors.

    --
    Tomato wedge sperm darts that are Republican.
  14. 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.

    1. Re:Windows & Documentation by MemoryDragon · · Score: 1

      Unfortunately yes, having Windows clients for development, some solaris AIX Linux or you name it OS for deployment is pretty much standard in the corporate world. If you are lucky you might get granted so much freedom that you are allowed to install a VM or a second partition, but most of the times you wont! Cygwin is a helper there, but a real GIT port as well as Eclipse integration would be vital for wider adoption!

    2. Re:Windows & Documentation by imbaczek · · Score: 1
    3. Re:Windows & Documentation by datadigger · · Score: 1

      Yes, msysgit is pretty fast on mswindows, but too bloated for my smallish projects.
      I prefer fossil http://www.fossil-scm.org/index.html/doc/tip/www/index.wiki

      --
      Aphorisms don't fix code. (Bart Smaalders)
  15. 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

    2. Re:Linus on Git vs CVS/Subversion/Bitkeeper/etc by Anonymous Coward · · Score: 0

      yeah but he's not linus. how dare you?

    3. Re:Linus on Git vs CVS/Subversion/Bitkeeper/etc by Zaiff+Urgulbunger · · Score: 1

      Thanks for that; it was very informative!

      One thing I found particularly interesting was that, as I understand it, the git client can checkout from CVS or SVN repos and commit back to them. So it occurs to me that it might make sense for the various gui-based scm clients to be built against the git-client library? So for example, if TortoiseSVN was built on the git-client, it would still be possible to use it with SVN (which given its name, would rather make sense!).

      Also interesting was that git also includes a CVS interface so "legacy" clients/users (Randals' words not mine! ;)) can continue to work with a git repository without changing anything.

    4. Re:Linus on Git vs CVS/Subversion/Bitkeeper/etc by otomo_1001 · · Score: 1

      I preferred James Bottomley's talk about git on LinuxWorld. It is a bit dated now that 1.5.X+ is out, but still a very good primer of how git works underneath if that confuses you. Also the poster before me mentioned Randal Schwartz's talk at Google, I recommend that as well.

      (Note, the player is flash based I believe.)

      http://link.brightcove.com/services/link/bcpid1138309735/bclid1213841149/bctid1213892271

  16. CVS all the way baby by i_ate_god · · Score: 1, Flamebait

    I'm not a fan of SVN. Use it at work, and I find myself missing things CVS does so well, like tagging and branching. Frankly, the features of SVN that are actually better than CVS seem more related to server management than to me, the programmer who needs source control.

    I admit, I've never looked at Git at all, I don't know how it compares to CVS or SVN, but I'm not planning on moving my personal projects out of CVS any time soon, sorry.

    --
    I'm god, but it's a bit of a drag really...
    1. 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!

    2. Re:CVS all the way baby by DerWulf · · Score: 1

      We use CVS at work mainly because eclipse had support for it inbuild for quite sometime and the only thing that *really* bothers me is that it doesn't handle deletion in terms of versioning. Aside from that I don't even know why I might need other source control ...

      --

      ___
      No power in the 'verse can stop me
    3. Re:CVS all the way baby by einer · · Score: 1

      I'm normally all for newer better systems, but I have to agree... CVS > SVN because of branching/tagging. I don't have a good, rational reason for thinking this, other than it works how I think it should and SVN does not. Perhaps my brain is calcifying (it is getting to that age), but I'm glad our shop never switched to SVN.

    4. Re:CVS all the way baby by nuttycom · · Score: 1

      Git makes branches actually useful. Repeated merges under CVS or SVN (well, perhaps not the latest SVN, but every one before it) are the stuff of nightmares, with changes conflicting with themselves all over the place.

    5. Re:CVS all the way baby by spottedkangaroo · · Score: 0

      I didn't see any particular reason to move from CVS to SVN either. The only reason I could see was support for directory changes. But they screwed up everything else.

      Give git a try. It's a big change and it's a frustrating first few days, but before long you're like: why didn't I try this before???

      (Hg is the same way, afaik, but I never tried it.)

      The only caveat is windows. If you work on windows, be prepared for a slow cygwin port... gaarh. Still worth it. CVS sucks, SVN sucks the same but different. Try git.

      --
      Imagine if you weren't allowed to use roads because a bus company complained about your driving 3 times. --skunkpussy
    6. Re:CVS all the way baby by Just+Some+Guy · · Score: 1

      I'm not a fan of SVN. Use it at work, and I find myself missing things CVS does so well, like tagging and branching.

      You have to be joking. Branching and tagging is so cheap under SVN that I actually do it now, and SVN support nice minor features like, say, renaming files and atomic commits. To the best of my knowledge, SVN is a strict superset of CVS.

      --
      Dewey, what part of this looks like authorities should be involved?
    7. Re:CVS all the way baby by dvice_null · · Score: 1

      Branching is what Git is about. I have never seen a system where branching would be so easy. Every time you start working with a new idea or fix, you make a branch and start working with it.

      But I found out that it is impossible to tell people what Git is about, you need to hear it from Linus to understand it (sorry MrFreezeBU for stealing your link, but I have seen it earlier and I think it really explains it well):
      http://www.youtube.com/watch?v=4XpnKHJAok8

    8. Re:CVS all the way baby by jhol13 · · Score: 1

      You really should look into distributed VCS, like Git. CVS sucks as a version control system as there is no way to atomically add changes to several files. Besides it has no comprehension of merge (neither does Subverion as of 1.4.X).

      Svn really does not need tags, you can use "copies" for that, they actually work better (but requires the user to obey unforced rules).

      I have used Mercurial and the merge just works, it makes everything so much easier.

      I have not used VCS, but in PVCS merging was just huge PITA, the system did not have the concept "merge" (if you made a branch there was no way telling the system there had been a merge. Sure you could run diff3/merge + commit, but in the VCS you would not see it).

      Even for one man projects distributed version control systems kick ass (two computers or merging or ...).

    9. Re:CVS all the way baby by i_ate_god · · Score: 1

      See, to me this is a non issue. Again, that's something a server admin would care about. I don't go poking and prodding through the repository directly, ever.

      --
      I'm god, but it's a bit of a drag really...
    10. Re:CVS all the way baby by eison · · Score: 1

      Latest release of SVN has improved branching/merging a good bit. You might want to look into it again.
      I still prefer Perforce, but it's expensive.

      --
      is competition good, or is duplication of effort bad?
    11. Re:CVS all the way baby by MemoryDragon · · Score: 1

      Ok lets compare things. CVS, you omit a tag command, CVS does basically a full copy on the server blowing your repo up to bigger dimensions. SVN tagging, you just do a hardlink into a tag folder, which costs a few bytes! Graphical tools basically tag via menu commands in both cases. By not using SVN however, you run into the issues of not having atomic commits, which means a commit which breaks up early, some network interference or something else, can hose your complete repository! Sorry to say that, but using CVS because you dont like how SVN treats tags is the wrong point of view. If you still do not like how tags are handled in SVN please switch to another system than SVN (Git, Mercurial etc...) but not having atomic commits can become really a problem!

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

    13. Re:CVS all the way baby by Wildcat+J · · Score: 1

      I disagree; SVN doesn't really have "tags" or "branches" per se. They're just conventions to make the migration from CVS easier, and implemented as copies (albeit space-efficient). The downside is that it's difficult to tell which version of a file exists in which tags, whereas CVS gives you that information. When you're managing a project that has multiple supported releases, it does come in handy.

    14. Re:CVS all the way baby by 0xABADC0DA · · Score: 1

      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!

      What I miss about CVS was that you could tag something and be done with it. With subversion you tag something by making a 'copy' of it and then that copy is its own 'entity' just like everything else, and you have to segregate it into folders that you just declare meaningful, like 'tags' or 'branches' or 'mytags' or whatever chaos. And if you use externals (shudder) you have to separately tag externals too, and ensure your tagged version uses the right external version. Until recently it was then a total PITA to not have your repository checked out dozens or hundreds of times because of tags (now it's just annoying to set the 'don't fetch this folder'). In CVS you couldn't 'see' what tags there were very easily, but that was a blessing and a curse.

      The biggest indictment for subversion is that it's taken them over what, 8 years?, to get rid of the mess it spews all over your filesystem as .svn folders. They are seriously annoying, confusing to people when they copy a folder and it's 'already' check in (but under the old path), and it's a well-known deficiency. The fact that the system is so inflexible that it's taken years to do something like this that should be simple tells me that their system is a dead-end. Hell it's taken years to get a simple flag that doesn't check out a subfolder recursively, and how easy is that?!

      IMO mercurial should be the future. Just open a source file at random and it's usually fairly obvious what's going on. So it's easy to modify, and easy changes get added in minutes instead of years. Maybe git will be the future, powered by Linus and his crew of wizards, but mercurial and git will be #1 and #2.

      Subversion does work, but if you're choosing a tech you might as well go with one that works and has a future.

    15. Re:CVS all the way baby by skeeto · · Score: 1

      Sheesh tagging and branching really is the weak point of CVS while SVN does both pretty well!

      To say Subversion is pretty good at branching is to say you are pretty good at sex because you know how to put on a condom.

      Subversion branching is easy, constant time O(1) operation, but the real work is in merging, which Subversion completely fails at. Currently, all merging must be manually tracked separately from Subversion itself. Branches are a last resort in Subversion, while they are commonplace in better equipped VCSs.

    16. Re:CVS all the way baby by barzok · · Score: 1

      Currently, all merging must be manually tracked separately from Subversion itself.

      Are you saying that the merge-tracking introduced in 1.5 doesn't work at all?

    17. Re:CVS all the way baby by etrusco · · Score: 1

      CVS doesn't "full copy" in any situation, it just adds a couple lines to each file. Sure it can get slow.
      A failed commit can give you inconsistent history, by it cannot hose the repository, period.
      OTOH I agree that the (infuriatingly obnoxious) way svn treats tags/branches is not a good reason to not use it. One just needs to keep in mind that tags "don't exist" in svn, you just "fake" it with a repository-side copy command.

    18. Re:CVS all the way baby by skeeto · · Score: 1

      Ah, I see 1.5 came out in June, which was after I stopped following Subversion's development. For at least a couple of years, they had been promising merge tracking was coming, so I assumed it was still just a promise. However, the version we use where I work, and will use for a long while still, is older than 1.5, so standard procedure right now is to just not branch.

      Thanks for pointing this out! I stand corrected.

      I really did love Subversion for awhile, especially once it freed me from the mess that is CVS. It was a huge improvement no doubt. However, moving to Git is that same huge leap of improvement, and, for me, looking back at Subversion from Git is like looking back at CVS from Subversion.

    19. Re:CVS all the way baby by barzok · · Score: 1

      However, the version we use where I work, and will use for a long while still, is older than 1.5, so standard procedure right now is to just not branch

      You could use svnmerge.py to get almost identical tracking of merges in pre-1.5 versions. IIRC, 1.5 will even use the metadata created/stored by this script.

    20. Re:CVS all the way baby by stevey · · Score: 1

      I keep hearing the argument that lack of atomic commits is bad.

      However I've used a bunch of revision control systems over the years (rcs, visual sourcesafe, sccs, cvs, svn, git, mercurial, darcs). I've encountered a bunch of problems in that time - but never once has a non-atomic commit caused me pain.

      Locks? Sure. Exponential times? Sure (darcs, I'm looking at you!) In short all kinds of issues have caused temporary, or extended problems but never once non-atomic commits.

      I know, rationally, that atomic operations are the right thing to have, but I wonder why people bring it up so often. Does it really cause people pain? Or is it just a religious argument at this point?

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

  18. Doesn't Matter by foo+fighter · · Score: 1

    It doesn't really matter whether you use git or subversion as long as you use vi as your text editor.

    --
    obviously no deficiencies vs. no obvious deficiencies
    1. Re:Doesn't Matter by Bill,+Shooter+of+Bul · · Score: 1

      I was thinking along the same lines. It certainly does remove some major points of emphasis for the second two points ( reducing the number of project files for an Ide, and extra file system work). But take another look in detail of the two workflows. It's looks like its just less painful all around to have a greater number of branches with Git. The only concern I would have would be file space. yes I know its cheap, but If I used git to its utmost branching potential , I think I'd fill up the drives pretty quickly.

      --
      Well.. maybe. Or Maybe not. But Definitely not sort of.
  19. git is distributed, svn not by Simon+(S2) · · Score: 1

    I use svn because it makes no sense for me to use a distributed repository for my code. I keep my code on one server, I have my local working copy and I work on that. I use it mainly to see why or when I made a particular change and that's it, so I have no reason to switch to git.

    --
    I just don't trust anything that bleeds for five days and doesn't die.
    1. Re:git is distributed, svn not by maxume · · Score: 1

      With a distributed VCS, you don't need the server. You can make a copy on another machine as a backup, but you don't actually need to run a server (or have one running somewhere).

      --
      Nerd rage is the funniest rage.
    2. Re:git is distributed, svn not by jeremyp · · Score: 1

      Why do you think not having a server is an advantage?

      If all commits go back to a central server automatically, then everybody with a network connection can see everything that has been committed (ACLs allowing of course). You don't have to worry about whether the developers' computers are switched on or connected to the network. All the information on the current state of the project code, branches etc is centralised in one place, which is a Good Thing for most project teams.

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    3. Re:git is distributed, svn not by maxume · · Score: 1

      Read the post I replied to. He is working on a one man project team.

      --
      Nerd rage is the funniest rage.
  20. 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.

  21. 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 Anonymous Coward · · Score: 1, Interesting

      I agree with you that bzr has most of the same features as git and a nice user interface.. And still, I don't think it matters. Every major open source project is switching to git. Because git is SUPER-fast (not just fast), and it has a greater mindshare and Linus is behind it. And the git user interface is being improved very fast, and its becoming more and more easy to use (without losing the power). I even heard Shuttleworth say that he would drop bzr completely when Gnome will to git (he said "if"..)

    2. 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.
    3. Re:Go with Bazaar by Anonymous Coward · · Score: 0

      I thought speed is the main *sore point* of Bzr? I have moved several smallish projects (between 1 and 100MB) from SVN and already missed SVN's speed. Just doing "bzr st" or most other commands need several seconds to complete, a far cry from "in a heartbeat" that Mark Shuttleworth often said.

      One of these days I'm going to move to GIT, just for the speed. But frankly, the speed thing hasn't annoyed me enough yet to bother moving again.

  22. 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.
  23. Re:flamebait by Emb3rz · · Score: 1, Redundant

    Unless, of course, you're an IE user (ow, stop, the tomatos they burn!) and you get scripting errors on every Slashdot page, thereby making it impossible to tag, metamod, or participate in the new beta index article voting feature.

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

    1. Re:Git and SVN by skeeto · · Score: 1

      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.

      Something very interesting about that is that Git clones generally smaller than the equivalent Subversion checkout. To see how these look, I made clones of several large project Subversion repos, including Freeciv (~15000 revisions) and Ruby (~36000 revisions), using git-svn, then did a "git gc" on it to pack it all together nice and tight. Cloning from Subversion is very slow so this can take a few days to complete. Next, I did a separate normal svn checkout.

      In all cases I looked at, the Git clone, which contains the entire repository in full, was actually smaller than the single revision Subversion checkout. And this was just with the default "git gc" settings. So, if someone is making a point that the size of the checkout is a factor -- probably assuming a repository clone will be bigger -- Git actually wins it.

    2. Re:Git and SVN by Dr_Barnowl · · Score: 1

      You're neglecting the fact that SVN keeps a full, pristine copy of the base revision locally in each working copy. This can actually be larger than the repository storage on the server in some cases.

      It depends on variables like your tree size and how many revisions are in it, and how many branches you keep going at once, but somewhere the lines cross over and DVCS systems start to win in terms of local storage as well, even though they replicate the entire project history onto your local filesystem.

      It's particularly telling if you have multiple branches going at once. On SVN, the performance of "switch" leaves much to be desired and it has some problems with renames and such, so it's more practical to just check out another working copy for the branch ; and another pristine set of base revisions.

      The metadata in SVN working copies is also spread across every folder in the tree and more than doubles the file count in that tree, which slows down recursive operations. It's also a PITA to avoid recursing through when you're scripting or searching.

      I'd try Bazaar because it's easier to learn than git and can also be used as if it were SVN (central server, update/commit cycle) in tandem with a more advanced DVCS workflow.

    3. Re:Git and SVN by PeterBrett · · Score: 1

      Gits biggest problems are: Almost total lack of tool integration into existing tools.

      The Emacs integration works perfectly for me!

      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.

      This is actually a good thing when you're on the train without internet access and you want to work out how a bug cropped up.

      The gEDA project switched to git almost two years ago (at my instigation), and the maintainer has said that he would never, ever go back to a centralized SCM.

    4. Re:Git and SVN by Anonymous Coward · · Score: 0

      I've done some Git/SVN benchmarking, and it's not uncommon for a full Git repository plus working copy to be _smaller_ than an SVN working copy.

    5. Re:Git and SVN by MemoryDragon · · Score: 1

      Gits biggest problems are: Almost total lack of tool integration into existing tools.

      The Emacs integration works perfectly for me!

      Seriously, if you are on emacs, vi, or textmate the integration probably is fine. However nowadays most developers use, either Eclipse, Netbeans, Intellij, or Visual Studio depending on what platform you are. None of those tools has a working integration of git, while several projects have been started regarding the integration it still is a long way. Git currently in its integration stage is where SVN was around 2003 with projects popping up left and right but none of them being in a working state already. Besides that SVN had one huge advantage upfront, the first integration which really worked was TortoiseSVN which made many people using windows to jump onto it even before SVN 1.0 hit the roads!

  25. 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 ]
    1. Re:similar thoughts by Jason+Earl · · Score: 1

      The size of the repository is not the problem in this particular case. Both git and mercurial assume that it is safe to have several copies of the object in memory at any given time. In other words your 2GB files are going to cause git and mercurial to bomb out with memory errors (unless you are on a really big machine, I suppose). From my own experimentation on a machine with 2GB of memory both of these systems can handle files up to about 500M before failing. However, with files above 50M both of these systems become slower than CVS or Subversion.

      The advantage of distributed systems is that they are far better at merging files. If you aren't merging files then these tools are probably the wrong tool for the job.

    2. Re:similar thoughts by Jerf · · Score: 1

      You should not use a "source control" system to store huge binaries. The reason why is right there in the name, "source". None of them can really handle that gracefully, nor should they. 2GB images are not "[program] source".

      I don't know what you should use, but "source control" is not it. You need an image management solution, which, being optimized for images, will probably have a ton of other useful features.

    3. Re:similar thoughts by Speare · · Score: 1

      But you see, the images (even the 2GB ones) actually ARE source materials. Panoramic projects can have 100 or more source images and several partial composites before the final composite step. And as I said, I also want recall of back versions without having to resort to filename distinctions. And while I agree that "image management system" sounds nice, I don't care about the viewing or thumbnailing or keywording. These files aren't just in one format, they are camera raw, jpeg, xcf, tiff, png, all kinds. I care about versions and branches and changes.

      --
      [ .sig file not found ]
  26. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

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

    1. Re:3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 0

      Trac can do the same things with git as it does with subversion. even displays the branches in a nicer way ;)

      http://trac-hacks.org/wiki/GitPlugin

      Windows optimization - i think - is a matter of motivation. linux developer who is comfortable with his environment has generally little interest in spending spare time to program blinky .net guis.

      Windows developers are asked here - windows users might even pay for it

    2. Re:3d party tools - Trac and Tortoise by malpingu · · Score: 1

      The latest releases of Trac support Git and Mercurial, too.

    3. Re:3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 0

      Have you checked out the Git Plugin for Trac?
      http://trac-hacks.org/wiki/GitPlugin/

    4. Re:3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 0

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

      Redmine - http://www.redmine.org integrates with most of the major scm's including git. After using redmine you soon realize how many features trac is missing.

      Tortoise is superb, the ease of use for many operations is unmatched by any commandline tool and the osx and linux tools just don't match up. Netbeans integrated svn, i've found is the closest replacement but still isn't as good.

    5. Re:3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 0

      Trac must live on the same server as the SVN host, a definite limitation.

      Redmine offers similar (and additional) features but allows multiple SCM support... Mercurial, Git, SVN, CVS, Darcs and others.

      Equally, Tortoise is fine for casual SVN usage, but Eclipse with Subversive or Subclipse offer far better project / repository integration. also since Eclipse is non-platform specific, it trumps Tortoise on every platform.

    6. Re:3d party tools - Trac and Tortoise by Anonymous Coward · · Score: 0

      Agreed with the integration of Tortoise into Windows, but also the similar SCPlugin for the Mac. It's difficult to train people to use git or any other command-line-only tool other than programmers or other technically oriented people.

      When you have a shop that has a bunch of different disciplines using SCM, the barrier to entry (training, etc.) is significant. GUIs and integration into existing products make a big difference in reducing the time to train. After all, you want them to use the tool, not to hand their shit off to someone else to look after.

      I'm a big believer in using the right tool for the job, but if you are unsure of what's the right tool, at least use one that you know can work for your situation. I think Subversion can be used by a wider spectrum of people with less training (& retraining). git is definitely suited to larger, distributed projects.

      Subversion works; git works, etc. Each have advantages. None are necessarily *bad* choices. Except maybe one that comes to mind (vss) ;-).

      (bait)

    7. Re:3d party tools - Trac and Tortoise by anomalous+cohort · · Score: 1

      I am curious about integrating with git. I know that there is plenty of support to integrate with Subversion. What does git provide in terms of integration? I am not talking about IDE integration, I am talking about continuous integration. Does Cruise Control work with git?

  28. Reasons Not to Switch by Anonymous Coward · · Score: 0
    • Subversion will use less space on indivual developer's computers disks.
    • Using a central server will give you an obvious place to go to for a system of record.
    • 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.
    • You don't use branching that much and can safely ignore the dumbest decision ever on the part of the subversion developers
    1. 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

  29. 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?
    1. Re:Does it matter? by thpr · · Score: 1
      ...and one of the biggest benefits you have in a long-lived project is the history. This is a huge burden to switching revision control systems.

      In switching you either:
      (1) Move the entire history from one system to another. This may not be possible, and if it is possible, will mangle references in all the docs, e-mails, unit tests, bug reports, etc. etc. etc. which refer to the revision number of a check-in
      or
      (2) End up supporting two revision systems, because you can't ditch the old one without destroying your software's history.

      Switching systems is expensive (and this isn't necessarily a dollar statement since both svn and git are open source)

    2. Re:Does it matter? by Jeff+Hornby · · Score: 1

      Sure, switching systems is expensive. But why switch? Most times I've seen people switch it was becasue they hired a senior tech who had a religious preference for one system over another, not because the new system would really create any real advantage (other than ditching SourceSafe, which is costly but highly recommended).

      --
      Why doesn't Slashdot ever get slashdotted?
    3. Re:Does it matter? by thpr · · Score: 1

      That was my point - I was just giving a different aspect to your point on differences being minor relative to other aspects of the team (that decisions to try to optimize something as minor as the revision control system can have huge unintended consequences). I'm astounded at how many people advocate "the newest thing", just because.

    4. Re:Does it matter? by bheading · · Score: 1

      It looks a bit like you're trying to summarize a very complex issue into a few soundbites.

      The biggest cost you're going to have with your source control package is the initial setup.

      This depends very much on the project. The initial setup cost of the SCM package will be pretty close to zero if everyone is using it from the start and is familiar with how it works.

      The costs of revision control depend very much on the system used, and how mature the software development processes and methodologies are (purchasing the tool, installing it, and sending an email around to say "use it" are not sufficient to create a stable SCM environment), and how well the tool integrates with those processes. I would say that Clearcase is an example of a system which costs very little when you set it up initially, but which will consume a considerable amount of resources to keep it running and make sure that people don't screw it up. Subversion and Mercurial are less expensive in that respect, but Subversion will creak on a very large project with lots of branching and merging, and the inability to track merges is a real downer for any serious project (although I know they've fixed it lately). Git is technically far superior to Mercurial or Subversion, but the learning curve and the complexity of the tool - some stuff should be obvious just isn't - will increase costs when people spend ages trying to work out what just happened, or how to do what they want.

      The tool that squares all of these circles the best, to me, is Bitkeeper. There is a cost, but once you understand the business case behind tools like this you will see that the commercial tools are often very cheap considering what they can do for you. Unfortunately, a lot of software development managers still regard SCM as an unfortunate nuisance that they are forced to deal with, rather than something that enables, complements, and enhances a smoothly run project.

      The idea that the initial setup of an SCM is the biggest cost is quite easy to disprove. Just visit a site where people have deployed Clearcase and they don't understand how to use it, and you'll see what I mean.

      The biggest benefit you're going to get from your source control package is going to be minimizing that cost.

      I'm sorry, but this remark is nonsensical. The biggest benefit from deploying a source control package is minimizing the cost of that deployment ? That makes no sense.

      There are many huge benefits to revision control. Change control and tracking, build reproducibility, automated merge management, parallel development, etc etc etc. Those are all things which save money and/or allow you to more easily manage large software projects which in turn allow you to compete. A poor choice in revision control can cause you to lag behind your competitors. It's a critical decision for a software project. It's different in the open source world, but since you're talking about people getting paid to write code I assume that is not what you are talking about.

      Choose any of the modern source control packages and just get on with what you're being paid to do: write code.

      Bad or ill-informed choices, particularly a choice based on the initial setup cost, will inhibit your ability to write code. But you are absolutely right if you mean that the tool should be essentially transparent, until the day comes when you need it's capabilities.

    5. Re:Does it matter? by bheading · · Score: 1

      (2) End up supporting two revision systems, because you can't ditch the old one without destroying your software's history.

      It depends on how you play it. Git is capable of importing CVS/SVN history. I've never tried it, but since CVS essentially has a linear development line for each branch I don't think this is technically difficult to achieve.

      If it's a commercial tool, it's not that hard to merge all your branches (resolving the conflicts is not important) and then write a script which exports all of your release labels/tags from your existing revision control system into a single flat history in the new system, and then recreate all the branches ready for development to resume.

      But it's certainly better to choose the right system up front. And I agree that it's a mistake for people to migrate without a long-term business case being made; but if that case is there, then there's no dispute.

    6. Re:Does it matter? by Anonymous Coward · · Score: 0

      I disagree. you obviously haven't used pvcs/merant.

    7. Re:Does it matter? by Mean+Variance · · Score: 1

      We are in the final evaluation processes of making a decision to replace VSS 6.0. It's a todo that has been hanging with the dev group (about 40 people) for about 7 years.

      It was always the switching cost (time cost, software cost where applicable) that blocked a full evaluation and decision.

      The final two contenders are Perforce and Serena Dimensions (based on PVCS, I think). We are now really forced to make a decision because VSS: is not longer supported, relies on a hobbyist to support the Eclipse plugin, locks files by default, gets corrupted.

      It's going to be Perforce because of some of the reasons mentioned by the posters. The shift for all the developers way of doing things is palatable. Git sounds quite interesting in how the distributed manner of work is designed. But it would require coders and CMs to come to a full stop to rethink our practices. Not going to happen.

      Perhaps it's possible in many other source tools, but Perforce translates all the file history from VSS without problem, at least for our setup of about 20,000 Java, XML, JSP and properties files.

      So in our case: all development in one building in Palo alto, 2 part-time CMs who are also doing bug maintenance - Perforce will most likely be it.

    8. Re:Does it matter? by Dr_Barnowl · · Score: 1

      I disagree immensely.

      You need to use the current generation of DVCS in anger and then go back to the old stuff and see how much you miss it.

      While the feature list isn't neccessarily that much longer than old stuff, a couple of things about DVCS don't just change the speed at which things happen, they change the way you work.

      Firstly, the speed of common operations is so much greater that things that were previously something you considered carefully before doing just become routine. When "status" takes less than a second to return, you don't think twice about doing it. But it's not just status that gets so much faster.

      Secondly, the most important feature of DVCS is branching. Branching is something that you avoid like the plague in older VCS ; you think carefully about it and avoid doing it. Why? Because the merging is so slow and painful. Merging in a DVCS isn't just fast, it's properly done too. Renamed a file in one branch and changed it in the other? DVCS copes. Merged a revision already? DVCS copes. It's not the 10 minute long process working out which revisions you need to merge, which ones have been merged already, and then unpicking the mess that happens after you do it. The merge takes a few seconds, and afterwards you have very high confidence that you only have to review files marked as conflicted. Couple this with a good set of unit tests and you can almost wave your merge blues goodbye.

      Because merging works so much better, branches become a useful tool instead of the "reponse to dysfunctional personal relationships" that one guy above thinks they are.

      Fix a bug? Make a branch for the fix.
      Test a feature idea? Make a branch.
      Have dysfunctional relationships? :-) Merge their changes in a staging branch, and test it before merging to trunk.

      Once you overcome your (justified) branch phobia from using older VCS, they make

      Aside from this ;

      • You intrinsically get a degree of distributed backup
      • Road warriors and commuters love being able to do everything they want to offline
      • Did I mention how much faster it is?

      You mention VSS. I have so many painful memories of using VSS I would fight tooth and nail to avoid the current incarnation, even if it was rewritten from scratch by a crew of top-notch VCS geniuses. VSS 6 was so painful to have to use that it could put people off VCS for life ; in what other VCS can you commit files in the future by setting your clock forward, and have it believe you - the file won't show up for other users until that future date (unless they set their clock forward too).

    9. Re:Does it matter? by dolmen.fr · · Score: 1

      But why switch?

      I have to work day to day with Serena PVCS Dimensions, which makes me regret my CVS days. After one year fighting, I still don't know how to get a diff with the previous revision and how to retrieve a copy of the repository from the command line. I was the CVS administrator on the previous project (30 developers in the team), manging tags and merges.

      My productivity on this project is 50x less due to this single "tool".

      Do I need to say more?

    10. Re:Does it matter? by fabs64 · · Score: 1

      As someone who's spent time as the "repo owner" and had to set aside DAYS for a merge. I humbly disagree.

    11. Re:Does it matter? by Jeff+Hornby · · Score: 1

      Exactly how often are you trying to get a diff? I don't think I've used that feature on a source control more than half a dozen times on any project I've ever been involved on. As for retrieving a copy of the repositiory I can't believe that there is any version control system that doesn't allow you to "get latest" for an entire source tree easily. That's one of the most important (and frequent) functions of a code repository.

      Are you sure that the problem isn't somewhere in the chair/keyboard interface?

      --
      Why doesn't Slashdot ever get slashdotted?
    12. Re:Does it matter? by dolmen.fr · · Score: 1

      Exactly how often are you trying to get a diff?

      A diff between my code and the latest revision in the repository: every time just before a commit. Because I want to check what I'm committing and I want to write in the commit comment exactly what I did.

      A diff between two old revisions: less frequently. But when it's easy and fast I use it quite often.

      As for retrieving a copy of the repositiory I can't believe that there is any version control system that doesn't allow you to "get latest" for an entire source tree easily.

      I wrote: from the command line. Look at this command line:

      $PCMS_BIN/dmcli -user $PCMS_USER -pass $PCMS_PASS -host $PCMS_HOST -dbname $PCMSDB -dsn $PCMS_NET8 -cmd "RELease" REL ${INTEG_PCMS_PRODUCT}:${INTEG_PCMS_RL} /BASELINE=${INTEG_PCMS_PRODUCT}:${BaselineRelease} /DIRECTORY=\"${INTEG_DIRECTORY}\" /DESCRIPTION=\"${RELEASE_NAME}\" /TEMPLATE=${INTEG_PCMS_TEMPLATE_REL} /EXPAND /OVERWRITE

      Do you find it user friendly?

      Are you sure that the problem isn't somewhere in the chair/keyboard interface?

      Yes. The PVCS developer are severly brain damaged. And the manager in the company who choose this product too.

  30. MOD PARENT UP by David+Gerard · · Score: 0, Offtopic

    *applause*

    --
    http://rocknerd.co.uk
  31. What about Hg, then? by Anonymous Coward · · Score: 1, Informative

    Mercurial is something of a halfway point between the ease of Subversion and the power of Git, with the added advantage that it works well on Windows and has both GUI wrappers and IDE integration.

    I use Git over Hg primarily because I *do* use the command line for everything (and Git's CLI is nothing short of excellent), but Subversion is just painful with any amount of wrapping.

  32. 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 slartibart · · Score: 1

      svn has no merge tracking. That's a pretty crucial feature. Leaving it out results in vast numbers of workarounds, extra procedures, policies, and headaches. Failure to follow these strictly results in a hopeless mess. Need I say anything else about svn? I haven't used git, but I hear it at least solves that problem.

    2. Re:I have considered Git but... by CaptSaltyJack · · Score: 1

      svn has no merge tracking.

      As of 1.5, it does.

    3. Re:I have considered Git but... by shellster_dude · · Score: 1

      Maybe that may be important to a lot of people. However, as far as I am concerned. Once a branch is merged, I no longer care about it's history. it is now a new feature, or a replacement in the main project. As a developer, that is all I need to know when I go debug or add new features.

    4. Re:I have considered Git but... by slartibart · · Score: 1

      Maybe that may be important to a lot of people. However, as far as I am concerned. Once a branch is merged, I no longer care about it's history. it is now a new feature, or a replacement in the main project. As a developer, that is all I need to know when I go debug or add new features.

      Yeah except you have to be careful to move to a new branch immediately after your branch is merged. You don't have to worry about that in git because branches are cheap and you can use a different one for everything.
      Also, in svn, forget rebasing. You cannot update stuff other people are working on, in your branch. svn has no way of knowing which changes you pulled in yesterday. You'll end up with a million duplicate blocks of code.
      Svn works great for this workflow: Branch, work, merge, new branch. If you want to do anything more complex than that, you're going to have a real difficult time because it won't track merges.

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

    6. Re:I have considered Git but... by slartibart · · Score: 1

      Ok ok so they finally added it. Now I just need to wait for all the servers I use to upgrade to 1.5 :)

    7. Re:I have considered Git but... by mabinogi · · Score: 1

      Other than the fact that it now does, the svnmerge tool has worked pretty well for me for the last couple of years.

      --
      Advanced users are users too!
    8. Re:I have considered Git but... by jonabbey · · Score: 1

      The 1.5 'merge tracking' is hardly a resolution. Subversion's approach is fragile, elementary, and when you look at the history of the project, you have no visible tracking of who merged what from where.

      Better than nothing? Yes.

      Acceptable? Decent? Laudable? No.

    9. Re:I have considered Git but... by Anonymous Coward · · Score: 0

      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.

      By that logic, why bother with an SCM at all? Central repository? Stick some tarballs on a file server. Revision history? Keep an archive of tarballs. Branching and merging? Create a new directory full of tarballs.

      Just because you *can* replace a missing feature with the lowest common denominator doesn't mean you aren't missing out on a load of efficiency and elegance~

  33. Comment removed by account_deleted · · Score: 1, Redundant

    Comment removed based on user account deletion

  34. Git isn't the only distributed revision control sw by Anonymous Coward · · Score: 0

    Consider also:

    Mercurial : http://www.selenic.com/mercurial/wiki/

    darcs : http://darcs.net/

    They all have their advantages and disadvantages. Yes, git is exciting, trendy, and (gasp!) Linus uses it, but distributed version control systems weren't born with Git and so there are other options to consider.

    I've used CVS, SVN, Bitkeeper, darcs, and mercurial on Linux and Windows machines. These days, I stick with SVN for very large projects and mercurial for small and medium projects as well as all my personal stuff that isn't shared with other developers.

  35. 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.
  36. Drag perforce out back and shoot it by Anonymous Coward · · Score: 0

    Seriously. I've been stuck using that turkey for several years now. Want to get all the changes people have checked in today? Hit the sync button and head out to lunch, because it's going to be an hour. Want to check in a decent sized (hundred files) changelist? Hit the checkin button and go for a cup of coffee. Want to check in a large (ten thousand files) changelist? Hit the checkin button and go home; if you're lucky, the checkin will be done by the time you come back tomorrow.

    1. Re:Drag perforce out back and shoot it by MaineCoon · · Score: 1

      Sounds like your server is slow and/or poorly configured.

      We use Perforce very heavily where I work, with multiple branches and a couple hundred users on the same server, and a 100 file sync is done in 10-15 seconds. Only time I would need to head out to lunch is if I was doing a fresh sync on an entire (10 GB) project.

      --
      Hunt your preferred prey at Aliens vs Predator MUD. Join the war at avpmud.com port 4000
    2. Re:Drag perforce out back and shoot it by c0p0n · · Score: 1

      Same here. Our source tree is around 2GB and it takes around 1/2h to checkout.

      There was only one time it took a long while to sync an already checked out depot, it was after coming back from a 15 day holiday, took 30 seconds to sync.

      That said, I'm a subversion whore. Not a big fan of p4, but it does work very well indeed.

      --

      Your head a splode
  37. IDE integration, ant tasks and windows tools by andy1307 · · Score: 1

    Eclipse plugin, ant tasks for builds and TortoiseSVN. Most developers I work with don't use command line svn.

    1. Re:IDE integration, ant tasks and windows tools by i.of.the.storm · · Score: 1

      Agreed. I'm working on a two-person project and I use eclipse and the other guy uses Oracle Jdeveloper, and both have SVN plugins. There is a mercurial plugin for eclipse, but not Jdev so it's not that much of an option. There is TortoiseHg but after using an IDE plugin using a Windows plugin is just icky. Yes, I do use Windows primarily, and for similar reasons that I use SVN- they both work for me and I see no major problems with them. I use Linux primarily in an academic manner (i.e. to learn about it), and while I'm comfortable with the command line I prefer IDE integration. I guess since I've only worked on a few projects, mostly 1 person or occasionally somewhere from 2 to 5, I haven't needed branching/merging.

      I guess my advice is just use what works for you, although it sounds like for most bigger projects DVCS is better. For this two-person project I was trying to research DVCSs, but couldn't really find much difference except for the fact that Git sucks on Windows. I would have used Hg but it seems like you need a centralized repository somewhere anyway, and I don't really understand how you're supposed to use a DVCS I guess so we ended up sticking with SVN.

      --
      All your base are belong to Wii.
  38. 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.

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

    1. Re:How about GIT vs Mercurial ? by Anonymous Coward · · Score: 1, Informative

      If you are in windows there isn't really much to compare: Mercurial simply works much better, has a much more active devel list (windows issues seem to be at the top of this list in getting solved quickest, windows support just happens) and is faster. On the other hand Git is buggy, has rather inactive windows development, poor integration into other windows applications and seems to have little support.

      On the *nix side of things, GIT and Hg are roughly equal (maybe with a slight speed and file size advantage to GIT). GIT does support more scenarios (like having an SVN server with GIT clients, something being actively worked on in Hg), but most of these are rather obscure.

      The mercurial nomenclature is much more similar to what you get in CVS/SVN than GIT is (though if you are looking for that, Bzr is much better still as by default it works just like SVN except that you cannot commit to a non-head revision). This means that the learning curve is smaller for Hg than for GIT (for example there aren't contextual labels in Hg, I didn't get that at first when I was using GIT either).

      --

      As far as I am concerned that means Hg wins.

      But if you are simply looking to jump on the bandwagon of DVCSs, Bzr is actually what you should probably look for. It offers the speed advantages of a DVCS (and many of the other advantages like everybody gets a backup), yet doesn't require you to really learn anything new. It is only when you are looking to embrace the distributed aspect where GIT and Hg shine.

      Note that this should not discourage you from learning how to use both (and trying to actively encourage GIT on windows development). Competition here is good and makes both projects better.

    2. Re:How about GIT vs Mercurial ? by MrRobahtsu · · Score: 1

      Git works great as a centralized server. We switched from CVS and the only problems have been Windows or GUI related.

      Mercurial is also great, but if you don't immediately break all ties to the past and go completely de-centralized be prepared for castigation and lack of support from the hg "community."

      Git considers centralised SCM a subset of distributed, and just one of the many workflows it supports.

      http://git.or.cz/gitwiki/CentralisedSCM

    3. Re:How about GIT vs Mercurial ? by Anonymous Coward · · Score: 0

      I have used SVN, CVS and now I use Mercurial (HG). Distributed is nice for disconnected operation -- I can check things in on the train, at work or at home, then push changes to a backup repository whenever.. I can create a branch just by making a copy of my working directory -- or by using hg clone.

    4. Re:How about GIT vs Mercurial ? by turbidostato · · Score: 1

      "The DragonFly project (...) 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."

      DragonFly is a cathedral-kind of project. It doesn't seem to make so much sense 'per se' allowing distributed development: "DragonFly" won't be what "lives" on Joe's repo nor on Matt's, but what "lives" in the central, blessed, copy so from a conceptual point of view only, it seems a centrally based SCM (CVS, Subversion, Perforce, etc.) is the way to go.

      On the other hand, a distributed SCM, if any, has the advantage that individual developers can work on their own, tracking their own changes (and, eventually, those of others "pegging" to their local branches) and decide when they are ready to commit to the blessed central repo (think of, say, that new experimental virtual memory manager that may or may not be accepted but it still will be quite a hard work or that petty "subproject" from a developer that is still on the "will see where does it end" stage). That means, I think, developers have the key for the "when", so they should push to the central copy whenever they are ready instead of being the cathedral the one to pull from them (pull... what?).

    5. Re:How about GIT vs Mercurial ? by PeterBrett · · Score: 1

      The gEDA project has been using git for almost two years, having migrated from CVS. Due to the maintainer of the project having very little time to spend on 'pulling' trees from the various developers, we chose to use a hybrid model, where authorised developers push the changes from their personal repositories into a single 'main' repository.

      The primary advantages we saw were:

      1. Changesets, to track changes occurring together (also available in SVN).
      2. The ability to give every developer a sandbox which they can work in privately, with very very cheap branches for trying out experimental stuff.
      3. Tools like stgit to massive improved the quality, clarity and organisation of patches being committed.
      4. Fully-featured offline working.
      5. Even those without 'commit access' can use all of the features of the SCM.

      We would never go back to using a centralised-model SCM.

      As far as git vs. hg is concerned: meh. Both have advantages and disadvantages, but to me they mostly seem superficial.

    6. Re:How about GIT vs Mercurial ? by Dr_Barnowl · · Score: 1

      If you have a Windows developer base of any size, you should also consider Bazaar. Both Mercurial and git neglect their Windows support ; git just because of the way it's designed, Mercurial has some fairly serious Windows-specific bugs that are a year old at least. I couldn't use Mercurial for my project because of one of them - it just couldn't commit my tree on Windows. Bazaar, on the other hand, has a fairly active effort going on to squash every Windows specific bug it has, and is easier to pick up than git.

    7. Re:How about GIT vs Mercurial ? by jonabbey · · Score: 1

      I think you can be sure that Matt Dillon is not developing Dragon Fly BSD on Windows. ;-)

      I looked closely at Mercurial vs. Git for Ganymede, but found that Git just seemed more energetic and well developed than Mercurial.

      Windows and Eclipse support is not adequate yet, but Git is really pretty simple under the covers, and people are working on it. I have no worries that Git will be a blocking factor for people wanting to use my (largely Unix-focused) software.

    8. Re:How about GIT vs Mercurial ? by jonabbey · · Score: 1

      You can absolutely do a central, reference repository with Git. Git goes so far as to allow gpg signing of tags, if you want to unambiguously 'bless' a particular release.

      We run a number of Git repositories here, one for each of our projects, and we have both a reference repository and then whatever repositories, branches, etc., we care for in our own workspaces.

    9. Re:How about GIT vs Mercurial ? by Anonymous Coward · · Score: 0

      Curious, but have you looked at the OpenCVS project OpenBSD developers are working on? Seems it's close to stable and some developers are already using it with CURRENT.

      Just wanted to throw that out there.

    10. Re:How about GIT vs Mercurial ? by m50d · · Score: 1

      You mean "per se". Peasant.

      --
      I am trolling
  40. 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 Anonymous Coward · · Score: 0

      Using the -a flag with 'git commit' is discouraged. It's mostly just there to help out people more familiar SVN/CVS. You should always be explicit with what you are committing.

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

    3. Re:Command line is easier by pthisis · · Score: 1

      Meh. If you do a "git status" and see that the 3 files you want to commit are the only changed ones, there's no reason not to use "git commit -a" rather than copying the filenames over explicitly.

      As long as you know exactly what you're committing, exactly how you spell the commit command doesn't matter.

      --
      rage, rage against the dying of the light
    4. Re:Command line is easier by SanityInAnarchy · · Score: 1

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

      Actually, on a decent SCM (like Git), or on SVN 1.5 or greater, you need exactly one 'blame' command.

      --
      Don't thank God, thank a doctor!
    5. Re:Command line is easier by Cyberax · · Score: 1

      That gives you just one level of history. IDEA allows me to navigate history to any depth. It's a very powerful feature, and it's not easy to replicate it without IDE support.

    6. Re:Command line is easier by SanityInAnarchy · · Score: 1

      IDEA allows me to navigate history to any depth.

      I believe gitk does this.

      --
      Don't thank God, thank a doctor!
    7. Re:Command line is easier by Anonymous Coward · · Score: 0

      The latest version of Ankh for SVN and VS2005 is actually pretty good.

      Also I had no real problems using the VS integration for VSS

    8. Re:Command line is easier by isorox · · Score: 1

      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.

      Vim is my IDE -- Ctrl-]/Ctrl-T to jump around tags, F2 gives me a list of files/functions, F5 compiles/runs, F12 (in perl mode) syntax checks the file, shift-F5 svn commit, F11 maps to a help function, etc

  41. To paraphrase Linus.... by Wee · · Score: 1

    Only wimps use source control. Real men just upload their important stuff on ftp, and let the rest of the world mirror it.

    -B

    --

    Ash and Hickory, straight-grained and true, make excellent bludgeons, dandy for the cudgeling of vegetarians.

    1. Re:To paraphrase Linus.... by Anonymous Coward · · Score: 0

      You are an idiot.

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

  43. svn or git by l3v1 · · Score: 1

    Most of the time support and ease of handling comes before smallish differences in features - some of which are still debatable, like "floating"/"stashing" changes. Subversion's support in Windows (tortoise, ankh, netbeans, etc.) and in widely used IDEs (netbeans and vs in the lead) is a _very_ strong point.

    --
    I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
  44. 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.
  45. Because it works by Alioth · · Score: 1

    We stick with svn because it works for what we do, and it works well. There's only two of us who are developers anyway, so the benefits of git aren't of any importance. There really wouldn't be any benefit on changing - svn does what it says on the tin, and what it says on the tin works very well for us.

  46. My own opinion (prob. very controversial) by jrothwell97 · · Score: 1, Interesting

    My own opinion is that version control systems are so mind-bogglingly difficult to use, I prefer to use a versioning file system and code packaged (occasionally) in tarballs. CVS/SVN are too clunky IMHO, and Git is only really usable if you happen to have a cloned version of Linus's brain nearby.

    Thinking about it, a versioning file system has all the features I need (source code branching and merging? just use cp) but that's my own opinion. If you're desperate to use a VCS, are using *nix (Linux, OS X, Solaris, etc) and feel brave, give git a try - it's speedy and flexible (but still mind-boggling). For speed on Windows, Subversion's a better option.

    --
    Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
    1. 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.
    2. Re:My own opinion (prob. very controversial) by imbaczek · · Score: 4, Funny

      cp sucks at merging.

    3. Re:My own opinion (prob. very controversial) by halfnerd · · Score: 0, Redundant

      cp(1) for merging? Are you nuts?

    4. 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
    5. Re:My own opinion (prob. very controversial) by jrothwell97 · · Score: 1

      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.

      I tend to keep comments on the revision history in text files or as comment blocks in the code themselves. It's a little janky, but it works, and dare I say it but I prefer it to dealing with ridiculous and fiddly SCM systems.

      --
      Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
    6. Re:My own opinion (prob. very controversial) by jrothwell97 · · Score: 1

      this is why we have FTP, timestamps and the touch(1) utility.

      --
      Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
    7. Re:My own opinion (prob. very controversial) by Prien715 · · Score: 1

      Timestamps let me know when a file was modified, but what if I want to know when line 64 of foobar.cpp returns 1 now where it used to (or so I thought) return 0? I can look at the timestamp, but that just tells me the last time the whole file was changed, not a specific function. Sure, I could go and look back at different tars of the files to see when it was changed, but that still never answers the question of why.

      Also, going back to foobar.cpp, let's say (this is an actual example from today at work), one programmer is working on the data access part of the foo object, and another is working on the graphics part. He uploads foobar.cpp via ftp, and then I upload mine, clobbering his changes.

      A real revision control system, by contrast, sees we both changed the file, and merges the code so that 80% of the time, it "just works". In the case of the other 20%, it lets me know there's a problem and shows me precisely where we differ.

      Again, if you work on a team concurrently working on the same set of files, I've never heard of anyone wanting to use anything else -- because it's precisely the problem the tool was designed to solve.

      --
      -- Political fascism requires a Fuhrer.
    8. Re:My own opinion (prob. very controversial) by ZerdZerd · · Score: 1

      cp works perfectly for merging my code. But other people complain for some reason.

      --
      I'm not insane! My mother had me tested.
  47. two points for svn by tclark · · Score: 1

    I'm using subversion today and I plan to switch to git soon. I can think of two main reasons to use svn:

    1. git doesn't work well on Windows;
    2. svn plays well with a lot of IDEs and similar tools.

    Neither of those points matter to me, hence the upcoming switch.

  48. Well by Anonymous Coward · · Score: 1, Interesting

    Reasons to NOT choose a DVC over another DVC:

    Baazar: Is really slow for big projects.
    Git: Very, very, very fast, but it sucks on Windows.
    Mercurial: Slower than Git.

    Now, use Subversion if you need a restrictive control system (permissions, etc.)

  49. Re:flamebait by MightyYar · · Score: 1

    With these new features, they eventually get legacy browsers working.

    --
    W..w..W - Willy Waterloo washes Warren Wiggins who is washing Waldo Woo.
  50. Tagging in SVN by Anonymous Coward · · Score: 0

    Why would you tag in SVN? Since I started using SVN, I stopped tagging code. Instead I just use the repository version.

    1. Re:Tagging in SVN by Anonymous Coward · · Score: 0

      We use a build system that puts the same tags amongst multiple repositories for a build where I work.

    2. Re:Tagging in SVN by MemoryDragon · · Score: 1

      You dont need them explicitely but it is a good style to tag, because then you can reference it quicker than without!

  51. 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...
  52. Look who you're asking by nsayer · · Score: 0

    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.

    You must be new here.

  53. Re:flamebait by Anonymous+Cowpat · · Score: 1

    And soon! The next installment of disagreemail is just days away!
    *wretch*

    --
    FGD 135
  54. Comment removed by account_deleted · · Score: 2, Informative

    Comment removed based on user account deletion

  55. 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.
  56. Re:my choice by dubl-u · · Score: 1

    Trying to make git within that model is just adding complexity without getting the benefits.

    Bless you for saying so.

    Last year I nearly had to murder somebody because he was pushing git for 6 guys in the same office producing a web site that released weekly. I agreed that git was cool, and were I doing a distributed project, especially an open-source one, I'd love to use it. But I just couldn't see the value for a bunch of guys who worked off of trunk, were on the same LAN, had exactly one version in production, and checked in between a few times a day and a couple times a week.

    If people feel there is a value for a team in that situation, let me know, as I'd love to hear about it.

  57. trac, anyone? by JoeMerchant · · Score: 1

    I've had a couple of small teams over the last several years, and we don't have a lot of time to mess around with managing the version control system. trac was an attractive (and free) project management tool with nearly 100% painless svn integration - living with both for over 2 years now, the only thing the system asks of me is to copy off the .tar'ed backups once in awhile, and I suppose I could automate that too...

    Never looked seriously at git due to team size (ranges from 3-6 depending on how you count...) and the utter painlessness of a trac-svn install. We did expend a few days effort to get trac-svn to run native under OS-X, but after that when it was time to set up a new system, we just got somebody's 10 year old PC and installed Debian and trac-svn on it, took less than a day and has worked like a champ ever since.

    The svn access tools under Linux/OS-X/Windows are also pretty slick and easy.

  58. hahahaha by Anonymous Coward · · Score: 0

    ...opposed to arguments based on obscure features that may get used only a few times ever

    you must be new here.

  59. Reliable and Idiot-Proof by natoochtoniket · · Score: 1

    The first feature of any source control system that matters is "reliable". A source control shall not loose source code. No exceptions.

    The biggest part of "reliable" comes from being "idiot proof". There should be nothing that any of my fresh-out new hires can do that can cause loss of code. And, teaching a new hire how to make a working branch and populate a project should only take a few minutes.

    Central backup is also a big part of "reliabile". If there is only ONE disk/filesystem that has to be backed up, we can mirror it and journal it, and back it up every night, with no problem at all.

    Code maturity is the third big component of "reliable". A source-control system that has been around for less than a decade might still have some important bugs.

    All those nifty features are, by comparison, not really very important.

    1. Re:Reliable and Idiot-Proof by mcvos · · Score: 1

      The first feature of any source control system that matters is "reliable". A source control shall not loose source code. No exceptions.

      The biggest part of "reliable" comes from being "idiot proof". There should be nothing that any of my fresh-out new hires can do that can cause loss of code. And, teaching a new hire how to make a working branch and populate a project should only take a few minutes.

      Central backup is also a big part of "reliabile". If there is only ONE disk/filesystem that has to be backed up, we can mirror it and journal it, and back it up every night, with no problem at all.

      So far, it looks like git is a perfect fit for you. Much better than SVN, which, while easier to understand, does allow idiots to fuck up your code.

      Code maturity is the third big component of "reliable". A source-control system that has been around for less than a decade might still have some important bugs.

      A source-control system that has been around for more than a decade can also have important bugs. And a younger system doesn't necessarily have bugs. Git is pretty reliable despite its youth.

  60. It's free, it's open, it works by pembo13 · · Score: 1

    SVN gives me cross platform client support, and there hasn't been anything that I wanted to do that I couldn't. So SVN for me. Does GIT support WebDAV?

    --
    "Thanks for all the money you paid to us. We've used it to buy off ISO among other things" -Microsoft
    1. Re:It's free, it's open, it works by diamondmagic · · Score: 1

      Does GIT support WebDAV?

      Yep (or read "pull"-only support with no WebDAV). Git supports SSH, it's own protocol, and the rsync protocol too. (Git isn't all caps unlike SVN)

  61. svn == unpleasant and maybe buggy by mkcmkc · · Score: 0

    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. Or, try making a branch without typing in the entire repository URL (assuming you even know it). Ugh.

    Subversion and Visual Source Safe are the only two version control systems that I've ever had repository corruption problems with, so I'm biased against these.

    For me, these days it's RCS or git for personal use, and git or CVS for group use, depending on the specific interaction pattern.

    --
    "Not an actor, but he plays one on TV."
    1. 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.

    2. Re:svn == unpleasant and maybe buggy by _dim · · Score: 1

      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.

      Just "svn info" gives you all the information.

      Or, try making a branch without typing in the entire repository URL (assuming you even know it).

      Just "svn cp foo bar" makes a branch of "foo" called "bar". Is that so enormously complicated? I fail to see your point. :)

    3. Re:svn == unpleasant and maybe buggy by osgeek · · Score: 1

      For example, cd into a working copy that you've never seen before and try to determine its exact repository URL.

      Is that a trick question? I always just use 'svn info'.

      The full URL references can be a pain in those situations where it's required, although the concept of branches as directory copies is so beautiful that I wouldn't want to give it up for some typing convenience.

      You can also eliminate the full URL references by just checking out the entire repo and using relative paths to the base of your repo.

    4. Re:svn == unpleasant and maybe buggy by ion.simon.c · · Score: 1

      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.

      ~ $ cd /usr/src/packages/liferea/liferea_stable/doc/
      doc $ svn info | grep ^URL
      URL: http s://liferea.svn.sourceforge.net/svnroot/liferea/branches/liferea-1_4/liferea/doc
      doc $

      Or, try making a branch without typing in the entire repository URL (assuming you even know it).

      ~ $ svn co -q svn://server/tools/trunk toolswc
      ~ $ cd toolswc
      toolswc $ svn cp . $(svn info . | grep '^Repository Root'|sed -e 's/Repository Root: //')/branches/tool -m "* New branch for slashdot!"

      Committed revision 5.
      toolswc $

      Subversion and Visual Source Safe are the only two version control systems that I've ever had repository corruption problems with

      What version of svn were you using?
      What repo backend?
      What sort of corruption happened?
      Did you contact the list and/or file a bug?
      (I'm genuinely curious here... repo corruptions caused by subversion (and not hardware failure) are a *REALLY* big deal and must be squashed.)

    5. Re:svn == unpleasant and maybe buggy by mkcmkc · · Score: 1

      Okay, mea culpa. That appears to be what I was looking for--not sure why I didn't see it before.

      --
      "Not an actor, but he plays one on TV."
    6. Re:svn == unpleasant and maybe buggy by CaptSaltyJack · · Score: 1

      No prob. :) I didn't mean to be snarky if it was taken that way, just being sarcastic. I actually had no clue if what you wanted to do was possible, but a simple "svn help" got me my answer pretty darn quickly.

    7. Re:svn == unpleasant and maybe buggy by mkcmkc · · Score: 1

      The full URL references can be a pain in those situations where it's required

      Yeah, for me it's a show-stoppingly bad.

      although the concept of branches as directory copies is so beautiful

      I guess I have not yet succeeded in wrapping my brain around it. It seems much more complex than git's model.

      You can also eliminate the full URL references by just checking out the entire repo and using relative paths to the base of your repo.

      Hmm. With git I can get away with having a copy of the entire repo because git was designed to do this efficiently. I'm a little dubious about this working with arbitrary subversion repos...

      --
      "Not an actor, but he plays one on TV."
    8. Re:svn == unpleasant and maybe buggy by mkcmkc · · Score: 1

      Just "svn cp foo bar" makes a branch of "foo" called "bar". Is that so enormously complicated? I fail to see your point. :)

      I guess I was thrown off by the Subversion book:

      And now the easier method of creating a branch, which we should have told you about in the first place: svn copy is able to operate directly on two URLs.

      $ svn copy http://svn.example.com/repos/calc/trunk \
                            http://svn.example.com/repos/calc/branches/my-calc-branch \
                  -m "Creating a private branch of /calc/trunk."

      Committed revision 341.

      There's really no difference between these two methods. Both procedures create a new directory in revision 341, and the new directory is a copy of /calc/trunk. This is shown in Figure 4.3, âoeRepository with new copyâ. Notice that the second method, however, performs an immediate commit. [7] It's an easier procedure, because it doesn't require you to check out a large mirror of the repository.

      At best this just seems really clunky.

      --
      "Not an actor, but he plays one on TV."
    9. Re:svn == unpleasant and maybe buggy by mkcmkc · · Score: 1

      ~ $ svn co -q svn://server/tools/trunk toolswc
      ~ $ cd toolswc
      toolswc $ svn cp . $(svn info . | grep '^Repository Root'|sed -e 's/Repository Root: //')/branches/tool -m "* New branch for slashdot!"

      Committed revision 5.
      toolswc $

      I see. The Subversion book seems to suggest that full URLs is the "easy" way (see sibling comment). This still strikes me as way more difficult than git or CVS.

      What version of svn were you using?
      What repo backend?
      What sort of corruption happened?
      Did you contact the list and/or file a bug?
      (I'm genuinely curious here... repo corruptions caused by subversion (and not hardware failure) are a *REALLY* big deal and must be squashed.)

      I should have said "working copy corruption" rather than "repo corruption", although in my mind they're virtually the same thing. This happened a couple of years ago and I don't recall whether I filed a bug report or not. Unfortunately, at the time I was too busy to investigate and since svn was already rubbing me the wrong way, I just marked it down (fairly or not) as another reason to stay away.

      --
      "Not an actor, but he plays one on TV."
    10. Re:svn == unpleasant and maybe buggy by mkcmkc · · Score: 1

      No, I didn't take it badly. Actually I'm quite glad for the information. I'm a little less negative on using SVN now, though I still would not choose it in most cases...

      --
      "Not an actor, but he plays one on TV."
  62. Depends on Control Issues by Anonymous Coward · · Score: 0

    A while ago, I read this great post from thoughtbot on the issue. I tend to agree with them. Subversion makes sense for client projects and other propriety projects you need more control over. Git is great for OS projects. http://giantrobots.thoughtbot.com/2008/4/15/moving-to-github

  63. Re:my choice by vinnyjames · · Score: 1

    We got around the central server by using wandisco's multisite product. They have a high availability solution as well but we wanted to have local read/write speeds at all our locations.

  64. 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.
  65. Mercurial, for now, seems a better alternative by WamBamBoozle · · Score: 1

    False premise. Mercurial, for now, seems a better alternative. It has wonderful integration with windows (TortoiseHg) as well as eclipse. It is very fast and featurewise equivalent with git.

  66. branch/merge by Vornzog · · Score: 1

    A distributed vcs can do *everything* a centralized one like svn does, but does it better, does more. You'll find yourself doing things with it that are *possible* with svn, but so painful that you would never actually contemplate doing them.

    I personally cannot think of a reason to start using svn at this point. If you are currently using it, stick with it if it works for you.

    For any new project (and some old ones) a distributed source control tool is going to be just plain better. The majority of the gains come from the ease with which you can branch/merge/otherwise alter your local copy of a repo.

    When I use svn, the code has to be right before I check it into the central repo, which means I don't keep any version history locally. This sucks if I make any mistakes.

    With a dvcs (I use mercurial personally, but git is fine), I keep a much more constant history, try out crazy ideas with a branch, merge three or four branches to get all of the new features into one place, almost without thinking about it. All of this happens locally - no need to push it to a central repo.

    The most common complaint about dvcs is that they aren't centralized. This is just a question of workflow - a dvcs allows you to impose your workflow on your codebase rather, than your vcs imposing it's workflow on you.

    Your project needs a central repo? Fine - just designate one. Clone it, branch, merge, do a little dance, and push your changes back. Need more control over your project? Don't allow pushes - only pull once someone's local repository passes your unit test suite.

    Because it is so much easier to get started and keep up with, I find myself versioning almost all of my work. It takes very little effort, and has saved my bacon a couple of times. I'd never have tried anything on this scale with svn, for fear of having to kill myself.

    --

    -V-

    Who can decide a priori? Nobody.
    -Sartre

    1. Re:branch/merge by Anonymous Coward · · Score: 0

      Is merging really any easier with git? We are going through a process right now where one developer is doing a major sweep over our code base, fixing inconsistencies and doing some big refactoring.

      If you have any files checked out for any longer than necessary, you're in for a bunch of pain when you go to commit and find you need to spend the next couple of hours resolving conflicts. The rule right now is commit early and commit often.

      Would life be any easier with git? (we're using subversion)

    2. Re:branch/merge by mcvos · · Score: 1

      Is merging really any easier with git?

      It's trivial. Git merges everything automatically.

      I think the only time git doesn't know how to merge is when two developers have changed the exact same line of code. That sort of thing always requires human judgement, but git comes with a host of merge tools that will help you. However, when people commit (and push) regularly, git will usually figure it out on its own without ever bothering you with something as trivial as merging code.

      Git can also deal with refactoring and moving code to different locations in the project.

    3. Re:branch/merge by Jack9 · · Score: 1

      GIT problems -

      - IDE Integration/Tools
      - Traceability/Unified access control

      A distributed vcs can do *everything* a centralized one like svn does, but does it better, does more.
      Wholly inaccurate. Being able to do more does not mean it can do it better. There are many different needs for a VCS and GIT does not serve them all. Independence isn't a PROBLEM for most development groups. Some organizations aren't at all conducive to this style of "freedom" which isn't helpful to commercial or government organizations (works great for OS I guess) which sacrifice all kinds of efficiency for the ability to backtrace actions.

      You get the expected problems with "automatic" merges from untraceable sources.

      http://kerneltrap.org/Linux/Tracking_Down_Merge_Errors_With_git

      Fortunately, these issues should be fixable if the right people care enough.

      Unless DVCS were to store every keystroke related to project files, there's a small difference between wanting to push to a local or central repo (outside of network issues and creating the brach on the central repo). You're functionally notifying different machines. All in all there's not a compelling reason to move to a DVCS unless you need it and I see very few cases where that's true. Even Linus mentions he acts as the kernel central repo although he espouses the fact that it doesn't need to be.

      It's human nature to seek and understand organizations as hierarchichal and there's not much chance of anyone changing that for a long time. I'll stick with what other developers implicitly understand.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
  67. Re:my choice by Anonymous Coward · · Score: 0

    Yea, I know GIT is distributed, but it's easier to manage subversion with the one main server.

    Everyone that worked with ruby probably heard of github by now, which actually defeats the purpose of distributed versioning, yet I think it's still popular not because git is so fast, but because svn is that slow.

  68. Mercurial by russotto · · Score: 1

    Mercurial has the distributed features svn lacks, and the actual usable interface which git lacks.

  69. Git all the way by turgid · · Score: 1

    This is all you need to know.

  70. CVSNT by BitZtream · · Score: 1

    I know a lot of people don't like CVS and I can understand why in many cases. Most of the problems I had with CVS were solved by using CVSNT instead. Mind you I work in a relatively small shop with just a few developers, but CVSNT does make CVS a lot more like SVN as far as basic features. It still depends on talking to the server for practically everything which is a problem in an environment that isn't always connected to the server, but for me if I'm not connected to the servers network, development becomes a pain for other reasons so its not that big of a problem.

    I've discussed the differences between SVN and CVSNT with many diehard SVN supporters and I've run into to major problems. First off, they seem to be fanboys in a lot of cases, which results in me going into fanboy mode as well and most of the time makes the whole discussion absolutely pointless. Second is that most people can't accept that CVSNT has dealt with a lot of the problems of CVS and continue to think of CVSNT as CVS.

    As always, your milage may vary, and if you are in an environment where your developers aren't always connected, subversion and git are both probably better choices reguardless of feature sets when compared to CVS/CVSNT. In our case, its rather nice to be able to use CVS to talk to our version control servers if they don't have CVSNT (or svn or otherwise) installed, and the various tools that will work with the cvs binaries will continue to work for the most part with the cvsnt binaries, the only one I've had problems with is cvsmonitor, which I love, but don't love enough to patch it to work with cvsnt properly so you have to do some hacks while setting up a new project so that it thinks you're using regular CVS long enough to get started, then you can switch to back to using the cvsnt tools. This is mostly because we use SSL connections (sserver) to talk to our cvsnt server which cvsmonitor does not like at all during the setup phase of new repositories.

    Just my two cents, which probably wasted more of your time then this post was worth.

    --
    Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
  71. Why I don't use Subversion by Black+Art · · Score: 1

    Subversion is built around the notion that you meant to do that. Someone checked in their entire hard drive to the repository by mistake? they meant to do that! Getting it out now involves rebuilding the whole frikin repository.

    It also does not deal well with large projects. I tried checking in about 25,000 stored procedures. It became glacially slow.

    There are also some interesting bug that occur if two people add the same file from two different machines in the same tree. (Working from the same tarball, for example.) Both can add, but only one can check in. The one who checks in second gets to hack on the metadata before he can check in again.

    Subversion is much better than CVS. Git is much better than Subversion.

    I would repeat a quote from Linus Torvalds about Subversion, but it would trigger to many work-place profanity filters.

    --
    "Trademarks are the heraldry of the new feudalism."
    1. Re:Why I don't use Subversion by mcvos · · Score: 1

      Subversion is built around the notion that you meant to do that. Someone checked in their entire hard drive to the repository by mistake? they meant to do that!

      Some guy in India actually did (almost) that. He checked his My Documents folder into our SVN repository.

  72. SVN GIT in my use case... by jesset77 · · Score: 1

    When CVS ruled the world, I found it complicated and had certain problems with it: but aside from that loved it and version control in general.

    When SVN became available, it's like someone read my mind. It kept everything I loved about CVS, and fixed everything I hated. Coupled with the awesomeness of TortoiseSVN for my windows workstations, I simply have no complaints with SVN. Anything I want to do can be done simply and I've never hit a roadblock.

    Keep in mind I use Linux CLI and Windows GUI. If you depend on Linux or Macintosh GUI, then you probably lack a tool like tortoise. If you are on Mac you probably love Textmate's GIT integration.

    Finally, my use case is different. I entertain one or at most two experimental "branches" of code at a time, and with no need of collaboration so they are really just local working copies. I am able to commit them to full fledged branches and even merge via SVN with ease but rarely need to. Other developers on my team (there are only 3 of us) tend to keep their experimental code in working copies as well.

    I would imagine GIT shines when you don't want a central repo, you spend inordinate time coding with no net connection, you don't use windows, you do use textmate, and/or you have 100 developers distributed around the globe each entertaining 1,000 branches at a time with every branch needing peer review in triplicate before anything touches the trunk. If that paragraph describes you then huzzah, I wish you and git well. But if you are a small team on one or many small projects and need to function reasonably well in Windows environments, git isn't the right fit.

    --
    People willing to trade their freedom of expression for temporary entertainment deserve neither and will lose both.
  73. Go with Mercurial or Bazaar by Morth · · Score: 1

    Well, you asked for opinions, and here are mine:

    Go with either bazaar or mercurial. There's not really any reason to consider subversion any more, and frankly I find git too weird to be usable.

    Bazaar and mercurial are very similar and both have command sets that seem based on subversion. Bazaar has two nice features that Mercurial lacks: It can work with a central repository, very similar to subversion, and it has launchpad.net, which is a very nice project site. If you don't need either of those features I'd go with Mercurial though, since it's quite a bit faster.

  74. Re:flamebait by Anonymous Coward · · Score: 0, Informative

    Hey, just be glad it's tech related and somewhat interesting. If I see another slashvertisement, "OMG! copyrights are teh evil!1" or "Big brother is coming!1" story, I'm going to puke.

  75. 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 CarpetShark · · Score: 1

      Agreed, but Git seems to be unusual in that regard. Most of the other distributed version control systems are more intuitive to me than it would be to have a bastardised system of a central repo with modern workflows shoe-horned into it.

    3. 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.
    4. Re:Exactly. Use a solution for modern problems by Raenex · · Score: 1

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

      "a little flakey" in a version control system? That's a death sentence.

    5. Re:Exactly. Use a solution for modern problems by israfil_kamana · · Score: 1

      Tell that to 90% of my Fortune 100 customers. I'm not arguing... I'm just saying that if you're right, the dinosaurs are taking a long time to die.

      --
      i - This sig provided by /dev/random and an infinite number of monkeys at keyboards.
    6. Re:Exactly. Use a solution for modern problems by SanityInAnarchy · · Score: 0

      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.

      In many ways, the Git model is simpler than SVN.

      You're right, it's more moving parts, but once you've got the fundamentals, the rest of it (like rebase vs merge) seems obvious.

      --
      Don't thank God, thank a doctor!
    7. Re:Exactly. Use a solution for modern problems by si618 · · Score: 1

      "No one in their right mind should be even thinking about so-called tools like SVN these days."

      Oh yeah, I can just see our non-developers loving the Git command line over TortoiseSVN.

      Hint: Version control isn't just for developers.

      "The days of big central mainframes which hold the One True Source Code Repo are long gone."

      That's hilarious, we have SVN running on a Win2003 server (VM image) with only 384MB of memory, and it runs very well. Our repos are multi-GB jobs, not TB sized like some I've read about, but svn and inparticular svnserve are very efficient. The DC is in Toronto and half the team are on the other side of the world, yet we somehow manage.

      Hint: Check out the repositories on apache.org or sf.net.

      Sounds like you're a student, my free advice is if you try and force that kind of attitude when you have a job in a company, you will be head-butting brick walls in no time.

      Simple fact is SVN is the most versatile, reliable, easiest to use (when you include clients like TortoiseSVN) cross platform open source SCM tool available today.

      --
      Sometimes I doubt your commitment to Sparkle Motion
    8. Re:Exactly. Use a solution for modern problems by richlv · · Score: 1

      i was reading the tutorial into git for svn users, and it seemed understandable to me ;)
      what i saw as a large svn strength - ability to checkout only parts of a repository. imagine a repository that has several large directories, but most users would ever want only one.
      with git, you'd have to carefully plan and make each of these directories a separate branch - and i'm not even sure that would work so well :)

      also, git seems to be very, very source code centric - it was even mentioned that changing a binary file a bit (like slightly changing an image) can make it's history split because git wouldn't recognise it as the same file.

      --
      Rich
    9. Re:Exactly. Use a solution for modern problems by mcvos · · Score: 1

      what i saw as a large svn strength - ability to checkout only parts of a repository. imagine a repository that has several large directories, but most users would ever want only one.

      In git you'd have to make these several different projects, I guess. And I think you can have another project include all of these so the people who want everything can get everything, but I've never done that.

      I agree that this seems to be one SVN feature that git lacks, and I used it a lot when I was still using SVN. On the other hand, the main reason I used it is because checking out and synchronising large projects could get pretty slow. Git is much faster (on unix at least), so that reason may not be very relevant anymore.

      also, git seems to be very, very source code centric - it was even mentioned that changing a binary file a bit (like slightly changing an image) can make it's history split because git wouldn't recognise it as the same file.

      Could be. Binaries are definitely a bit trickier.
      To get git to handle them the same way it handles source files, you'd need proper diff tools for binaries, and considering some binaries use a lot of compression, I'm not sure that can ever work.

    10. Re:Exactly. Use a solution for modern problems by CarpetShark · · Score: 1

      Depends how little. Bzr has worried me once since it hit v1.0. Granted, that was enough of a death sentence to make me switch. I'm not convinced it's wholly unredeemable yet though, and does have lots of good qualities that make it worth checking out --- maybe even branching and fixing if necessary.

    11. Re:Exactly. Use a solution for modern problems by CarpetShark · · Score: 1

      You sir, cannot read. Learn to read, then reply.

    12. Re:Exactly. Use a solution for modern problems by CarpetShark · · Score: 1

      Sorry, that was a flippant and unnecessary response, which I would never normally make. It's been a long day. Please ignore.

    13. Re:Exactly. Use a solution for modern problems by ZerdZerd · · Score: 1
      You need to be a genius to know a few commands?
      • git init
      • git add <files>
      • git commit -a
      • git push
      • git pull

      Pretty much all you need. Start being a genius today!

      --
      I'm not insane! My mother had me tested.
    14. Re:Exactly. Use a solution for modern problems by mcvos · · Score: 1

      Well, today I got to learn:

      • git checkout -b foo
      • git show-branch
      • git pull someoneelse master
      • git reset --soft

      And more generally: how to safely stash away my incomplete code in a branch so it won't show up in version history, without throwing in away my hard work completely. And also how undo (and safely stash away) my recent change that conflicts with a really big pull, in order to get git to merge automatically rather than have me do it by hand.

      None of it is hard once you know it, but it's not trivial or intuitive either. It is in the man pages, and you may need to experiment a bit in order to figure out what the man pages mean, because documentation, while present, is not great.

    15. Re:Exactly. Use a solution for modern problems by si618 · · Score: 1

      No worries mate, SVN gets a bad rap sometimes and I think the developers have done an awesome job given where they're coming from (a compelling replacement for CVS), so I stick up for it! :)

      --
      Sometimes I doubt your commitment to Sparkle Motion
  76. 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.

    1. Re:RCS os OK for very small projects by dkf · · Score: 1

      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.

      I used to do that, but it has one big problem: all it takes is one person who doesn't believe in releasing locks, and everyone else is SOL. CVS (which can also be operated serverless) doesn't have that problem, and it can manage multiple directories at once. (Yes, there are fancier systems, but what there isn't really is a reason to keep on using RCS directly.)

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
  77. Re:my choice by smallfries · · Score: 1

    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?

    --
    Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
  78. Lack of incremental checkout in git by Anonymous Coward · · Score: 0

    The main reason why I stick with Subversion is that git can't do incremental checkouts, which means that you always have to clone the complete repository. While this isn't that bad for text files, since git can compress them down good enough that the end result isn't much bigger then just the current version, it is pretty bad for binary files, since there isn't much compression that can be done andthings quickly get really huge. Also with Git you don't have the option to just download a single directory, so having a media repository for a game where people only checkout what they really need doesn't work. Both of this combined basically makes Git unusable for managing binary files.

    On the plus side Git is very good for in-place repositories, i.e. when you want to manage a directory with Git you just type 'git init' and are done, with SVN you have to copy stuff around, check it in and its all very cumbersome to add version tracking to a directory after you already created it. This feature of Git makes it a great RCS replacement for config files and other stuff.

  79. Exclusive Locking by Anonymous Coward · · Score: 0

    Subversion allows exclusive edit privileges.

    I am envious of you who working in this mystical land of mergeable data.

  80. Re:my choice by goose-incarnated · · Score: 1, Insightful

    A "simple text editor" dev environment stopped being useful or productive back in the 90s.

    /. Posters Say The Darnedst Things

    --
    I'm a minority race. Save your vitriol for white people.
  81. Maven Integration by paulsnx2 · · Score: 1

    I have been using SVN for couple of years on my current project (and I don't know how many years on other projects).

    I started running GIT on the side in order to such changes from the open source components so I could make the open source changes available outside the proprietary project I get paid to work.

    So I have SVN and GIT running side by side on a Windows system for work. I have a linux system that is used for the open source development outside of work.

    Conclusion: SVN is way, way, way slower. On windows. Git is way, way, way faster than SVN, almost instantaneous. On Windows.

    But I can't get the company to move to GIT. Why?

    Maven integration. Maven doesn't talk to GIT.

    JIRA integration. I don't think JIRA talks to GIT (but I haven't looked at it as much).

    Eclipse Integration. Now this one I don't understand. But it matters to other people on the team.

    GIT Downside: It took me a weekend to learn it. Stupid stuff setting up a repository on repo.or.cz, getting Putty to provide keys and crap. Nothing I can't document and make easy for someone else, but a pain in any event.

    SVN Downside: It really is slow. Tortoise is a wonderful thing for Windows Integration. However, it remains true that one has to constantly clean one's trees, and we have spreadsheets in our project (don't ask! Please!) and Excel locks horns with SVN if you are not careful to kill Excel first, etc. etc.

    I would like to use GIT. It is wonderful. But the issues above are killers at work.

    On my own and for projects I manage, I will use GIT with a SVN publishing face for consumers.

    If that ever happens.

  82. Why is 'sticking with SVN' an issue? by ishmalius · · Score: 1

    People should use the tool that best supports their productivity. If it is Git, then fine. If Subversion, then also fine. The loaded summary makes it seem as if misinformed or misguided people are resisting the moral imperative to move to Git. Leave the Bolshevism at home. Actually, I have moved a couple of projects from SVN to Mercurial rather than to Git, since I think that Hg's better for my particular needs.

    1. Re:Why is 'sticking with SVN' an issue? by OrangeTide · · Score: 1

      It's not about fandom, and is about exactly what you said. But what you missed is that Git and Hg supports productivity better than subversion, cvs or rcs. Some will have to suffer short term pain (learning a new system) for a long term gain in productivity.

      If people don't care about long term productivity, then fine. That's cool, just be honest about it. Or if people don't agree that Git and Hg are going to have a positive impact on productivity. Then great, someone ought to point those out in a blog or make some sort of response to the wild claims that Mercurial and Git fans are making.

      --
      “Common sense is not so common.” — Voltaire
  83. 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
    1. Re:They don't exist by Anonymous Coward · · Score: 0

      There is no such thing as a "die hard" subversion fan.

      So I take it you haven't read any of the previous responses by SVN fans?

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

      So I gather you still do all of your development in assembler?

  84. Re:flamebait by thetoadwarrior · · Score: 1

    Well if you use a broken browser you get a broken site.

  85. Re:my choice by johanatan · · Score: 1

    There's nothing keeping you from using git and writing a script to pull code from each peer when it becomes available.

  86. Re:flamebait by cp.tar · · Score: 1

    Have you tried to report a bug? I know my browsers all work fine here; then again, I haven't used that Internet Explorer you mentioned for quite some time.
    Anyway, I'm fairly sure it's not the site, but the browser. Reporting a bug should get it solved fairly quickly, especially since proprietary software is developed in a significantly better-organized fashion, with proper quality control and teams of programmers devoted to stamping out bugs.

    --
    Ignore this signature. By order.
  87. my reasons by Tom · · Score: 1

    Here's why my projects use Subversion and not git. In no particular order, with no claim of absolute truth, this is just how I see it:

    • Subversion has a vast amount of support in other tools. You can plug the repository into Trac, for example, and have instant web-based changelog, source browser and can link to the code in your ticket system (and vice versa - few things are better when reviewing changes then being able to click on a link in the commit comment and be instantly transported to the ticket with the bug description). There's also SVN support in lots of IDEs, text editors, etc. and there's plenty of GUI frontends to pick from.
    • Lots of people know it, which reduces the time you spend teaching your developers a new tool. Those who don't know it will know CVS and it's similar enough to bring them up to speed in no time. Those who don't even know CVS you don't want near your code anyways. :-)
    • I'm used to it. Sounds like a small thing, but it means I can get a new repository up in less than two minutes. I can set up a subversion server from scratch (say, a fresh Debian install) in less than half an hour. I can do everything I need to do without having to look it up.
    • It serves my needs. While arch or git are more fancy and the concepts are very interesting, I've not yet found a compelling reason to switch.

    I guess it depends mostly on the last point - your needs. If you're Linus and you're writing a kernel, git is probably your best choice, because it was built with that in mind. If you're working with a normal team on a normal programm, Subversion is probably more suited because it was built for that. Anywhere inbetween - your decision. :-)

    --
    Assorted stuff I do sometimes: Lemuria.org
  88. Re:flamebait by caluml · · Score: 3, Informative
  89. Expunging commits is missing from subversion by nuonguy · · Score: 1

    I couldn't see any way to do this in subversion.

    We had someone commit a bunch of DVD .iso files to our repo, and I cannot figure out how to go back and permanently remove them from the repo.

    http://strongdynamic.blogspot.com/2007/08/expunging-problem-file-from-mercurial.html
    It seems mercurial can do this.

    When using CVS, I can just log onto the server and rm -rf the relevant directory. I really miss that feature in subversion.

  90. Support for Development Process by odysseus_complex · · Score: 1

    Instead of comparing features and quirks, what are the strengths and weaknesses of GIT/Subversion/etc. within development processes? What would fit better in, say, and SEI level 5 environment as opposed to an open source world like the Linux kernel or Apache HTTP Server? In an environment where you you must have a clear audit log, not just of the primary branch or release branches but even the development branches, then Git is going to lose out big-time.

    Doesn't exist? In a clean-room implementation you must be able to prove to code auditors that a feature or certain code path did not spring fully-formed like Athena from the head of Zeus.

    I'm not dissing Git, but this myopic discussion of "My feature is philosophically better than yours" is missing a whole range of areas of comparison.

  91. 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.
  92. 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.
    1. Re:Easy by d^2b · · Score: 1

      I don't agree that support for disconnected operation and merging is a "philosophical" issue, since it has a real positive impact on my one or two person projects. I know it sounds like a cult, but branch-and-merge is really really useful.

      I do think that (as a few other people have mentioned) that svn is better at being a distributed, versioned file system, just because it supports subtree checkouts.

  93. Re:my choice by gbjbaanb · · Score: 1

    I guess second that. I may be able to figure out Git command-line commands, but the sales guy who checks his documents into our SCM sure won't.

    Any serious SCM needs to have a super simple, intuitive, easy to use GUI. And IDE integration. And shell integration. And web interface. And webdav access.

  94. One point for distributed by beej · · Score: 1

    Here's one particular usage I'm not sure SVN can keep up with (or maybe it can--I've been out of the SVN loop)...

    I go on the road quite a bit for vacation, but sometimes work gets in the way. For the times I'm out of internet range for periods of a few days, (I know; what is this--the South Pole?) it's great to clone the repo to my laptop before I hit the road.

    That way I still get version tracking and branching and all that good stuff. I just push it back when I get a net connection. To be safer, you can always back up your local repo to a thumb drive or something.

    It totally beats just having a copy of your source files that you check back in later.

  95. Re:my choice by larry+bagina · · Score: 1

    It's kind of funny, isn't it? Git's 2 biggest advantages are that it's fast and it's distributed. And then people go use github which is neither.

    --
    Do you even lift?

    These aren't the 'roids you're looking for.

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

  97. Simplicity by Anonymous Coward · · Score: 0

    I don't think a 200-person project could possible manage with svn, but for up to say, 5 people, I just like the fact that it's simple and doesn't try to solve every problem. Revision numbers are simply increasing numbers that I have a good feel for, and there are only two versions I need to think about (working copy and repository) instead of 4+ (working copy, index, local repository and remote repository(s)).

  98. Re:my choice by mcvos · · Score: 1

    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.

    Git fails because of the lack of integration. Until it has that, it does not fit my needs.

    I love IDEs too (although I haven't found one yet that doesn't suck). I admit it would be nice if NetBeans would detect which files have been changed and which have been added (shouldn't be too hard to implement, I think), but beyond that, a command line interface works perfectly fine in combination with an IDE.

    What's more, it fails to start with because they didn't consider that in the first place.

    Yet people are working on integrating git with IDEs. And let's face it, the Eclipse plugins for SVN aren't all that great either.

  99. Word of the day by Anonymous Coward · · Score: 0

    milquetoast (n)
    sissy: a timid man or boy considered childish or unassertive
    wordnet.princeton.edu/perl/webwn

    Because I knew everyone else was just about to google it like I just did.

  100. Re:flamebait by Quartz25 · · Score: 1

    My caps lock key is wedged, you insensitive clod!

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

  102. What could I be looking for? by Deltaspectre · · Score: 1

    Recently I set up a subversion repository for hobby projects of mine and other general stuff that I wanted to access on several machines. The main repo is set up on my server.

    I've tried setting up GIT before, but it seemed overly complicated to get access to from all of my machines.

    So the question is, is subversion right for me? None of these comments have really addressed anything closet to my situation it seems.

    --
    My UID is prime... is yours?
    1. Re:What could I be looking for? by diamondmagic · · Score: 1

      I can't imagine why you would think it is overly complicated. Git is able to pull files in much the same way Subversion is, you can do it via HTTP, WebDAV, or a special Git protocol, as well as SSH and rsync. try "man git-remote git-fetch". Ideally you should have a "bare" public repo that you push to and that other people pull from, but that isn't necessary (that workflow is how Git is designed to work, and it does make life much easier).

      I have found that for hobby use you want to stay away from the centralized models, having the entire history sitting locally (and Git, depending on the history, often packs the entire repository smaller then a single SVN checkout) serves the purpose much better.

      (Yup my UID is prime ;)

  103. Re:my choice by mcvos · · Score: 1

    Last year I nearly had to murder somebody because he was pushing git for 6 guys in the same office producing a web site that released weekly. I agreed that git was cool, and were I doing a distributed project, especially an open-source one, I'd love to use it. But I just couldn't see the value for a bunch of guys who worked off of trunk, were on the same LAN, had exactly one version in production, and checked in between a few times a day and a couple times a week.

    If people feel there is a value for a team in that situation, let me know, as I'd love to hear about it.

    We're in exactly the same situation, and have recently become convinced of the superiority of git. I didn't even know git until 3 weeks ago (when I started working here), but now I'm a believer.

    Ofcourse there's also a disadvantage to using git: you have to be a genius to understand how it works. SVN is far easier to understand. But even then, it's hard to fuck up git, and easy to fuck up SVN.

    Read some of my other comments here for more details.

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

  105. There are more choices out there by Omnifarious · · Score: 1

    I would generally not choose git because I think it is harder to use than several other distributed SCMs based on a very similar model. It is true that last I checked git was faster than any other one, but there is one that is pretty close to git in performance and is much easier to understand and use, and that's Mercurial.

  106. Umm, github? by knewter · · Score: 1

    How is it that no one has mentioned http://www.github.com/ yet? Does any similar offering exist for svn? No need to answer, as it simply can't.

    GitHub is the bee's knees people.

    Re-reading my post, I realize I sound like a ridiculous shill. I'm not, I'm just a guy working on an open source CMS in Ruby on Rails (http://www.ansuzcms.com).

    Oh yeah, my company's new site is in progress at http://www.ansuzcms.com3000/ if anyone cares to let me know what they think of the design. The content's pretty much at nothing right now.

    --
    -knewter
    1. Re:Umm, github? by Anonymous Coward · · Score: 0

      yes, it's called google code

    2. Re:Umm, github? by MemoryDragon · · Score: 1

      Well also there is one thing called sourceforge and another one which is called java.net ;-)

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

  108. You can still have an opinion by EmbeddedJanitor · · Score: 1

    This is /. where knowledge and experience are not required, and almost frowned upon, when stating an opinion.

    --
    Engineering is the art of compromise.
    1. Re:You can still have an opinion by Anonymous Coward · · Score: 0

      This is /. where knowledge and experience are not required, and almost frowned upon, when stating an opinion.

      That's ridiculous! Also, what is "/."?

  109. Re:my choice by ibbie · · Score: 1

    A "simple text editor" dev environment stopped being useful or productive back in the 90s.

    Good thing that emacs and vim aren't "simple text editors". :D

    At least, not if you know how to use them.

    But I'm still a fan of the UNIX philosophy - a program should do one thing, and do it well. A great editor, a great debugger, and a great SCM tool - what the heck can't you do with that?

    --
    The wise follow a damned path, for to know is to be forsaken.
  110. Regarding mercurial and branches by Anonymous Coward · · Score: 0

    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.

    That bit about mercurial is actually not true. You can have multiple branches on a single repository, and switch between them easily:

    http://hgbook.red-bean.com/hgbookch8.html#x12-1650008.5

  111. Re:my choice by PeterBrett · · Score: 1

    Try checking a 500M file into git, mercurial or bazaar sometime.

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

    So when you check into SVN, it doesn't bother with the SHA1?

  112. Naturally by Anonymous Coward · · Score: 0

    If the Rails community is going to GIT, you better believe the long term best way to go is Subversion.

  113. Git "decentralized" by Tigris666 · · Score: 1

    I find it mildly ironic how often git is used as a centralized rcs given that it was built and marketed as decentralized.

    I only work in a team of 4-5 people and even we use it centralized, pushing your changes to a git server when you are done. I can't imagine working in a team where you had to constantly tell people you'd made a change and they needed to pull it.

    And don't even mention deployment, stuff like capistrano or something along those lines has to pull changes from somewhere. I'd rather have deployment mechanism pulling from a central server than the repo of whoever it was doing the deploying.

    --
    Kids, you tried your best and you failed miserably. The lesson is, never try. -- Homer J. Simpson
  114. git is dead before it started by Anonymous Coward · · Score: 0

    git is dead in the water and this post nothing but advertising tripe.

  115. git is a committment, svn is a date by OFnow · · Score: 1

    I spent a couple hours reading git doc and still did not understand how to do simple things. svn by comparison was trivial to bring up and use. Maybe it's just me. A decent set of documented use-cases is probably all I lacked, but why do I have to develop my own?

  116. Re:my choice by Anonymous Coward · · Score: 0

    The I in IDE is where the UNIX philosophy fails. Sure, simple and small programs are good. The problem is that not every task is simple enough to be solved by a single program. At that point those small programs get hard to use. And at that point a program that integrates all of them is handy. To make domain specific, common and complex tasks easy to do.

    Take for example refactoring. That is renaming of a variable or function. You could do that with sed. But imagine you do some OOP and you have two classes that both have a "foo" function. You soon realize that this name is stupid and you want to change it. But for class A you want to name it different from the name in class B. How would you solve that with sed?
    That is the point where you need a tool that has a quite good understanding of the language you are programming in. Even a syntax aware tool won't suffice. You have to parse the code to detect the correct functions you want to rename.

    I am no vim or emacs guru, and I don't want to become one to solve such a simple problem. And I have my doubts that vim or emacs could even do that, how do they even know which code files to scan? That might involve some find or grep and sed.

    The problem was easy, the solution should be easy, too.

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

  118. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  119. How Bazaar Has the Model Right by hitchhacker · · Score: 1

    How Bazaar Has the Model Right

    One of the points the article makes is that Git uses hashes to store blobs based on their content, whereas Bazaar uses UUID's based on content. The argument being that hashing algorithms are susceptible to being deprecated in the future. eg. recent MD5 collisions.

    -metric

    1. Re:How Bazaar Has the Model Right by Anonymous Coward · · Score: 0

      So according to the linked article, Git doesn't support rename, just like SVN? Aww, that's bad...

  120. Why Git is "hard to understand" by Anonymous Coward · · Score: 1, Interesting

    Git is easy to understand if you don't pretend its svn. People who work for me that didn't use SCMs before pick up on Git naturally and with ease. People coming from cvs/svn (like myself) had a harder time. At the bottom of understanding git is just having at least the slightest inkling of how it works, and that it is nothing like svn or cvs. Git is much more like having your own snapshotting file system per-project directory, and you do searches through your snapshots to look at the history of various strings and files. Git's initial implementation never even maintained per-file information of any sort (except the file content during a snapshot).

    My advice is use git, it will get fast on Windows (and currently isn't all that slow), and Mercurial is descent, but it doesn't do branching as well as git (try deleting branches) and _is_ slower where it counts. Seeing as git will get fast, and your repo history is going to stick around for a while, the transient state of git's performance in Windows shouldn't concern you that much.

    Mercurial is noticeably slower when doing recursive diff between repo versions, it is noticeably slower when doing merges. Initial checkin and checkout are file copies, so its no surprise that mercurial and git (and any descent source system) will go at roughly the same speed, but these benchmarks are useless to you (who cares how fast you can do a 'cp'?).

    See:
    http://www.infoq.com/articles/dvcs-guide#sectionbench

    In addition, not that you care now, but git's design is more likely to get file system support at some time, given how it works compared to mercurial (as I said, git behaves like a snapshotting file store).

  121. Definitely not Subversion. Preferably Mercurial. by Foresto · · Score: 1

    After using distributed version control for a very short time, I decided I will never go back to something centralized like Subversion. Only with a DVCS do I can:

    - Get work done, with complete repository access, anywhere. On a train. In the rain. In a box. With a fox. Anywhere, any time, even when the network goes down or while I'm thirty thousand feet above an ocean.

    - Create as many experimental branches/clones as I like, without making them visible to anyone else or cluttering up any shared namespace. (This is especially nice for capturing checkpoints when I have a lot of large, interdependent changes to make and the project won't work until they're all finished.)

    - Get perfect, complete, automatic repository backups as a side-effect of working on a project. It's as hassle-free as I could ask for, and restoring is equally easy.

    After quite a bit of reading, I ended up choosing Mercurial. After a year or so of using it regularly, and occasionally checking in on the other DVCS systems, I have always been glad of my choice.

    Git was a contender, but is notoriously non-intuitive and awkward to use, and has never been a good fit on Windows. (I try to avoid Windows, but some of my colleagues still use it, and some of our projects are necessarily cross-platform.) Mercurial is similar to git in design, features, and speed, and is also very easy to use and works well on every major platform. Linus even called it out in his version control rant.

    Bazaar was a contender, and I like their sponsor (Canonical), but didn't seem focused on performance enough for my liking.

    More points for Mercurial:
    - The folks on the email list are very knowledgeable, friendly, and helpful.
    - It is very easy to extend.
    - It has the blessing of some very large, high-profile projects. (e.g. Mozilla, OpenSolaris, Java's OpenJDK)

    To the git users who use the gitk GUI for browsing revisions, Mercurial has a clone:
    http://www.selenic.com/mercurial/wiki/index.cgi/HgkExtension

    To the user who posted about the Tortoise GUI for Subversion, here's a link for Mercurial's equivalent:
    http://tortoisehg.sourceforge.net/

    To the user who posted about Trac integration, Mercurial will work too:
    http://trac.edgewall.org/wiki/TracMercurial

    Also of note, Version Control Blog occasionally links to some interesting articles:
    http://www.versioncontrolblog.com/

  122. Funny... by lordsid · · Score: 1

    I've been trying to get my boss to convert from cvs to svn. Now I'm going to have to convince him to switch to svn and then git...

    --
    IMAGE VERIFICATION IS EVIL!
  123. When the server is down by chkn0 · · Score: 1

    When the subversion server is down, work stops.
    When the git server is down, work continues.

  124. Re:my choice by johanatan · · Score: 1

    You should watch some of Linus' talks on git if you still think that subversion works the way you 'want'. Subversion does not, in particular, handle merges very nicely (or even at all). And, there's nothing that subversion does that a properly configured git installation cannot do better. [Everything sv can do, git can do better!]

  125. The real question: Central or Decentral Versioning by gpinzone · · Score: 1

    The real question you should be asking is, "Do I want centralized or decentralized version control?" Unless you project involves hundreds of developers who are strangers to you, you don't need to go with a decentralized model. Linux is a special case that needs a decentralized version control system where changes are fed up through a chain of trust. Most projects don't need this kind of a model.

  126. Clueless users by Anonymous Coward · · Score: 0

    It is far easier to get clueless users using source control when they an easy-to-use and friendly client such as TortoiseSVN. I wouldn't even try to get the artists on my team to use the command line for anything, because they WILL screw it up. With TortoiseSVN, clueless users at least have a chance of using source control correctly.

  127. Migration isn't free by Anonymous Coward · · Score: 0

    Migrating from Subversion to one of the Distributed VCS's isn't free - it takes a bunch of time for someone to work out how to perform the migration without losing any history information, and then all of the current developers need to come up to speed on the new tool. Some development processes may also need to be adapted.

    It also isn't simply a question of "Should we move to Git?", but whether you should move to git or mercurial or bazaar or something else.

    So there's an upfront cost to pay in evaluating your options, and an upfront cost in doing the migration, and an upfront cost in reduced productivity as people get used to the new way of doing things.

    That all feeds into answering the basic question: "Is it worth the time and hassle?"

    If you only have a fairly small team doing commits and you don't branch often, then subversion + svnmerge may be an adequate solution. There's also the option of offering mirrors of the main subversion repository via other version control systems.

    Python, for example, is experimenting with DVCS's by mirroring the main subversion repository:
    http://www.python.org/dev/bazaar/
    http://code.python.org/hg/
    http://python.ca/nas/tmp/git-notes.txt

  128. Is it nicer than DARCS? by Anonymous Coward · · Score: 0

    THAT is the question: Darcs is so much more user-friendly that it's MORE LIKELY to be used, among a bunch of non-hardcore people ( including writers for versioning their documents ).

    Darcs vs git, what are the pros, what are the cons, from the perspective of someone who isn't the developer of either of those 2 projects...

    Anyone?

  129. Don't bother. by SanityInAnarchy · · Score: 1

    We work on one branch per developer, typically. This was intended to help keep trunk clean, keep us from stepping on our toes, but avoid the dangerous habit of just not checking something in until it's ready.

    Then, we got sick of the amount of time required -- both of us and of SVN -- to do merges. We pretty much decided we were going to move to Git -- but the time to do so wasn't available, so we instead switched to SVN 1.5.

    It was nice, at first. It's really nice to be able to just fire off an "svn merge ../some_branch" and let it do its thing. It was only slightly slower than in 1.4.

    Then it got slower.

    And slower.

    Now, there's a good chance a merge will take a solid 20 minutes or so to even start, and several minutes after that to finish the merge -- during which time, you can't really touch that branch. But exactly the same number of merge conflicts as before.

    Turns out, all SVN 1.5 does is track merge history. This makes the output of "svn blame" somewhat more useful, and (so far) only slightly slower. It also means it can automatically figure out the range of revisions which need to be merged from any given branch, by looking at the merge history to figure out which revisions have already been merged.

    Which means it saves you having to look at the log and find out those revisions for yourself. It won't save you from a single merge conflict, no matter how stupidly easy such a conflict would be.

    Now, since it's possible that:

      - You could merge from trunk
      - I could merge from trunk
      - You could make a bunch of changes
      - You then merge back into trunk
      - I merge from you
      - I then try to merge from trunk

    In that example, since I merged from you earlier, I already have the changes that you merged from trunk.

    If you think about this a bit, the implication is that an SVN 15 merge has to consider almost every merge that has ever happened. Even if the branch in question was deleted long ago, SVN will dig it up, just to make sure you don't have those commits.

    And this is actually the best they can do. I believe it would take a significant restructuring of SVN to do better.

    So, if you only have one or two branches, and merging is a rare (monthly) occurrence, you'll probably be fine. For awhile.

    Eventually, you'll probably do what our team ended up doing -- record mergeinfo in the commit log, and merge manually, by specifying a range of revisions -- and, to make it go faster, specify --ignore-ancestry.

    In other words, to make it go faster, we have to explicitly force SVN 1.5 to merge exactly the way SVN 1.4 does.

    So, my suggestion is, don't bother. It's a smooth enough upgrade, but it offers very little of value.

    You'll probably end up doing what we're doing now: Staying on trunk, mostly, or on a longer-lived feature branch, using git-svn to make it slightly less brain-dead.

    --
    Don't thank God, thank a doctor!
  130. Re:my choice by MostAwesomeDude · · Score: 1

    Try checking a 500M file into git, mercurial or bazaar sometime.

    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

    --
    ~ C.
  131. Re:my choice by SanityInAnarchy · · Score: 1

    I also like the central server aspect,

    Git doesn't imply that you can't use a central server. It just makes it possible to not need a central server.

    What happens to your productivity when your SVN server goes down? What if you want to take a laptop somewhere without ready Internet access?

    and I just have to keep that backed up.

    That is simply not a concern with Git. Every checkout contains the project's entire history -- yet manages to take up less space than a single Subversion checkout.

    In other words: As a side effect of simply using Git, you have one full backup of your repository per developer.

    If your central server goes down, it's simply a matter of throwing up a new server and having everyone push. And until the new server comes up, you can share directly with each other, over whatever network's available.

    it's easier to manage subversion with the one main server.

    It sounds very much like you haven't tried with Git. Play around a bit on Github and see what it's like.

    --
    Don't thank God, thank a doctor!
  132. I'd use it by Anonymous Coward · · Score: 0

    or more likely mercurial (since it's more portable)

    if it could do all of the things svn did, and then some, all without being harder to use.

    However, from what I've seen, it adds new features at the expense of breaking things that used to work easily.

    On svn, it's possible to have large repositories. Furthermore, it's possible to only check out part of the repo if you only want to work with that part, not so with git or mercurial.

    On svn, it's easy to create a central repository that lots of users can check into to keep their work synchronized. Is this even possible with git?

    The idea that you don't need a central repository is rediculous with code bases that have a high enough developer density. i.e. high developers over size of code base. If lots of developers are all working on the same sections of code, it's important to keep in sync with them even if they aren't on your team.

    Furthermore than idea of a pull based model is rediculous for everythign except code reviews. In day to day use I dont' want to have to iterate through all the members of my team to sync in their changes. That requires too much communication overhead for such a simple task.

  133. ATTN: MODERATORS by Anonymous Coward · · Score: 0

    Talking about Slashdot itself, or the way Slashdot works is *not offtopic*. Use your mod points wisely or I'll come round your house and steal your washing.

    1. Re:ATTN: MODERATORS by Anonymous Coward · · Score: 0

      mod parent offtopic

  134. Re:my choice by CoderBob · · Score: 1

    Maybe it's just me, buy watching someone else talk as a method of determining what I want sounds suspiciously like sitting down to discuss a timeshare proposal.

    Just because SVN doesn't do what Linus wants, doesn't mean it doesn't do what I (or anyone else who uses it) want. Admittedly, I use it for my personal hobby projects. SVN "server" that runs local on my notebook, so the repository goes everywhere I go anyway. I'm the only developer, so I don't care what anyone else might want with the code. All I care about is that I can keep track of what changes I've made, so that if something breaks I have some obvious places to look.

    Everything I've read in this whole discussion seems to center around Linus's talks, distributed repositories (or whatever they're called in git, as someone who has barely registered it aside from hearing about Linus's talk, I'm not really up on what the lingo should be), speed, and branching and merging. Linus might prefer git, but this mere mortal works with SVN just fine. Being able to make a local repos is pointless when the repos IS local. Speed? Small projects, not needed. Branching and merging? I guess I'll deal with that if i need to, but for my single-developer setup a tag is probably more appropriate.

    As for the actual question posed by the submitter, it accomplishes what I need. When I worked for a small consulting firm, it served our needs fairly well, and our svn admin was comfortable with using the tools available to handle the "back-end" details of merging. I don't remember ever having a project big enough that we branched, just having to walk through a code change with him when he was creating tags for release (I was only working on documentation, and our manager had to use my laptop one day to commit a fix).

  135. git and svn have a fundamental diff not mentioned by gr7 · · Score: 1

    Noone seems to have mentioned that SVN is like CVS in that it is files based whereas GIT is branch based. This means the diffs are on the whole branch, not just a file. You don't look at file history in GIT. It doesn't make sense. You look at branch history. Also if you rename a file or move a file to a different folder GIT knows this. SVN doesn't. You don't have to tag a whole branch with GIT because every checkin is a whole branch. I've used both and I prefer GIT. I particularly like the ease of creating branches that can be either local or can track a master repository and then merged in. Making branches just seems so easy in GIT. I agree that the windows gui tool (gitgui) isn't very impressive on but it works. And the command line interface is very nice. I *do* love the graphical branch history display on windows. If it's good enough for the Linux Kernel it sure is good enough for the small projects I work on.

  136. DVCS pushing to CVCS by Anonymous Coward · · Score: 0

    Why don't these distributed VCS dumbfucks support pushing to centralized VCS repos and everybody would be happy?

  137. Re:my choice by johanatan · · Score: 1

    I don't usually judge things by their trendiness and/or marketing hype (and I doubt few geeks are different in this respect). If a man offers good points, then they are indeed good.

    I listened to his talks and he pretty clearly defined what is wrong with SVN and why git is better (to a rational scientifically-minded audience). Those benefits may not be as applicable to a single-dev setup, but I didn't think the post I responded to described such a setup either.

  138. I think I love you... by Anonymous Coward · · Score: 0

    Thank you for putting all of that so well.

  139. Re:flamebait by Tubal-Cain · · Score: 1

    "developers", "programming", and "story" seem to be auto-generated tags.

  140. Re:my choice by aCC · · Score: 1

    try checking a 500M file into git, mercurial or bazaar sometime

    That's true, unfortunately. About twice per year I try out all the newcomers, because I would really like to use a distributed vcs. Unfortunately they ALL fail badly on big files. I'm using svn much like a versioned filesystem and really like it for that. But if you're working with aerial photos and laser data, it means you're dealing with LARGE files. Subversion is fine with that. And with TortoiseSVN I can even have laymen use it without problems.

    I'm open to suggestions for an (open source) alternative.

  141. GIT had no keyword substitution support by fluido · · Score: 1

    I find it curious that nobody mentions keywords.

    The reason why I did not switch to GIT when Linus created it is that it was not possible to add auto-modifying keywords. With keywords, the SCM can physically modify your files, in precisely marked spots, to indicate the version level of a file in the actual code. I really like this aspect.

    At the first publication of GIT, I remember Linus holding a strong stance against keywords. This is why I did not convert to GIT (I am a one-man-company and I do not need to collaborate on code: I need SCM to keep all old versions and changes).

    (You can read Linus' stand on this, for example, in this e-mail from 2006)

    In the current GIT faq they mention that keyword substitution is "not recommended", but they then point to the man page of gitattributes, which, disappointingly, does not mention keywords.

    This is why I keep using SVN. I need my sources to hold within themselves an easily trackable age indication.

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

  143. Misuse of SVN branching by apetrelli · · Score: 1

    In the linked article there is a misuse of branching in Subversion.
    In fact, you need to branch only to maintain old versions, not to create new features!
    When developing new features, you operate directly on the trunk, so that inconsistencies pop up as soon as possible.
    If a feature should be ported to a branch, then there is the need of a merge, but not the opposite!

    1. Re:Misuse of SVN branching by Anonymous Coward · · Score: 0

      Doh! Go RTFM.

  144. Mod parent pure genius by RichiH · · Score: 1

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

    Yes, yes & yes!

    This is one of the areas where git is lacking. Being able to commit offline is nice, but the central backup of svn, bazaar etc is a very very nice feature which you get for free.

  145. Non-coders? by Anonymous Coward · · Score: 0

    Ever tried to get non-technical people to use the command line? It's almost always a futile (and infuriating) experience. So if you have a multi-disciplinary team working on a project (coders and artist, designers, etc.) then GUI integration is a must. In my experience you can teach them how to use visual tools, but there's no chance in hell they'll learn to use the command line.
    So even though git has a lot to go for it from a technical standpoint, it's lack of easy-to-use GUI and IDE integration is a major showstopper in such cases.

  146. Re:git and svn have a fundamental diff not mention by estarriol · · Score: 1

    "Also if you rename a file or move a file to a different folder GIT knows this. SVN doesn't."

    It knows this in the version I use.

    I think a lot of people who criticise SVN are not using it well, or are not up to date in their version.

  147. Versioning system configuration files in /etc by yahyamf · · Score: 1
    I'd like to add only the files I edited from /etc/ and /home/.* to a versioning system. With SVN I can only add directories, so when I do `svn status` I get a long list of unversioned files marked by a '?' mark.

    Can git be used for versioning files scattered across the filesystem? Basically I want to be able to do `git status` (or equivalent) and get a list of changed files.

  148. What do you care? by Anonymous Coward · · Score: 0

    You've already switched anyway...

    are you going to switch back if you like the reasons people give you? baahhhh baahhhh

  149. I don't care by Anonymous Coward · · Score: 1, Insightful

    I see discussions like this all the time: "Emacs is better than Vim", "Git is better than CVS", ...

    And I must say, I don't get it. Why is this stuff so important? I've seen people type really fast in their super-editor, and commit and branch their code faster and more efficient then you could ever imagine. But I've also seen the same people produce crappy software while doing this.

    So, is this question really that important?

  150. Actual practical reasons to choose SVN by estarriol · · Score: 1

    If you work in something other than the software industry and thus if even your IT managers are not developers:-

    • You've only just managed to switch them from VSS to SVN. Switching to another repository is a no-go area for several years minimum.
    • "git" is an offensive term, at least in the UK. I wouldn't get much luck using software called "arsehole" either.
    • TortoiseSVN. 'Nuff said.
    • Switching repos is hassle and expensive. If it's not broken, why fix it? I had enough of this argument (from software developers!) trying to get VSS replaced with SVN, and it's several thousand times more relevant an argument for SVN than VSS. SVN is a very good tool by any reasonable standard.
    1. Re:Actual practical reasons to choose SVN by anomalous+cohort · · Score: 1

      Also, with an already established project, you don't want to lose your change history. Is there a way to migrate from svn to git without losing the change history?

  151. Better merge tracking? by js_sebastian · · Score: 1

    The article totally misses the point. The only really important feature (for me) git has over svn that I know of is better merge tracking, and this should be improving starting with subversion 1.5 (haven't tried it yet myself as our server hasn't been updated).

    The "local copy of the repo" thing is good for certain environments, where there are a lot of developers using a very decentralized workflow. I'm sure it's optimal for the linux kernel but it's not everybody's piece of cake.

    Also it seems the guy is really unfair on svn, so git can do diffs for you, well duh. Hell cvs can do that too.

  152. If you want a compromise, consider Mercurial by Anonymous Coward · · Score: 1, Informative

    SVN might be too simple for what you need. On the other hand, GIT might be an overkill. Mercurial stands between the two in terms of features and learning curve. Mercurial has a few more commands than svn, but it's a whole lot more powerful.

    And keep in mind that branch management is a LOT easier on Mercurial than on svn.

    Reading up to chapter 8 in this book may help you decide :
    http://hgbook.red-bean.com/hgbook.html#hgbookch1.html

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

    An IDE would have caught that typo.

    --
    Switch back to Slashdot's D1 system.
  154. Re:my choice by Anonymous Coward · · Score: 0

    Just my $0.02

    $0.02? I guess you haven't heard of inflation yet.
     

  155. http://xkcd.com/378/ by jonaskoelker · · Score: 1
  156. See you next year. by Anonymous Coward · · Score: 1, Informative

    From the GIT web site:

    Java GIT/Eclipse GIT (repository) originated by Shawn Pearce is a Java GIT library and plugin for Eclipse IDE, in very early stages of development. The site no longer seems to have the plugin. Robin Rosenberg has recently been working on history and compare views for the plugin. David Watson contributed GUI for branch handling and commit. Progress is slow but steady. A EclipsePluginWishlist has been started as a roadmap of features. A page has been started to follow development: EclipsePlugin.

    Conclusion: Not ready for production. See you next year.

  157. Go with Mercurial (hg) by Anonymous Coward · · Score: 1, Informative

    Mercurial aka. hg is another distributed VCS/SCM. It has much in common with git (although git *might* be a little more kick-assier in places), but may come in handy as a better SVN replacement because it does work well on Windows, brings very nice Explorer integration through TortoiseHg and is supported by Trac, too, so your toolbox might look pretty much the same. Don't know about integration into Eclipse and others, though.

  158. Bazaar by Futurepower(R) · · Score: 1

    For those who don't think about version control systems every day, when he says "bzr" he is talking about Bazaar, the VCS Mark Shuttleworth supported for Canonical because he didn't like the other VCS.

    "The documentation is far from perfect."

    Unfortunately, Canonical is supporting the usual Open Source tradition of communicating poorly, forcing everyone to use weeks of their time to learn something new, instead of having one person spend weeks writing good documentation. In a lot of ways, Canonical is just the same old pig, wearing a bit of lipstick.

  159. Reversing time and causality with git by mcvos · · Score: 1

    Just learning to use git, I just did something I'm personally amazingly impressed by:

    I was writing a new (small) feature for our website. I'd found an interesting solution, and implemented the first part of it, and put it in a commit. Then my boss (correctly) decides that perhaps this feature isn't such a good idea after all, and other stuff it more urgent.

    I like my code, so I don't want to throw it away. But I don't want to push it to the central repository either. So here's what I do:

    Branch (which is currently exactly the same as the master, including that last commit).
    In master, revert that last commit. A revert is a new commit that undoes an old one (and it can be very old). 'git show-branch' shows my master to be based on the branch (because the master's graph contains the branch's HEAD).

    If I were to push my master now, the central repository would show two commits, the second of which undoes the first. I'd rather have the new feature just in the branch, and not in the repository's master at all. So I try something else instead. And here is where we're going to reverse causality:

    Using 'git reset --soft branchname^', I reset the master to the state before the last commit in the branch. I keep my local uncommitted changes, but the last two commits (the new feature and the revert of it) are gone from my master. This is what I want to push to the central repository.

    So where's the magic? 'git show-branch' suddenly shows that my branch is now based on the master, when it was the other way around a moment ago. But now the branch is ahead by one commit, so technically it's correct.

    I'll now continue to commit in my master, and if we ever decide what to do with the new feature, I can easily merge the branch back into the master and continue from there.

  160. Use each for what it's good for. by Lord+Bitman · · Score: 1

    If you're managing a single, centralized, monolithic project which references no external projects, git is for you. Its simplicity can make basic operations a joy to use. Some things which in Subversion are just plain broken (like, say, updating your local copy) are handled sanely by git in ways which will never lose work.

    If you're managing code which references external projects, or multiple inter-related projects, Subversion is still the winner. Git has very little support for such things (it's coming along, but is currently young, hack-y and broken). Git is not designed to manage the relationships between "different" projects, and having them all in one place with Git requires just as much kludge with Git as it would take to merge changes from one SVN repository to another. (which Git reportedly excels at, though it seems to handle the parts which are sticky in SVN by ignoring them)

    I came out a bit pro-svn-leaning, I suppose. For the record: I use git at home and svn at work. Tried using git-svn at work but it was completely unusable with multiple interrelated projects. My point is: Git is good in one situation and svn in others. I would much prefer to use git for everything, it just doesn't cut it for everything.

    As for the article:
    Point 1.1: "Git creates a full repository with this command."
    Not an advantage. Creating a full repository is a different way of working, but as git's only options are "the whole history of the world, full-featured OMGEverything" or "shallow copy with no features", I would call this even with SVN. If Git adds the ability to "fall back to fetching from remote" when it needs extra information from a shallow copy, Git will have an advantage here.

    Point 1.2: "With each branch, no new files are created in the project file hierarchy on your system. Since you have a full local repository"
    Here is a man who does not know how branches work in SVN. Just because SVN has a horrible interface is no excuse for using an even worse one. svn copy long-ass-url long-ass-url, followed by svn switch long-ass-url is not only "correct" here, but a more accurate pairing with what the git command is doing. (The "git way" of doing what the svn command does is to create a hard-linked copy of the local clone).
    Git also has the "disconnected operation" advantage here.

    Point 1.3: "With Git, we only push our work to the server AFTER collaboration (more below). With Subversion, it all hits the server."
    There are several readings of what this means. Some interpretations mean "You have stupid workflow practices", while others are clear git advantages. I love not pushing every little change until I'm ready for a nice rolled-up commit which will show clean and meaningful diffs to anyone browsing through history. But he could mean "I don't know what branching is for and made a blog post about it". I'll go with the "git is awesome" interpretation, though.

    Point 1.4: "Again, no file system work. Since we're using a local repository, we let Git handle the details of removing the branch."
    I fail to see how "I deleted it from the history, so I want all my local changes to be fucked with" is an advantage.

    Point 2.1: "The key thing to note in this and every step is how we switch between branches."
    You're doing it wrong. But I won't go into it because Git is fucking awesome at this. You just did a really really really bad job of showing why.

    Point 2.2: "Git will 'float' uncommitted changes."
    Stop using convoluted terminology and say "Git makes branching easy. Oh wait I said that already."

    Point 2.3: "Same as 2, but shows the 'git stash list' feature."
    Uhm, thanks? This has nothing to do with "git vs svn". Also, you're still doing it wrong.

    Point 3.1: "Git has a nice feature to create 'patches.'"
    Given that the first listed step is "check your email for patch", the whole argument is invalid. I can e-mail

    --
    -- 'The' Lord and Master Bitman On High, Master Of All
  161. Version Control Blog: Choosing a DVCS by Futurepower(R) · · Score: 1

    The Version Control Blog references an article, Choosing a Distributed Version Control System that is almost a year old, but has interesting comparisons. That article says the documentation of Bazaar is good. Is that because the others are even worse?

    1. Re:Version Control Blog: Choosing a DVCS by Anonymous Coward · · Score: 0

      It's because once upon a time a person who like good documentation, and was good at writing documentation, looked at a bunch of open source version control systems and realized they had bad documentation. While considering their need for documentation and his own talent for producing documentation, he had a sudden flash of insight: if he wanted a well-documented open-source version control system, all he had to do was write his own vcs from scratch.

  162. Re:my choice by cavac · · Score: 1

    I agree.

    While there may be certain situations that require distributed versioning, for my main project (the BlinkenSisters Jump'n'Run) subversion does its job perfectly. Combined with an IRC autobuild bot, automated checkin-reporting to our central mailinglist and not having to merge branches all the time, subversion is a very handy tool. A central repository also forces the combined team to fix bugs quickly.

    Also, the windows explorer integration with TortoiseSVN is very nice for developing on the windows side of life.

    I think, the main difference between central SCM and decentral SCM is how the developers work: Subversion is for teams, GIT is for individuals working on a common project. Sound similar, but it's quite different: A team lives primarilly through communicating with each other, a group of individual coders by creating patches (which does *not* help getting into team spirit).

    --
    Look, this thing is totally safe! Built it myself, you know. You just press that button like this and then turn that lev
  163. Re:flamebait by Anonymous Coward · · Score: 0

    Then I would like to thank and congratulate you on painstakingly copy-pasting every lower-case letter in your reply in from somewhere else =)

  164. Subversion completion by foobarbaz · · Score: 1

    These bash tab-completions make subversion much nicer to work with: http://paste.ideaslabs.com/show/2UYMIdYr0p

  165. Re:my choice by Abcd1234 · · Score: 1

    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.

    Uhh... you know, you *can* do both. I use TortoiseSVN + Visual Studio at work (yeah yeah... :), and it works just fine. I have absolutely no compulsion to use an SCM within my IDE... in fact, I would contend that a specialized tool designed to work specifically with the SCM is going to inevitably be more effective than something tacked on to my IDE.

  166. Back to Basics by Anonymous Coward · · Score: 1, Insightful

    Find out what Version Control systems the developers of Subversion and Git were using when they wrote their code.

  167. Mistakes in the article by jeremyp · · Score: 1

    The author of the article makes several mistakes in his subversion examples which lead me to think he has not used svn seriously (making his judgement questionable) or he is deliberately skewing things towards git (making his judgement questionable.

    In "Endless, Easy, Non-File-System-Based, Local Branches":

    Task 1: the subversion box should be empty. Nobody checks out a whole Subversion repository or even (a whole project including all branches) in normal usage.

    Task 3: the workflow is a valid workflow for Subversion, but it's more normal (for small changes certainly) to work on the trunk and distribute a diff file for review before committing the change at all. This is the model that the Subversion developers themselves use for Subversion.

    Task 4: why would you want to delete the branch in the repository? In Subversion you'd just do "rm -rf /local/copy/branches/B" or equivalent and leave the repo as it is.

    In "Stashing Temporary Work"

    Subversion has the command "svn switch" to switch a working copy between two repository URLs. Alternatively, you can just check out the branches to different places on your file system and have them all there at once.

    The author's example of why the git approach is better seems to have been contrived based on the way one particular editing tool works (he doesn't say what happens to a TextMate project file if your branch deleteds files from under it (or adds them).

    In "Collaboration Before Public Commits"

    Svn can produce patches based on the differences between your working copy and any arbitrary revision / branch too. There's absolutely no reason you can't use the exact same workflow that the author suggests for git.

    Philiospohically, I am inclined towards a central repository especially for large team projects. I realise you can do that with git, but as a project manager on a large project, I'd still be nervous knowing that it is possible for a developer to have quite a lot of committed work that exists only on his laptop or that there might be prima donna developers that consider their personal repository to be the "master".

    --
    All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
  168. Re:my choice by Otto · · Score: 1

    Yet people are working on integrating git with IDEs. And let's face it, the Eclipse plugins for SVN aren't all that great either.

    I don't know about all that. The Subversive plugin for Eclipse works quite well, but this is mostly because it's simply duplicating the CVS functionality already in Eclipse but using SVN instead. Okay, so it sucks at merges, but then SVN sucks at merges anyway.

    --
    - 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.
  169. Re:my choice by MikeBabcock · · Score: 1

    I dare you to poll some high level kernel coders on what they use to write code with.

    You'll probably get a lot of vim and emacs answers, and not a whole lot of Visual Studio ones ;-)

    As quaint as I personally find IDEs in general, they often annoy me more than they help me and a good editor is much more important than the integrated extras.

    --
    - Michael T. Babcock (Yes, I blog)
  170. 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
  171. Re:my choice by Jason+Earl · · Score: 1

    I agree that git's merging is much better. In fact, comparing subversion's merging with git's is ridiculous. However, most people don't really make branches (until they start playing around with a distributed version control system). Until you've used a system, like git, where you can create a separate branch for each new idea and still merge your branches sanely merging doesn't seem like that big of a deal. Heck, many git users don't even take advantage of git's merging ability. To them git is just a much faster subversion (with less tool support).

    As far as tools go, Subversion clearly has the edge. repo.or.cz is nice, but everyone has subversion support, and so do all of the IDEs and other tools that you are probably interested in. What's more, it's trivial to use git, hg, or bzr as a front end for Subversion.

    For a non-technical user, Subversion really is hard to beat. It's trivial to set up a Subversion server that looks to them just like a network drive. They don't even have to know that they are using a versioning file system. Combine that with the fact that Subversion will happily version even ridiculously large files means that you can use Subversion in situations where git simply won't play at all.

    For my own projects, I use bzr (I have used git in the past), and I understand why Linus feels so strongly about subversion. For source code git is impossible to beat (assuming that everyone that needs to use the repository doesn't mind using a command line client).

    However, there's a reason that Subversion is more popular than git, and why it is growing in popularity faster than git. Most people don't care about merging. They just want a straightforward user interface for a versioned file system.

  172. Re:my choice by kelnos · · Score: 1

    This is really useful when some people are committing crazy shit

    This isn't a technology problem, it's a social problem. To solve this, you actually TALK to the developer in question and tell him to stop committing crazy shit. If he has a problem with that, you revoke his commit access and require he submit patches to you for review.

    Not only is that roughly the same amount of work (the main difference being that, instead of pulling from someone, you have to wait until the out-of-band push to you), but you teach someone an important lesson: how not to be an asshole in a group collaboration setting.

    Having said that, there are lots of other awesome reasons to prefer git over svn, easy/quick local branching being one of them, as you mentioned.

    --
    Xfce: Lighter than some, heavier than others. Just right.
  173. Re:my choice by jonabbey · · Score: 1

    I had to struggle with merging in Subversion a good while before I ever took much notice of any of the newer generation of revision control systems.

    I'd create a branch (so easy!), do some development on it for awhile, and then discover that I was S.O.L. when it came time to merge it back into my trunk. Likewise, we have four instances of a project in development running here at the lab, two for development and testing of the application and business rules, one for user test, and one for production. I wanted to have each instance's code in its own branch in Subversion, but Subversion provided no help in managing merges from the dev instances to test and then production.

    Git makes that easy.

    You're absolutely right that Git isn't a perfect replacement for Subversion, though. Git compresses its repository to an amazing extent if you are working with source code, but only a few Word and Open Office odt files in a documentation directory in our Subversion tree wound up massively dominating the Git conversion of that tree.

    We had to learn to use git filter-branch to sculpt and shape Git copies of our Subversion repository in order to produce a set of well-defined Git repositories that could reasonably stand on their own.

    As far as tools, I actually find the tools on Linux rather superior to what I've seen with Subversion, with the exception of Eclipse. On Windows, Git definitely lacks anything like tortoisesvn. We still use Subversion for a Windows-only project, for that reason.

    But I think that the trends are positive for Git. The energy and enthusiasm around Git, both 'plumbing' and 'porcelain', is profound, and the richness and simplicity of the underlying Git model facilitates that.

    And, I must confess, I've spent rather too much of my life struggling to get Subversion built and installed. Getting Subversion integrated into Apache has at times been very 'special', shall we say. I like that Git-http merely requires the standard mod_dav module (which was developed in significant part by Subversion contributors, as I understand it).

    The deficit Git has, the deficit Git always will have, is the relative level of conceptual difficulty involved in using it. I don't ever expect Git to fully replace Subversion or CVS, just like CVS never fully replaced RCS.

    But I know which one I'd prefer to be stuck on a desert island with.

    (And, hi! from another 4 digit Slashdotter. Fancy user number you've got there. ;-)

  174. Re:my choice by kelnos · · Score: 1

    But even then, it's hard to fuck up git, and easy to fuck up SVN.

    Really? Seems the opposite to me. You can very easily wipe out large amounts of local history with git, and if you haven't pushed it elsewhere, it's gone, forever. Git's tools and poor documentation make it easy to shoot yourself in the foot. With SVN, after you commit, your changes are pretty much immortalized without direct repository editing on the server.

    Granted, it's sorta the same -- with both git and svn you can lose data if you don't push/commit to another location -- but git more or less encourages you *not* to push anywhere until/unless you need to, and provides a host of potentially 'dangerous' tools that work on your local repository that svn doesn't provide.

    --
    Xfce: Lighter than some, heavier than others. Just right.
  175. Re:Keyword: Herd by Hegh · · Score: 1

    I use git at work because we were told to, but I am actually quite fond of it. I've even started using it to keep track of personal projects at home.

    I like it because it has pretty good documentation and I can figure out most of what I need with a quick search, and because it generally does what I want when I want it to.

    We switched to git from cvs about a year ago, and I am much happier for a few reasons that will also apply to subversion:

    1) Repository info is only stored in one place, so you don't ever need to search out all of your CVS or .svn directories

    2) Local commits make it easy to check stuff in whenever you need to, and then make it pretty (with git rebase -i commitid) before pushing to a central repo (assuming that's the model you are using)

    3) There is a two-stage commit. You have the working tree (aka working copy), which is what you are editing, the 'index', which is where the changes you want in the current commit go, and the actual repository, which holds commits. With that extra step in between, you can check in only the parts of a file that are relevant to the current commit (with git add --patch filename). I have a tendency to do a bunch of editing everywhere, forgetting to commit, and then go back to make multiple commits of discrete features/bugfixes at the end of the day. I'm pretty sure you can't do that with CVS, and although I'm not sure about subversion, it would surprise me if you could do it there.

    4) The repository keeps track of changes across multiple files, instead of tracking each file individually. That makes applying a bugfix from another branch really easy, since you don't need to hunt down every file that was modified by it.

    So anyway, I'd suggest sticking with git, but there's no harm in trying other systems; you never know, what I like and what you like may be completely different.

    --
    Bravery is not a function of firepower.
    ~J.C. Denton (Deus Ex)
  176. Re:my choice by mcvos · · Score: 1

    But even then, it's hard to fuck up git, and easy to fuck up SVN.

    Really? Seems the opposite to me. You can very easily wipe out large amounts of local history with git, and if you haven't pushed it elsewhere, it's gone, forever. Git's tools and poor documentation make it easy to shoot yourself in the foot. With SVN, after you commit, your changes are pretty much immortalized without direct repository editing on the server.

    You're comparing apples and oranges here: a situation where you go out of your way to destroy git history with one where you go out of your way not to mess up SVN. Not pushing git commits to another machine is comparable to never commiting anything in SVN. If you lose your local machine, you're fucked.

    On the other hand, in SVN it's actually quite easy to edit the repository by hand and destroy stuff. With git, at the very least, you know it's been messed with because the hash codes are wrong.

    Granted, it's sorta the same -- with both git and svn you can lose data if you don't push/commit to another location -- but git more or less encourages you *not* to push anywhere until/unless you need to, and provides a host of potentially 'dangerous' tools that work on your local repository that svn doesn't provide.

    I don't see how git encourages you not to push. With SVN, pushing incomplete code to the trunk may fuck up other people's work. With git, you can always push to your own github space and merge that into the central repository when it's finished.

  177. Re:my choice by mcvos · · Score: 1

    This is really useful when some people are committing crazy shit

    This isn't a technology problem, it's a social problem. To solve this, you actually TALK to the developer in question and tell him to stop committing crazy shit. If he has a problem with that, you revoke his commit access and require he submit patches to you for review.

    That may prevent a valuable developer from contributing in the future, but in the mean time you're still stuck with crazy shit.

    Git gives you the tools to solve this problem.

    Not only is that roughly the same amount of work

    What exactly is the same amount of work here? Blocking development compared to fixing a problem?

    (the main difference being that, instead of pulling from someone, you have to wait until the out-of-band push to you), but you teach someone an important lesson: how not to be an asshole in a group collaboration setting.

    You assume only assholes commit bad code. Good programmers can fuck up too.

    I'm getting the impression that for SVN the world consists only of assholes and perfect programmers. I think the majority of programmers are neither. You need to be able to recover from mistakes, not blindly hope they don't happen and cripple your business when they do.

  178. I use both by SaZZer · · Score: 1

    My company uses subversion as the centralized source control system - was MS Source Safe when I started here, but we migrated over not long after - but I use git with git-svn locally on my machine because I find the branching and merging/rebasing in git much easier to work with.

  179. One man's Rare is another man's Common by Chibi+Merrow · · Score: 1

    Excellent, this is a reason to branch. You have an experimental feature you want developed in parallel with the project, but might not want to include it in the software. I recommend patching the trunk changes over as often as possible to maintain stability and ease the merging process. This also ensures that no code developed on the trunk conflicts or breaks the feature.

    However, please recognize - this will be a very rare scenario.

    Rare scenario? That's the norm for me. My primary area of work involves very large changes to a rendering engine on a large simulator project. Changes that can often take me 3-5 weeks to get to a point where I'm satisfied with them. Unfortunately, due to the nature of the changes, the system will probably be completely broken for the first week or two of this change. If I don't branch, I can't check in my code, as that would break things for the other developers. By not checking in my code, I lose the benefits of revision control on my own work, leading to a "WTF!? This worked yesterday!!!" scenario very quickly, which can be difficult to recover from if I forgot about some small change I made while half asleep the previous morning. Having my own development branch (or indeed, several different development branches each for different features) was immensely helpful at my previous place of employment. Subversion made doing that a dream, and Trac made keeping track of the relationships between branches a breeze. My current employer uses CVS exclusively... And the absolutely asinine way of handling branches in CVS has led to me not using separate dev branches... Much to the chagrin of myself and my coworkers...

    --
    Maxim: People cannot follow directions.
    Increases in truth directly with the length of time spent explaining them
  180. git and subversion by Anonymous Coward · · Score: 0

    As a policy, my company uses subversion, more for our windows users than anything, so myself as a linux dev use both. Using git, it's relatively simple to use checkout and merge into an svn, while still maintaining your local repo and branches for all its intents and purposes. I personally love the implementation of branches in git and can't do without it, as I'm generally working on 2-3 new features for software at the same time, and sometimes have to leave broken code hanging around for days at a time before I can finish what I had started. If I put that into the main svn, I'd probably be shot by the rest of the dev team.

    Each has it's own place in life, and sometimes living with more than one is always an option. Use whatever model suits your company or environment best.

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

  182. Re:my choice by MostAwesomeDude · · Score: 1

    I'm aware of "git gc", and I've actually had the rare opportunity to talk to Linus about why git does some of the things it does, and I understand all that, but when one has as many repos as fd.o does, it's the kind of thing that becomes a recurring annoyance. And I had to point that out.

    --
    ~ C.