Why can't SourceTree connect to a CloudForge SVN repository?

My client has an SVN repository set up on CloudForge. According to SourceTree documentation, "click 'Add Repository' and fill in the Subversion URL in the Clone tab. SourceTree will automatically detect that it's a Subversion repository, and give you the option of creating a Mercurial or Git repository locally from it."

That does not occur. Instead, when I paste the https URL into the address Source Path/URL field on the Clone tab, I get "abort: 'https://******.svn.cloudforge.com/****/' does not appear to be an hg repository:" (The stars are me redacting my client's info for this post; the domain and repository name displayed in the error are correct.)

SourceTree is most definitely *not* automatically detecting that this is a Subversion repository. And after Googling for an hour, the only responses I'm finding are "you can't clone an SVN checkout". And this is not, in fact, a checkout. :(

8 answers

1 accepted

So it turns out there are a bunch of dependencies that aren't included with SourceTree and aren't mentioned anywhere in the documentation. To get this working, I had to:

- Install Subversion separately (most easily achieved by installing Xcode, then the Command Line Tools located in Xcode -> Preferences -> Downloads)

- Install Homebrew and then its Subversion Python bindings, per https://confluence.atlassian.com/display/SOURCETREEKB/Hgsubversion+bindings+errors+on+Mountain+Lion

- Install subvertpy, a step not explicitly mentioned anywhere at all.

It would be helpful if the SourceTree user manual's section on Subversion bridging indicated these dependencies. Maybe somebody, somewhere thought these would be obvious... but they're really not.

Unfortunately, while the above changes did enable me to finally clone our SVN repository via hgsubversion, the resulting workflow is a mess: attempting to push more than one changeset at a time (all on the default branch, with no other branches anywhere in the repository) results in:

- Earliest changeset is pushed successfully, and then:

- Push errors out, and leaves the repository in a state with multiple branches (where did they come from?) each containing its own copy of each of the remaining, un-pushed changesets, which I have to clean up manually (and tediously) before I can do any further work.

This has been an incredibly frustrating experience. If everyone else is using this every day without issue, then I'm clearly making some mistake. Unfortunately, nobody seems to have any idea what it is, and when the steps outlined in the documentation amount to "it just works", it creates a pretty insurmountable brick wall. SourceTree is wonderful as a Mercurial client, but at this point I feel like for my SVN needs I should just ran hard the other direction and never look back. :(

Hi Josh,

I think perhaps the problem you've had here is that Mac OS X 10.8 (Mountain Lion) doesn't include SVN. Because I use Xcode SVN was installed (see here). Typically this isn't a problem for people as they tend to install Xcode. If you had installed Xcode then perhaps you removed SVN? I've never had to do any SVN configuration whatsoever, it just works out-of-the-box with Xcode installed.

Many users use the SVN bridge also, and I've never seen this issue crop up before. The things I can see here are either you uninstalled SVN at some point, or you're using Mountain Lion without Xcode installed.

Your information will provide useful however, as this may be the case with other people.

What OS version are you using?

Cheers

I'm on OSX 10.8.4 with Xcode 4.6.3 installed. I've had Xcode installed continuously for a couple years now, but I had never installed the command line tools (never needed them, didn't know they existed). So that part of the problem is clear and easy.

That still leaves the SVN Python bindings situation, though. If you haven't installed Homebrew and subvertpy, or some similar package(s), then where are you getting your bindings from? As far as I can tell, Xcode isn't providing them, either out-of-the-box or via its command line tools.

Hi Josh,

As I know, Sourcetree doesn't suport Subversion, since it's a Mercurial and Git client only: http://www.sourcetreeapp.com/

If it's not right, please raise a support tikcet at https://support.atlassian.com.

Lucas Lima

SourceTree's built-in help specifically discusses Mercurial/Git-to-SVN bridge support, via the included hgsubversion/git-svn plugins. Indeed, this Atlassian blog post http://blog.sourcetreeapp.com/2010/12/14/sourcetree-1-1-released/ discusses the addition of this feature in SourceTree 1.1.

"As well as letting you work with both Mercurial and Git, now SourceTree lets you collaborate with Subversion projects too!

SourceTree’s Subversion support is based on the bridging technologies of hgsubversion and git-svn – this means that you can clone a remote Subversion repository into either a Mercurial or Git repository locally, gaining many of the benefits of using these tools such as increased speed and flexibility. You can continue to synchronise your local repository with the Subversion server, since hgsubversion and git-svn are bi-directional and will convert commits in both directions. SourceTree exposes this as the familiar ‘Push’ and ‘Pull’ metaphors meaning you can continue to work in largely the same way (please read the help for details of limitations in each bridging tool)."

SourceTree obviously doesn't support SVN natively, and is not an SVN client in and of itself. But it is advertised as having the ability to bridge between a natively-supported Mercurial/Git repository, and an external SVN repository, and it's this bridge functionality I'm inquiring about.

Hi Josh,

This should work fine, people use git-svn/hg-svn all the time (I do for testing). It would seem this could be the URL format causing the problem. Can you clone the repository with SVN using that URL format?

Cheers

Yeah, I tried using Cornerstone with that URL and it works just fine. Although it's worth noting I accidentally ommitted the username portion of the URL in my initial post. I'm actually using "https://jsutphin@*******.svn.cloudforge.com/****/".

So the URL (with username) works in Cornerstone, which is a dedicated SVN client, but SourceTree doesn't seem to recognize that same URL as an SVN repository, and instead simply complains that it's not an hg repository. :(

Why do you need/want to explore a SVN repository with SourceTree while there are tons of free tools supporting Subversion without such headaches?

The point is to be able to work with Mercurial locally, and push to SVN infrequently (i.e. at the end of the day). Committing to a local hg repo is fast; committing to a remote svn repo over https is slow.

Hmm..

Faster, but more risky. What about if you lost your local work because your hardware crash?. Are you locally using a RAID storage, for instance?

On the other hand:

1. How much commits do you perform per day and how much big are they? Subversion claims to be clever and compare the changed files with the pristine (original) local copy and send to the server the incremental change (delta) only (not the full modified file).

2. Are you working on an isolate branch? Or you share the branch with others a long the World so you need to see what other people have commited before make your commit? In the last case, does SourceTree really save you time? I would say that SourceTree also needs to communicate (download/upload) with the Subversion server over https to keep you synchronized.

Did you know that Subversion nicely supports a master-slave architecture (svnsync) so you can commit into your local Subversion server (slave) and let it keep you synchronized with the server (master) in a transparent way letting Subversion caring about all the stuff synchronization behind the scene?

1. I do a lot of small commits. I like to keep my history pretty granular, so if I need to back out a change, I can do so pretty accurately without also losing a bunch of other stuff that I *didn't* want to back out. That means the majority of my downtime when committing to the remote server (over https, not LAN!) is not uploading the changes, but rather establishing a connection for each commit. If I did fewer, larger commits, this would be less of a problem.

2. Isolated branch. I'm the only person committing code to the project, so we're only really using SVN as a backup solution (and progress tracking, I suppose) rather than for actual collaboration.

3. I did not know SVN had such a feature. I'm new to it: my past experience has been with SourceSafe (ugh), Perforce, and Mercurial.

Learning (and configuring) a new tool has also a cost. As I know nothing about SourceTree I'm unable to evaluate what it would be the best choice. Maybe some people using SourceTree over the SVN brige could list what are the advantages of using it against a native Subversion tool... for a real development project.

Suggest an answer

Log in or Join to answer
Community showcase
Piotr Plewa
Published Dec 27, 2017 in Bitbucket

Recipe: Deploying AWS Lambda functions with Bitbucket Pipelines

Bitbucket Pipelines helps me manage and automate a number of serverless deployments to AWS Lambda and this is how I do it. I'm building Node.js Lambda functions using node-lambda&nbsp...

710 views 0 4
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you
Atlassian Team Tour

Join us on the Team Tour

We're bringing product updates and pro tips on teamwork to ten cities around the world.

Save your spot