Subversion to enable Git-like features
subversion.wandisco.com
subversion.wandisco.com
using a new version with a few new features of an existing tool (svn) is always an easier sell than using two new tools (git, git-svn) as well, especially when one (git) has a reputation as being very complex, and the other (git-svn) looks like a hack to glue two different systems together.
Personally, I would find it more useful to sit around and watch paint peel off my wall. But then again, I didn't write a book about why open source projects should have 100-message-long votes on every line of code to be added to the project... so I clearly don't "get it".
For most of us, no. For the SVN team, other forces are at work - I'd say familiarity of the code and desire for their baby to stay relevant are big ones.
It has to be sold to me (or your typical departmental svn user). I do spend time learning new tools, but that time is limited, so I'm less likely to spend it on something that has the potential drawbacks that I raised.
FWIW, yes, I am trying out git on the side. That use of time looks worthwhile.
They haven't really mentioned exactly what will be supported by these changes, but it seems to me that without local branches, offline commits aren't really worth much. The fact that you need 5 svn checkouts to work on 5 different features at once sucks. With git-svn I can work on as many features as I want with different local branches, and they can each be based on different remote branches if needed.
When people use a computer they want usability, they want a GUI (where relevant), they don't want an ALTAIR front-panel with a bunch of inscrutable toggles and equally inscrutable lights. This is why Mercurial is so popular despite being so similar to Git. Until the Git team accept these problems as real problems and do something about them Git will be relegated to a niche tool and 10 or 20 years down the road when every dev is using DVCS it won't be Git it'll be Mercurial or SVN-DVCS or something new.
Also, my point wasn't specifically about GUIs per se but about usability overall. Git developers have only very recently, and only very grudgingly it seems, accepted that usability is even a serious concern. Considering that a developer will have an enormous amount of interaction with source control tools (almost as much as with an IDE or build tools in general) usability is obviously a huge factor. Git has a lot of the technical aspects nailed but I would be shocked if it won the current battle for revision control system of the future.
Both Git and Linux are very ideologically pure in their design and construction. This has considerable benefits in some areas (I'm a huge fan of Linux as a server) but leads to a degree of maniacal zealotry in the developer and fan-base which ultimately causes the projects to become self-limiting.
I like Linux. I like Git. I think the technology underpinning both is fantastic. I'd like to see them both succeed. I'm just sad that there are so many zealots peddling the idea that any flaws (and there are many for Linux on the desktop and for Git as a tool for every dev in the world) can be swept under the rug because of the awesomeness of the ideological purity of their construction.
If you sit someone in front of something that doesn't look like Windows, they flip out. My grandma flips out when we try to show her something on our Linux computers, she says, "Where's your icons? Why does this look different? This is crazy."
The sad thing is that a lot of this is Microsoft's fault in the first place. They've used their marketshare totally irresponsibly. Failings in the design and implementation of Windows have made users almost universally afraid of tinkering with their computers because of the possibility of breakages, viruses, and other unpleasant consequences.
Windows is #1 because of its marketshare and that's it. There may have been reasons they got to #1 a long time ago, but those are irrelevant now. What's relevant now is that Windows keeps on trucking because any program or component you pick up at the store will work on Windows, because everyone uses Windows, and you wouldn't make any money selling something that Windows can't work with. Everyone knows how to use Windows; they know to click the Start button, to click on the blue E, they know where things are. It's just like the systems they use at work or school.
For most people, the reason they choose Windows is because Windows is everywhere, and that's it. You won't find many people saying that they want to use Windows because they love the concept of the Start button. They use Windows because they know how it works. A few smaller niches use Windows because a program or a set of programs that are important to them run [well] on it. Very, very few use Windows because of Windows itself.
So, uh, now that we're done with that tangent, I think the Linux community recognizes the need for usability. You should read Planet GNOME or Planet KDE more often; there are frequently posts there about usability studies and improvements on their software. They are making strides. It's just that getting cooperation, funding, etc., is an uphill battle when your installed base is under 2%.
Compatibility and familiarity are features of Windows's ubiquity, not Windows itself. What other reason does one buy Windows?
Back on to the topic of version control, Subversion has a major flaw -- its common operations throw away your data. It deletes your fucking work! That's exactly what a version control system should never do.
Git may have overly-sugary frontends that require a lot of manpage perusal, but one thing it doesn't do is lose your work. (Even "git reset --hard" is relatively safe; just "git checkout HEAD@{0} and it's reversed!)
I don't get how Subversion is simpler, either. Common operations:
To create a repository with Subversion, you have to find some central place to store it, setup permissions, add users, and finally you can import your files. With git it's just "git init; git add .; git commit -m 'initial import'". You can deal with replication later -- right now you can just work.
To checkout a branch with Subversion "svn switch <some long http URL that has to be exactly right or it fails>". With git, "git checkout <branchname>". To merge a branch, "git merge <branch>". To push your changes to the server, "git push". To pull changes from the server without losing data in your working copy, "git pull --rebase". (That operation is not possible with Subversion, "svn update" brings your working copy into an inconsistent state that can't be reverted -- it creates a local branch, but without any tools to manage it.)
Anyway, Subversion is not good. Git is comparatively not that bad.
From a software engineering perspective, svn is probably better. But it's a well-engineered bad design. Git is a poorly-engineered good design. Good designs always beat good implementations. (Darcs is a great example of this -- great code quality, bad model. Still better than Subversion on both counts, though, of course.)
I agree that it'd be nice to see Git's functionality bundled up nicely, but that's not an exercise for Git's devs. Git, as one might expect, follows the normal philosophy in UNIX circles: do one thing and do it well. Adding a nice UI is an exercise for someone who wants to do that, and there are many projects attempting to do things like that, see http://git.wiki.kernel.org/index.php/InterfacesFrontendsAndT... .
Linux is the same way. Linux is just a kernel. It's up to others to throw nice GUIs (or any other program) on top of it. This is happening more and more, though I agree it could use more structure and organization. And for the record, I find GNOME much more usable than Windows.