SVN vs Git?

JME3 is currently hosted in SVN, if I’m not mistaken? Could someone either point me in the direction of - or directly give me - a rundown of the reasoning behind this choice? I could go into a great shpiel about how Git has changed my life and I don’t know where I am without Git, but frankly I’d sound too much like a salesman. I’m not trying to persuade anyone to change, just wondering why SVN was chosen (having worked with both systems, I personally find Git much more developer-friendly).



There are other alternatives as well which I’m sure were discussed when choosing a VCS, I’d be interested in any notes on them also (as I say, I’m not trying to persuade anyone, in fact looking to be persuaded - I’ve had no trouble with Git as opposed to much trouble with SVN so I’m interested to know what the advantages of the older system are).

1 Like

Because its only a version control system to us and not a religion and because the simple numbering of svn is easier to incorporate into version numbers of the software. And its not trying to be more than just what it is. Automatic merging etc. of other systems is not usable in practice and the few pitfalls with svn and case/deleting of folders are really bearable… For us, svn works fine and we will not switch any time soon.

3 Likes

I wonder why you pictured me as a zealot when I specifically stated I was looking to be persuaded.



I also said I wasn’t looking to persuade anybody, I don’t want anybody to switch. I’m just asking out of curiosity and because I control projects and make decisions on revision control systems and wanted a peer’s opinion. Is that too much to ask without being painted as some kind of religious nutjob who pushes their own VCS over any others? Sure, I said I personally prefer Git but that was just to provide context for the question.



So what you’re basically saying is, you chose SVN because “the simple numbering system of SVN is easier to incorporate into version numbers of the software” and “automatic merging is not usable in practice” and “the disadvantages of SVN are bearable [given its advantages]”.



Thank you for your opinion on this matter, I think I’ll continue using Git for my own projects but that’s not to say your opinion is any less valid - just that the reasons you gave (whilst they may apply to JME) don’t tend to apply to my own projects.

No, I am not picturing you as a zealot, its just that we use svn, simple as that. The question implies that we would look at other systems because of their great new features or something but in fact we don’t (well except for erlend, but he’s susceptible to advertising talk ;)). Its just a tool and it works fine for us… But there is religious wars going on about these systems :slight_smile:

I’m glad to hear you’re not picturing me as a zealot. I’m well aware of the zealotry that goes on in the Open Source field both internally and externally (Vi vs Emacs being internal, Linux vs NT being external) and the destructive capability of becoming too entrenched in using a specific tool. In fact, that’s precisely -why- I asked the question in the first place. I do not wish to become entrenched in using Git and when I noticed a mature project using SVN I thought I’d ask about the decision. Just because I prefer something now, doesn’t mean I want to use it for the rest of my life.



I didn’t mean to imply that you should look at Git, simply that at some point you must have made a conscious decision to use SVN and, whilst you may or may not have considered the alternatives, there must be some reason you chose SVN over anything else. Exploring the reasoning of others helps us better ourselves, don’t you think?



Anyway, thank you for your kind responses. A lot of people, had I posed this question, would have launched into a religious debate about the two (at which point I would have ceased to be interested in the topic) but your concise responses provide reasoning without emotional overtones.

Main reason is that everybody already knows how to use it.

Its kind of like the “de facto” versioning system …

@cjbrowne: Nice, to start a debate on principles with the first post!? :smiley: Are you even using jME or just want it to use GIT:D


I could go into a great shpiel about how Git has changed my life and I don’t know where I am without Git, but frankly I’d sound too much like a >salesman.



Actually I’m interested in that. Did you clone yourself in different branches that evolve in all different kinds of supermen and now hope your main branch accepts your pull requests to become complete?



(sry guys, couldn’t resist)

@ttrocha: If you read the entire thread carefully, you should find that the reason why I asked it as my first post becomes evident.



I don’t know if you realise or not but the part of my post you quoted was an attempted humorous reference to the zealotry that usually encompasses these debates. Humour isn’t my forté.



I’m not sure I understand your joke. I’m not sure how one clones oneself “in different branches”, nor how branches “evolve in all different kinds of supermen”. I understand the Git references, I’m just struggling with the semantics of its application to human cloning. Perhaps you have to be a geneticist.

zealotry? Sounds to me like you learn a new word every day and try to use it as often as possible! Thx, now I know a new one even though I would have to look at wikipedia for the meaning (but I won’t). Actually you are right! I didn’t read all of your posts… No sry for that.

…actually I did it now (thx for burning more time) and I wonder, what the hell do you want??



I know I started a fire here (I’m good in this,right mods?) that would just have vanished by ignoring you, which I will do from now on! Have fun using jME it roxx (you know it’s a Java 3D Game Engine)

I have read a nice, funny introduction to mercurial (linked by google code hosting) here

I have absolutely no experience with advanced CVS features, but the idea of having a local vs global repository and keeping track of all the changes rather than the absolute data, sounds nice.

How do you commit changes to the SVN, usually? Are you updating your local copy of the data, working on it until it works and then commiting it to the google server? What happens if someone else has commited before you, because it took you longer to get it working? Or are you using SVN locks? If you are not using locks, you have to manually copy&past the changes into the latest revision, right? Where do you see which files you modified and the changes you made?

  • If someone took the time and answer some of those questions, i would really appreciate it. I have some basic knowledge about svn, but would like to hear how you handle these situations in practice.



    EDIT: im so stupid lol. You use patches ofc; even made a patch of my own and contributed here…

If you try to commit over something that has changed underneath you, SVN will tell you and merge what’s there with your local version and then you can edit it or just commit it if there are no conflicts. Really it’s only an issue if you’ve edited the same lines of code otherwise, the merge just works and you can recommit. In the case of a conflict, SVN leaves both versions in the code with markers so you can resolve the conflict.



…you never have to cut and paste your edits. The C in CVS stood for “concurrent” as in “more than one person can edit the same file at the same time”. Since SVN is sort of CVS++ (arguably) then it definitely supports that kind of development.

1 Like

thank you very much for clarification. Yeah the merging part left me confused. Happy coding with your game :wink:

Simple as that:

Free fast googlecode hosting

Plugins for everything and their mother (does the eclipse git plugin stil crashes that often than a year ago?)

Everyone knows how to use it.

It was already there from the former jme versions, and since there were never any real problems never change a running system

1 Like

The automatic merging which (as implied) git does and SVN not (which is not true of course), seems to work for the linux kernel and like… million other projects that use git; and yes, it does so in practice, not only in theory.



I also switched from SVN to git as my preferred system a few years ago.



The only viable arguments pro SVN that i ever read about, are the ones already mentioned here:

  • it is more well known
  • it has better tool support
  • it has a preferable versioning scheme (subjective)

    git on windows also needs some stuff to be configured right, to not run into line-end glitches.



    To me, SVN is ok for closed source projects. In OpenSource, you simply have to use a distributed SCM (DSCM), preferably git, mercurial or bazaar, if you take contribution seriously. The “do not change a working system” principle does not apply here, because you are actually missing out on opportunities when not using DSCM:

    An OS project that uses DSCM is more accessible to non-main devs and/or gives more control to the main devs of what to accept. A prime example (and yet common) is what we see with the Maven integration for jME.

    None of the main devs is using Maven, and thus they do not want it in the main repo, because they fear it would get outdated soon. With a DSCM, the users that want Maven and are willing to maintain it would simply do that, without any extra load generated for the main devs. Yet they would be able to easily merge in changes from the main repo, and supply their additions to other users in the very same way the main devs supply their WIP code.

    The main devs do not have to argue with the contributors why they do not want their changes, and the contributors do not have to worry that their work might go unused/unshared.



    Learning git, mercurial or bazaar basics takes a few minutes for anyone that already knows SVN.

    Not learning how DSCM works and working in OpenSource is like not learning MT programming when working on performance heavy stuff in the time of increasing CPU core numbers.

    DSCM as a principle has not a single drawback over single repository SCM. It is no religious thing.

    The only question is, if your lazyness (nothing negative per se) and the comfort of your SVN tools weights more then the benefits of DSCM for your project. The benefits of DSCM are relative to the community size of the project.
1 Like

Just found this thread and thought I’d weight in. I’d like to see jME use git (or failing that, Hg, or some other distributed VCS). Managing a large software project myself for my day job, it certainly makes my life a lot easier than any certralised VCS.



Anyway, Linus puts it best:



http://youtu.be/4XpnKHJAok8



Git really works for Open Source projects.

Anyway, I think it would be good to start up a git mirror of the svn codebase at least. Has anyone done the git-svn import? If I start hacking on the core project, I will do it. But just checking... if someone has already done it, it will save me the possibly lengthy initial import process.

To be honest, while the current SVN is fine for the project itself it would be great to have a svn to git bridge working.

That way i could simply merge the upstream with my local version of jme, and keep 2 or three small modification ot the core and do not need to redo them every time I update.

I’ve tried using Git a few times. Each time I’ve given up and gone back to SVN as stuff that should be really trivial seems to take for ever. In fact one simple thing (I’d made some changes locally, I wanted to ditch them all and go back to the original) I never did work out how to do. I ended up deleting the repository entirely and recreating it again.



I’ve been using various VCS for 15 years (clearcase, cvs, svn mostly) and of all of them I found git the most unfriendly, unintuitive and generally unhelpful. The windows tools I found were all worse than the clearcase tools I was using back in 2000!



It’s not the concept of distributed I have a problem with… I can see how that makes a lot of sense…it’s the dire user interface & experience git and every git tool I’ve ever tried offers.

We’ll switch to git at some point. Doing this kind of stuff just to use some tool one likes in an unfitting context is about as bad practice as it gets.

Notice I never said about switching, I can quite good understand the benefits of using svn for jme. Especially the versioning is in git somewhat hard to comprehend since there is no central version number. Also i agree that git is very unfriendly and complex, however once masterd also quite powerfull. I only think that a bridge would be great, to allow the git affine users to work with git, without changing anything else.

Yeah thats what I mean. Versioning actually should work relatively easy with git, one can create numbers a la “number of commits since tag X”.