Why opting for Git was a natural choice
kissflow.com
kissflow.com
Svn was designed with the inherent assumption that the context of a developer within any single codebase would be linear
This may be how the engineers in question used svn, but that's certainly not how svn was designed!
Creating a branch in Subversion is not difficult or expensive. It's natural for each engineer on a team to have a separate svn directory containing "private" branches. If engineers are committing unstable code to the trunk, they're doing it wrong.
Git branching is also cheap and quick, unlike svn in which a branching creating a new copy of code. Git also preserves history when branching, unlike Svn.
Subversion uses copy-on-write when creating a branch, so it is not expensive. Subversion also records the branch event in the file's history.
It sounds like the team had a flawed understanding of svn, and was using a terrible workflow. The benefits of the switch are not due to git, but to investing actual time learning a scm tool. That same time invested into learning svn would have paid equal dividends.
It doesn't matter what the server does, it's relatively slow on the client to either switch to or checkout a branch.
Also you could just copy the folder.
Edit: git-new-workdir looks like it makes things convenient.
I use and like git, but multiple checkouts is one aspect of the svn workflow that I miss.
If you have to check out each branch you make, using Subversion gets really slow, really quickly.
Agreed - it's a constant-time operation according to the documentation, and took about 5 seconds for me to branch a copy of thousands of small files.
Git does have some useful features (e.g. committing part of a file), but a change of VCS will not magically solve all your problems if the flaw is with your workflow, code or internal communications.
[1] I believe SVN has improved their merging code in recent years, but this happened after I switched to git.
Here is a detailed explanation on why it sucks http://stackoverflow.com/a/2472251/492561
I don't agree with most of the points in that post. Let's go through them:
1. "It doesn't have merge tracking." That was true at one point: manual merge tracking was indeed a miserable, error-prone experience. But automatic merge tracking was introduced five years ago, so this criticism is no longer relevant.
2. "You have to see everyone's experimental branches." This is not so: you can use any directory hierarchy you like, so you can cordon off experimental branches any way you want. A common workflow is to have a directory per engineer, in which case you don't see their private branches until you go poking around in their directory. And storing private branches on the server (where they get backed up) can only be a good thing.
3. "git better handles sending patches around through uniquely identifiable revisions." Here "uniquely identifiable" means across separate repositories. This is only relevant in a truly distributed system, where there really is no central server containing the truth. For the truly distributed case, git is clearly to be preferred. But most teams really do use a central server. Like github!
Overall, I think the answer is: it doesn't matter much. git and svn in their modern forms are both very powerful and capable tools. There's a few cases where one excels the other: git is better if you have multiple repositories, while svn is better if you have a large quantity of images or binary files. But for most teams, either tool is more than adequate, and it comes down to experience or personal taste.
There is not a Central Server UI for SVN that comes close to Github !
Rebase is very difficult to out-right impossible.
In a short period of time everyone gets up to speed on how things work, and it will all be back to normal. Though this depends on the willingness to embrace the change.
No.
http://thkoch2001.github.io/whygitisbetter/#git-is-fast
> At the end we have great eco-system for SVN. what about GIT?
Aside from the great command line tools, all the IDEs I've tried have integration for git, and all the bug trackers / project management things
I think this should be the real reason anyone should consider moving their codebase from SVN to GIT.
(note, this model works fine when you have a big company machine sat in an office on gigabit LAN to the SVN server - break any of the assumptions there, and SVN quickly deteriorates. I'm not saying git isn't better, just than SVN isn't that bad where I encountered it.)
Even a feature like rebase is which is fairly understandable on the CLI, becomes difficult to use on a GUI
(though we actually use Bazaar where I work, but it's distributed all the same)
I can't afford to not be able to work when my internet connection drops. What if you have a powercut? What if you are on a flight? What if your network goes down?
Also: You have to deal with a central repo. What if that goes down? What if that corrupts? Single point of failure and all.