If you have been reading this blog, then you know that we recently held a webinar on Subversion in the Enterprise. The attendance at this webinar was amazing and we received a lot of questions from attendees during the webinar. I was assigned to answer the questions that related to Subversion tools, since that is my particular area of expertise. So, without further ado…
Does Subversion have a source file differencing tool? Can a third-party differencing tool be supported?
Yes and yes. Subversion includes the diff command. The only limitation it has is that it will only work on files that are managed by Subversion. You cannot use it to difference two arbitrary files, it has to be files within Subversion. However, you can also use it to produce all the differences between two branches or the current trunk and a tag, or just the changes you have made locally in your working copy. The svn diff command can also launch a third-party diff tool if you have one that you prefer. Finally, the Subversion graphical clients I have used (Subclipse, TortoiseSVN etc.) include a graphical diff tool and can also be configured to work with external tools.
I had a recent post about the diff command on this blog. You might take a look at that post to see some examples of how diff can be used and the syntax of the command.
Can you recommend a Web-based client tool for Subversion? TortoiseSVN is great, but it requires us to load software on the user’s desktop.
I assume you are talking about an actual web-based Subversion client. I am not aware of any that exist, although I have seen people express interest in writing one. So it is possible there are some that exist in some state of development. The truth is that it would be a difficult task to write a good web based client. You would have to recreate all of the Subversion features in the web client and then somehow implement those features on behalf of the user on the web server.
Does CollabNet offer anything to help integrate Subversion with a development environment such as Eclipse?
I am one of the project owners of the Subclipse project which provides support for Subversion inside of Eclipse. The Subclipse team (specifically me) works closely with the Subversion developers to help define the features and API we need to develop a good Eclipse client. There will be a number of enhancements to Subversion coming in the 1.5 release which were specifically added at the request of the Subclipse team and our needs. Of course these enhancement benefit everyone, but we helped define the "itch" so that the developers would "scratch" it.
What clients would you recommend for Eclipse and also Visual Studio?
As a project owner for Subclipse, I would obviously recommend Subclipse for Eclipse. Subclipse has been around for several years and is a mature product that implements all of Subversion’s features and has a strong user community. On the Visual Studio side, I would look at two tools. AnkhSVN is an open source project that provides support for Visual Studio 2003 and later. I have heard lots of positive comments from people that use it.
VisualSVN is a somewhat recent entry on the commercial side. I think what they are doing is interesting and the price is very reasonable. They have taken the approach of building their client on top of TortoiseSVN which I think is a great idea because it gets them access to a very full featured user interface and lets them focus on adding the value that is needed to make a good Visual Studio integration.
I do not develop in Visual Studio, so I have never used either product.
Which Eclipse plug-ins support refactoring through the Eclipse context menus?
Subclipse has always supported refactoring within Eclipse. If you perform a refactoring operation that renames/moves a file, Subclipse sees this happening, intercepts the operation and performs it using Subversion so that Subversion knows about it. There are some limitations in Subversion itself that might give the perception that Subclipse does not support refactoring.
- Subversion does not allow a file/folder to be renamed/moved twice without a commit in between. Subversion trunk code has been enhanced to remove this limitation, so it will be available when 1.5 is released. Subclipse refactoring support will be a lot better because of this change. I have already made the changes in Subclipse to leverage this Subversion change and refactoring now works really nicely. That being said, refactoring works nicely today if you are aware of the limitations and can work around them.
- Subversion’s support for move/rename has some limitations that can effect you when doing an update or merge. You can see a detailed explanation in this post on my personal blog. A short explanation is simply that if you have made some changes to a file, and someone else renames the file and commits the rename, when you do an update, Subversion does not transfer your changes to the renamed file. Subversion is smart enough to not delete the local file with your changes, so you can at least copy them over to the new file manually. Ideally, it would do this for you. The Subversion developers recognize the need to make this improvement, so hopefully it will come in a future release. It is a difficult problem for them to solve and is not planned for the next release (1.5).