Subversion Project Migrates To Git
New submitter gitficionado (3600283) writes "The Apache Subversion project has begun migrating its source code from the ASF Subversion repo to git. Last week, the Subversion PMC (project management committee) voted to migrate, and the migration has already begun. Although there was strong opposition to the move from the older and more conservative SVN devs, and reportedly a lot of grumbling and ranting when the vote was tallied, a member of the PMC (who asked to remain anonymous) told the author that 'this [migration] will finally let us get rid of the current broken design to a decentralized source control model [and we'll get] merge and rename done right after all this time.'"
Source for the new git backend.
In related news, Microsoft will be using Gmail for their company email, and Apple will be replacing their workstations with Linux boxes.
This would probably be a good idea for the future of subversion.
.
I've never understood the popularity of git. It may be useful for open source by supporting distributed development but it seems far less useful for a traditional corporate environment. SVN just makes far more sense to me in terms of command structure. If I wanted a DVCS I would probably go with Mercurial. Git is just awful.
Git solves one incredibly important problem: it stops "Linux kernel commit privileges" from being a constant political battle on Linus's part. By making "official builds" pull based, instead of push based, the whole question of "who gets to commit" vanishes and Linus has full control by change, instead of by author - a far less emotional and political thing.
So Git is overwhelmingly better if you're Linus Torvalds. And, hey, that's how open source gets written. If anyone else finds it useful for anything, that's just gravy.
Socialism: a lie told by totalitarians and believed by fools.
discovering git- but I'm actually curious what is awful about it?
Linus's decision to screw over everyone that has ever used SCM by refusing to use normal terms is the most awful part. Instead, as he admitted, he just randomly assigned words to concepts. For example, he randomly picked the word checkout to mean revert. Ditto using the word reset to mean unstage. "git pull" refuses to update the source like a normal system would. Instead you have to do the "git stash; git stash apply stash@{0}" dance. And stash/unstash is not standard in the first place since Bazaar, Mercurial, Perforce, TFS, etc. use the terms shelve/unshelve. The word clone is another odd one. On the topic, the decision to not allow clone to checkout a subset of a repository like is often done with Subversion is a curious one. Another not understanding users is the decision to disallow checking out only the current version of all files rather than every single version of every single file.
His decision to add so many dependencies to make it difficult to run Git on anything but Linux is another awful decision. The msysgit directory on Windows contains 14,589 files in 622Mbytes. A simple SCM should not require over 14,000 files! Finally, the decision to make the server side weak, especially wrt security, is also awful. As Linus admitted, his belief is that you should give everyone full access to everything. That obviously doesn't scale.
Of course, everything below the covers with Git is spectacular. We use it for a 500k file repo, and have had no problems after nine months. Before converting, our developers were wasting hours a week running "svn cleanup." Our artists are converting to it from Perforce, and other than the stupid decisions on command names and decision to not allow checking out just HEAD or a subset of the repo, they've had no problems despite working with hundreds of multigigabyte files.
That choice actually makes sense from the Git model. A Subversion person would ask why there is one command for three+ different things (svn revert, svn switch, svn up -r### are all done using git checkout). But if you turn your head around and look at it from a different perspective, all three of those are doing the same thing: copying something from the repository store to the working copy. From the Git perspective, Subversion is giving three different names to the same thing, each of which only works some of the time.
I don't want to argue Git is right, just that if it has a fault here, Git's is that its terms are at a lower level than users usually think and not that it's inconsistent on this point.
Oh boy. The whole index is a mess of inconsistent terminology. You stage something to the index using git add, unless you're using git add --interactive in which case that process is called updating. And of course you see what the changes are in your index by using git diff --cached. Wut?
(Yes, I know, git diff --staged is now an alias for the last. Good, now all they have to do is deal with the three other synonyms for the same thing.)
Here I also defend git, because I think this is a significant selling point. One major advantage that Git has is that once something is actually added to the store, it's nearly impossible to accidentally lose information. git stash adds the state to the store.
Compare to something like Subversion. Suppose you have a nice change. It's working properly. Now you svn up. Now you get a bunch of hard-to-resolve conflicts. You say "I don't want to deal with this now; I just want to go back to the state I was in before updating." Too bad, you can't (at least any way I know how). You're screwed, because Subversion has caused you to lose information.
Compare to git. You have to run stash before pulling (merging/rebasing technically of course), so now the state of the working copy right before the pull is in the store. You then stash apply. You get the conflicts, say "I give up for now". Now all you have to do is figure out what the SHA1 of the copy that was in the stash is. Might have to do some reflog digging, but it is not only possible but actually pretty easy if you know about the reflog.