I'm sick and tired of manually tracking my branches and merges across my repository! It's too error prone. In a world where everyone seems to get the idea of reducing duplication and automating everything, subversion branching/merging feels like it's left over from the 80's. What is a good alternative to subversion that has excellent branching and merging support without adding the complexity of a distributed SCM paradigm? Ideally it would be free, but if I have to shell out some cash I might be inclined if it's good enough.
22 Answers
Have you upgraded to Subversion 1.5? It includes automated merge tracking. This may address your issue. It sounds like you're already familiar with the tool itself and it's free. So, if you upgrade your current solution to 1.5 you'll have almost no learning curve and zero cost - plus you won't have to go through the pain of porting your existing code to a new source code control system.
Perforce is an excellent tool, but beyond 2 users it will cost you as it's aimed at professionals. We use it with a pretty heavy branching scheme (1 branch per feature during main development) and it works well. Kind of like the "Spider web" branching used by Microsoft (which used a modified older version of Perforce), but I can't find the story online now.
I was also sick of these limitations in old versions of Subversion. Yet no one else in my company uses branching and merging. Each of them, when trying a new feature, got another checkout, hack-hack-hack and got rid of it if was bad - commit when good. Just sometimes they commited something bad ;)
So I've started using git + svn. Meaning: I have svn checkout and in this directory I've started git. Now I have fast merging and branching and I do not interrupt any other. If I need to try new feature X, just branch/checkout/hack-hack. If I need now to take some crucial update from our SVN repo: git stash, git checkout master, svn update, git commit -a, git checkout feature-X, git rebase, git stash apply (all this because git-svn does not work on Windows).
Looks like a lot of operations but they are fast. I mean really fast. And give me the flexibility I need (see my article on git + visual studio).
I think Bazaar can do similar things and might be better at one thing: it can easily support non-distributed, central-repository based development.
Did you ever ask yourself why you have so many branch/merge operations? Is there a way to simplify your development process?
Subversion, IMHO, is a good application of the KISS (Keep it simple, stupid) principle. Translation: In my experience you will get a far greater productivity boost from streamlining your development process than from getting a more complex tool.
You should check out Accurev. It does point and click creation of new streams (like branches, but better IMO), and the whole concept of code flowing through streams makes merging much less painful and frequent a task. It is very simple to administer, has a 3-user free license, and has great visualization tools built in.
I came from a Perforce shop into a Subversion shop and missed the great branching and merging support that Perforce has. So, Perforce would be my first recommendation but then it costs money :).
Subversion 1.5 looks promising for it's merge tracking support but it is marked as foundational and doesn't look like it will have a minimal of merge support that I am willing to accept (i.e. Perforce-like) any time soon.
So, I'm leaning towards a distributed VCS, specifically Bazaar:
- Branching and merging work real well and in the ways I expect
- It can be used with a centralized workflow
- Supports Subversion branches, working copies, and repositories. This means my team can use Bazaar within a larger organization that uses Subversion and still share code with them.
One thing that hasn't been mentioned yet is that it's perfectly possible to use git in the same centralized manner that you're used to with Subversion. It really is an outstanding piece of software.
Just adding to DarenW - For windows there is a really nice Subversion server product that is free and makes life a dream - VisualSVN Server. This packages the latest Subversion build into a single MSI installer and adds in a very useful management console.
Plastic SCM is all about branching and merging... made easy. Check its GUI and compare with the other alternatives.
I've used Clearcase a lot. As long as you are doing your merges frequently it can be pretty effortless and it is also possible to have merge jobs running in the background. You are required to intervene if there is a merge conflict.
However, it is expensive and it can be hard to find skilled Clearcase administrators.
Perforce is free for up to 2 users.
I'm not 100% certain about what you expect can/should be automated, but perforce is very high quality. You can easily create and maintain branches, and you can merge easily. It's quite easy to cherry pick specific changes you made in one branch, and merge them into another branch with a high degree of automation.
This is framed in terms of alternatives to CVS, rather than to SVN, but no matter - it lists several alternatives, including other non-distributed ones. http://better-scm.berlios.de/alternatives/
Branching and merging have been dramatically improved in Subversion, and the problems you describe were solved a long time ago. For example, Subversion supports merge tracking for more than 10 years.
- Modern Subversion versions support merge tracking via
svn:mergeinfo
. You do not need to track merges manually. - Subversion supports automatic reintegration merges starting with version 1.8.x.
- Subversion supports interactive conflict resolution for textual conflicts. Starting with version 1.10.x Subversion supports interactive conflict resolution for tree conflicts.
I'm sick and tired of manually tracking my branches and merges across my repository! It's too error prone. In a world where everyone seems to get the idea of reducing duplication and automating everything, subversion branching/merging feels like it's left over from the 80's.
These problems were resolved in Subversion 1.5.0 that was released on 19 Jun 2008. The current version is 1.13.x.
git - http://git.or.cz/ ( i am quite fond of git, great @ branching and distributed development) - http://github.com/ is a great working example.
I'm probably going to be flamed for this, but if you aren't out for a free product MS Team Foundation Server is worth a look. Unlike other MS products that will remain nameless the source control is solid and fully functional. Combine that with the IDE integration, automated build / test engine and work management functionality and it is pretty awesome. Of course, it is aimed at companies and priced to suit.
Note: I wouldn't bother with this if you don't develop primarily in Visual Studio.
While alternatives to subversion may be nice, subversion with lipstick may do just fine. Here's a review of front ends for subversion that run on Macs: http://www.geocities.com/~karlvonl/blog/2006/03/daddy-needs-new-subversion-gui.html
What do you think is complex about DVCS like GIT? It's simpler in some ways: no client/server, no repo in one place with working dir in another place, user management is not built-in (use ssh if you need it). As Jim Puls said, you can use DVCS like non-distributed if you want. I use GIT for one-man projects, even ones that last only a few weeks. There's nothing exactly like Tortoise, but gitk, qgit, and git-gui are better for those functions than I've seen with SVN. I used to prefer guis, but now I'm quite fond of the git command line - but check out easygit for some improvents.