Collaborating on GitHub with Subversion
github.com
github.com
* every day claims "subversion doesn't have merge conflicts"
* every day decides that "branches should be taken out of git, they are too confusing"
* refuses to accept that master is not special other than by convention
* regularly requires someone else on the team to take 30 minutes cleaning up his stuff
* since he doesn't get git, he will have his code changes scattered around 5 different clones of repos and do hand merging because it is safer. (he did this with svn too :/)
* wishes that TFS would just hurry up and have a git bridge because git isn't enterprise enough, and therefore not production ready.
There are more...
Anyway, he's a good coder and useful in what he does well, so it's not a case of "bad develper", he just has blind spot when it comes to version control. I presume he's not the only one.
My SVN workflow works fine. My non-branch workflow:
* Step 1: Do my work. Commit very often -- every time I implement a small granular piece. I keep the unit tests running. Other people see my commits immediately. This is simple, communication flows easily, and I'm not thinking about version control.
My branch-based workflow.
* Step 1: Create branch. svn cp ^/trunk ^/branches/feature-whatever && svn switch ^/branches/feature-whatever
* Step 2: Do my work. Commit often. Other people see my commits immediately. This is simple.
* Step 3: Run svn merge ^/trunk. Fix the occasional merge error caused by two people working on the exact same code at the same time. This is simple as long as I communicate with the team. It's easy to communicate with the team, because they all see my regular commits, and I see theirs, and so I know if we're stepping on any toes.
* Step 4: Merge my work to trunk (possibly after review). svn switch ^/trunk && svn merge ^/branches/feature-whatever
I hate the constant badgering from git proponents. They all want me to use a more complicated tool that doesn't offer any advantages to what I see as a simple, seamless workflow. I want my SCM to stay out of my way entirely. If I could avoid even thinking about it, I would.
My job is to write code, not to spend a bunch of time juggling local/remote commits in a complex SCM tool.
I've worked through the industry transitions from RCS to CVS, CVS to SVN, and introduction of SVK, Mercurial, darcs, and now git. Despite being a part of all those industry transitions, I've never seen such religious proselytizing and scorn from any SCM "proponents" as I've seen from git advocates.
You are not forced to have local branches and commits that you didn't push to the main repository, but having them as options is a step forward. Also I can't imagine SVN working as good as git in the open source realm.
As for OSS, I'm much happier with the results of the PostgreSQL or FreeBSD development communication models than I am with the results of git/Linux style of development coordination. I think it's fair to judge by results.
If I want to I can alias git commit && git push, so that I don't have to type two commands to achieve something that can be done with one in SVN, I really don't see that as a big deal.
The thing that bugs me about a lot of SVN users is that they are afraid for branching. A lot of them thing that updating specific files instead of the whole tree is a good thing.
Sure there are some projects where SVN is good enough, but sometimes you just feel the need for the features of git.
I think Linux is doing a lot better than FreeBSD. :)
Control, complexity. Same thing. I don't need control, I need the SCM to make my commits available to everyone immediately and get out of my way. Any time I spend twiddling the SCM system for asthetic reasons, or because I don't want to share my work until I'm ready for other people to see it, is wasted time that serves no code or communication advantage. We're software developers, not SCM operators.
Git appeals to certain aspects of human nature that make the tool appealing, but are fundamentally negatively impacting on communication and the development process.
> I think Linux is doing a lot better than FreeBSD. :)
Not in terms of code quality, it's not. MySQL is also more popular than PostgreSQL, but there's no technical comparison.
* Step 1: git checkout -b feature-whatever
* Step 2: git commit -a (for all changes) OR or git add file1 file2; git commit (for specific files) OR git add -p; git commit (for staging specific changes within files)
* Step 3: git fetch origin master:master; git merge master OR git pull origin master (while your feature is checked out) OR git fetch origin master:master; git rebase master (to replay your changes on top of master, which is cleaner and avoids a merge in history)
* Step 4: git checkout master; git merge feature-whatever; git push origin master
Is that really so much harder? Plus if you use the rebase option for Step 3 you don't get an ugly pointless merge.
I mean I really dislike Visual studio and C#, but for reasons out of my control, we have to use it for a couple of projects. I could complain the whole time how it's not what I want, but instead I'm just doing it, because that's the job right now. I don't make the guy who doesn't like git (but is good at VS) come fix my environment or undo my mistakes every 3 days.
My point was, the github svn support at least mitigates that scenario, whether or not it should happen.