The fighting's been fun and all, but it's time to shut up and get along
blog.bitquabit.com
blog.bitquabit.com
Sigh! Perhaps the enemy is the still surprisingly high number of programmers not using any source code control at all. Perhaps we should be working on educating those who still don't feel the need to use source code control on their own personal projects. But Subversion?
I just helped on a "major" project that worked remarkably successfully using good old CVS. I personally prefer Mercurial, and it's what I use for all but my smallest pieces of code, but did CVS work well for coordinating 50+ chip designers, software developers, document writers? Hell yes! Not even a single hiccup, no little thanks to a very helpful and standup IT guy. Good ol' CVS did the job just fine. Could newer technology be better? Yes perhaps I can think of a lot of hypotheticals where it would have been great to have a DVCS, but in practice, I can't think of all that many times where it would have made much of a difference. The fact that every one there, particularly the chip designers, knew how CVS worked, had worked with it for years, had their own work methodologies based on CVS, made the very thought of using anything else nothing but stupid.
Git is pretty awesome, I love using github. From what I've seen of Mercurial, it is also mostly blessed the same awesomeness.
Getting people to convert is a fairly big undertaking, though, and although the author touches on this, he might be underestimating the task of conversion a little bit.
The first of his 3 points (that git/mercurial's inferior handling of binary files is one of the major issues) is in my opinion dwarfed by an issue he doesn't even mention: git's cryptic user experience and sometimes insanely-scary (especially to git newbies) error messages. I've met plenty of coders who are brilliant programmers but are completely baffled by the very simplest of operations in git when they fail. I'm not sure a better user experience is even remotely on the radar of the folks who work on git, so for git newbies, it's back to svn.
Has anyone else noticed this?
I'd love to get my day job's project moved from svn to git, given the tremendous benefits (we experience a lot of pain when branching our svn repo), but the pain of moving has to be eased significantly. Moving a repo like ours doesn't just involve importing the repo, it involves training, dealing with all the errors and hangups, figuring out how to make our ancient installation Trac talk to our repo, connecting it to Eclipse and NetBeans, and adjusting all of our build processes. I think if the day to day git experience was less cryptic, we could probably handle the remaining issues.
Food for thought at least.
oh, and -another- aliasing system on top of bash's is just stupid, so don't even mention it.
What I'm trying to say is that Git is like the Hells Angels, Mercurial is like the Bandidos, and SVN is like the Crips. Microsoft Visual Source Safe is like MC Hammer.
http://en.wikipedia.org/wiki/Narcissism_of_small_differences
That seems like a crime to most people because I'm a Rails coder, but the truth is that I haven't had any need of anything else yet. I'm generally the only person working on my projects which means that Subversion meets all my needs.
I'm sure that there are benefits to converting, but every time I start the process I get turned off by having to learn a whole new way of doing things...
For now: I'm sticking with Subversion.
The learning curve of Git is way too steep for non-technical participants in particular, at least in my experience, whereas they seem to handle SVN without much difficulties.
Can this be true? I'm definitely not a rockstar developer and I've been using Git for more than a year.
Hmm...do we? I mean, might the time to try and convince someone like that to switch to Git be better spent elsewhere, like trying to inspire the next generation of programmers who actually code because they love it?
Sadly, a few of these were for large interactive agencies. I try and steer clear of these kinds of jobs when I can, or at least try and push them towards svn or git.
When I suggested version control, the reply was "We're not big enough."
Sigh.
Not helped by the fact that SVN has hooks into the Visual Studio version control architecture, whereas Git has an odd plugin that works in a non-standard way.
I mentioned git once to my boss and it was definitely over his head. So I put git (via Cygwin) on my machine and am using it with CVS (as much as I can).
With all the projects popping up on github I have a feeling I'll push one of my tinkering projects up there pretty quick.
It's also easy, in the yin/yang (what?) of Hacker News and proggit, to forget that there's plenty of developers RIGHT HERE who do not grok DVCS. I sort of know what they are, and that they making branching suck less or something.
Hello, I'm nollidge, and I don't get DVCS. Where do I start?
Start a project in it.
Stick with it till you get past the learning curve.
Wait for the light bulb to go off.
There is really no better way to "get it". It will have some pain at first and you won't understand the benefits immediately but one day when you're coding and suddenly realize that you no longer weigh the pain and risks of creating a branch you'll suddenly wonder how you did without this tool for so long.
Linus: http://www.youtube.com/watch?v=4XpnKHJAok8
GitReady: http://gitready.com/
Pro Git: http://progit.org/book/
A short little bit about git's internal model: http://eagain.net/articles/git-for-computer-scientists/
GitHub's Git Cheat Sheet: http://github.com/guides/git-cheat-sheet
A successful git branching model. gorgeous workflow and pictures. http://nvie.com/archives/323
Also, if you have any questions, feel free to email me. The only reason someone should be using SVN now is if there are institutional reasons or if you use lots of large binary files. I'd rather you send me an email about something that seems hard than give up and use an inferior tool. I'm not an absolute git master, but I've ended up explaining it to most of my classmates, so I've given that explanation a few times already.Thanks!
People are coming from a world where they see svn as being so much better than cvs (and source safe and what-not), but the only thing close to it in its class is p4, and they have to pay a lot for that, so it doesn't count.
Then someone convinces them that there's a better class of things and they want to give it a shot. git users talk about the power and wonders of git. hg users talk about how much easier it is to use than git. bzr jumps up and down slowly and says, "me too!"
In this sense, DVCSs are each other's enemies preventing our own adoption.
I've used hg a lot and I've been using git almost exclusively for a couple of years. A project whose source is in git is more likely to get contributions from me because it's just easier for me. Projects that use hg will get a contribution if it's a big enough pain because it means more work for me.
> So why is there so much hating? I think what’s going on is that people are coming to these languages from Java or PHP, have their massive epiphany on how totally awesome these languages are, and then assume that only their language can have this level of awesome, so they begin evangelizing. The problem, of course, is that the other guy feels the same way, and is also evangelizing, so the Ruby and the Python guy end up in a locker-room-style temper-tantrum over whose language has the best frameworks or whatnot, instead of how much more awesome their languages are than the competition.
> This has to stop.
> Python’s enemy is not Ruby. Ruby’s enemy is not Python.
> Their enemy is Java.
I tried using git (with git-svn) to work around this, and even with the easy-git porcelain, the learning curve (and cryptic errors) were ridiculous (basically, easy-git is a pretty leaky abstraction). There's absolutely no reason why a VCS should be that hard to use.
In SVN, your changes had to be "ready to check in", which was this big, complicated ritual where you back up your changes, update, merge, check to see if the merge screwed with your changes, replace your backed up files, diff, unfuck the merge, and finally, commit.
With DVCSs, there's no reason not to commit partially done features. If you're at enough of a stopping point to want to merge in other people's changes, you're at enough of a stopping point to commit what you have so far. Your code only needs to be "ready" when you push it out.
Maybe this is easier in Git, but it has the worst interface I've ever seen, and that's saying a lot.
It's not just cherry picking - if you've spread changes across multiple commits, it's much more difficult to manage them. Yes, you can diff cross revisions. But that's more awkward. Worse - if you commit so you can merge in changes from the mainline, all of your changes get lumped together - which may be logically different fixes - and some may even be debugging code that definitely shouldn't end up in the mainline. If you later need to push a subset of your changes, you're in for a world of hurt.
I guess if you get people to use patch queues religiously, you can work around this. But patch queues (in mercurial at least) are definitely rough around the edges, and have their own share of problems.
I'm guessing this process is better in Git. But if I can't deal with the interface, there's no way I'm going to convince the rest of the team to do so.
If people have suggestions on how to deal with this kind of stuff, I'd love to hear people's suggestions. My HN username @ gmail.
I do agree that git stash is superior to the hg alternatives.
How likely is it that Linus will add better support for binary files from an outside project or do we just have to use the forked git?
Subversion is "better" at this only because it does shallow checkouts - it only gets the last version of the project. It is still ludicrously inefficient in it's transfer protocol.
Git can actually do this type of development fine - if you do 'git clone --depth=1 [url]' it will also do a shallow clone (just the last commit and it's associated content) and will transfer the data much more efficiently than SVN. In the past you couldn't then commit to that repo, which was the issue, but in newer versions you can. You can also later deepen the repository if you want. It is not an often used feature, but I think it brings Git pretty close to on-par with SVN for large projects, if not better in many respects.
You cannot do this as of Git 1.6.6, according to the documentation, which states:
"A shallow repository has a number of limitations (you cannot clone or fetch from it, nor push from nor into it), but is adequate if you are only interested in the recent history of a large project with a long history, and would want to send in fixes as patches."
What newer version of Git is there?
I don't think I've ever stored a binary file in my source-code control system. (Hint: your VCS is not your backup server.)
(Yes, OK, I have a favicon.ico in some of my repositories. This has not detracted from the "git experience".)
A version control system is such that it can handle versions of the project and not just versions of the source code.
FWIW: I keep whatever files in the project I have uncompressed in git and it hasn't killed my HD space yet.
Of course, if Photoshop were Free Software, then you could just make the undo history and the git repository the same thing. That would be the ideal situation.
The developers should have been soundly thrashed with a cane, but if it is possible to check in a binary. They will do it.
Or don't do that. git users are happy about git in part because they don't work with idiots that misuse their tools.
That sounds like how Vesta works: http://www.vestasys.org/why-vesta.html (item 3)
I do small-scale game development (Flash and iPhone) with a team of 2-3. We've always committed image, audio and animation binary files to source control (currently Subversion) so we can track changes, just as we do for code. To be honest, I can't imagine what other approach we should be taking.
Backup is not the point. The point is that you should be able to get onto a new machine, and execute your build process, and it should work. If some of the application files are missing, it wont.
I have a favicon.ico in some of my repositories.
It seems that all you're really saying is that your applications aren't media-intensive (binary files limited to an icon), and you don't want to think about ones that are.
Mercurial’s enemy is not Git. Git’s enemy is not Mercurial.
Their enemy is Subversion.
.. most developers are not even aware of what DVCSes are or what they do. .. The goal right now, if you honestly believe that the DVCS workflow is better—and I do—should be to get the mindset out there, to make more people aware of what DVCSes have to offer and why they should be using them. </quote>