Question

I joined a new team which choose the tfs 2012 to manage source code, because it is upgraded from vss. But as I know, more team members like subverion.

It is hard to use tfs in these a few mouths, and I find that 'SvnBridge' can help developers use svn client to work with tfs.

I had succeed configuring SvnBridge-Server on the tfs app server(iis-header:tfssvn.mydomain.com,iis-port 80). So it can do these:

  1. Browser files and folders in explorer, use http://tfssvn.mydomain.com/
  2. Browser some folders and files in TortoiseSVN, user http://tfssvn.mydomain.com/, BUT Some folders can not list, maybe it has invalid-Charactor, like "R&D" etc. The parent folder of "R&D" can not list, so all foleder and files under it can not be list or read.(But in original Subversion Repository, direcotries' named like "R&D" is supported. I have tested it.)
  3. CAN NOT CHECK OUT. All folders and files can not check out with TortoiseSVN or svn command line.

The SvnBridge(http://svnbridge.codeplex.com/) which I used it the newest version v6.2, released on Sep.12 2013, half year ago, and the latest check in on Oct.13 2013. Lot of bugs in "DISCUSSIONS', I am afraid the project had stopped.

I want to know that is there some other solutions like "SvnBridge" can support svn-client using on tfs?

The error log from SvnBridge Sever:

Time     : 2014/2/18 0:09:59
Message  : The remote server returned an error (404) not found.
User     : my-domain-name
Request  : PROPFIND /!svn/bc/45787/CJG/01_Document HTTP/1.1
<?xml version="1.0" encoding="utf-16"?>
<propfind xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="DAV:">
  <prop>
    <resourcetype xmlns="DAV:" />
    <getcontentlength xmlns="DAV:" />
    <deadprop-count xmlns="http://subversion.tigris.org/xmlns/dav/" />
    <version-name xmlns="DAV:" />
    <creationdate xmlns="DAV:" />
    <creator-displayname xmlns="DAV:" />
  </prop>
</propfind>

Exception:
   System.Net.WebException: The remote server returned an error (404) not found.
   at System.Net.HttpWebRequest.GetResponse()
   at CodePlex.TfsLibrary.ObjectModel.WebTransferService.DownloadBytes(String url, ICredentials credentials)
   at SvnBridge.Infrastructure.FileRepository.GetFile(ItemMetaData item, Guid repositoryUuid)
   at SvnBridge.SourceControl.TFSSourceControlProvider.ReadFile(ItemMetaData item)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.TracingInterceptor.Invoke(IInvocation invocation)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.RetryOnExceptionsInterceptor`1.Invoke(IInvocation invocation)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.ProxyFactory.RemotingProxy.Invoke(IMessage msg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at SvnBridge.SourceControl.TFSSourceControlProvider.ReadFile(ItemMetaData item)
   at SvnBridge.Nodes.FileNode.GetContentLength()
   at SvnBridge.Nodes.FileNode.GetProperty(RequestHandlerBase handler, XmlElement property)
   at SvnBridge.Nodes.BcFileNode.GetProperty(RequestHandlerBase handler, XmlElement property)
   at SvnBridge.Handlers.PropFindHandler.WriteProperties(INode node, List`1 properties, TextWriter output, Boolean isFolder)
   at SvnBridge.Handlers.PropFindHandler.WriteBcResponse(TFSSourceControlProvider sourceControlProvider, String requestPath, String depthHeader, PropData data, Stream outputStream)
   at SvnBridge.Handlers.PropFindHandler.HandleProp(TFSSourceControlProvider sourceControlProvider, String requestPath, String depthHeader, String labelHeader, PropData data, Stream outputStream)
   at SvnBridge.Handlers.PropFindHandler.Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
   at SvnBridge.Handlers.RequestHandlerBase.Handle(IHttpContext context, IPathParser pathParser, NetworkCredential credentials)
   at SvnBridge.Net.HttpContextDispatcher.Dispatch(IHttpContext connection)
   at SvnBridgeServer.SvnBridgeHttpHandler.ProcessRequest(HttpContext context)

Stack Trace:
   at System.Net.HttpWebRequest.GetResponse()
   at CodePlex.TfsLibrary.ObjectModel.WebTransferService.DownloadBytes(String url, ICredentials credentials)
   at SvnBridge.Infrastructure.FileRepository.GetFile(ItemMetaData item, Guid repositoryUuid)
   at SvnBridge.SourceControl.TFSSourceControlProvider.ReadFile(ItemMetaData item)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.TracingInterceptor.Invoke(IInvocation invocation)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.RetryOnExceptionsInterceptor`1.Invoke(IInvocation invocation)
   at SvnBridge.Proxies.RemotingInvocation.Proceed()
   at SvnBridge.Proxies.ProxyFactory.RemotingProxy.Invoke(IMessage msg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at SvnBridge.SourceControl.TFSSourceControlProvider.ReadFile(ItemMetaData item)
   at SvnBridge.Nodes.FileNode.GetContentLength()
   at SvnBridge.Nodes.FileNode.GetProperty(RequestHandlerBase handler, XmlElement property)
   at SvnBridge.Nodes.BcFileNode.GetProperty(RequestHandlerBase handler, XmlElement property)
   at SvnBridge.Handlers.PropFindHandler.WriteProperties(INode node, List`1 properties, TextWriter output, Boolean isFolder)
   at SvnBridge.Handlers.PropFindHandler.WriteBcResponse(TFSSourceControlProvider sourceControlProvider, String requestPath, String depthHeader, PropData data, Stream outputStream)
   at SvnBridge.Handlers.PropFindHandler.HandleProp(TFSSourceControlProvider sourceControlProvider, String requestPath, String depthHeader, String labelHeader, PropData data, Stream outputStream)
   at SvnBridge.Handlers.PropFindHandler.Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
   at SvnBridge.Handlers.RequestHandlerBase.Handle(IHttpContext context, IPathParser pathParser, NetworkCredential credentials)
   at SvnBridge.Net.HttpContextDispatcher.Dispatch(IHttpContext connection)
   at SvnBridgeServer.SvnBridgeHttpHandler.ProcessRequest(HttpContext context)

Headers:

Transfer-Encoding: chunked
Content-Type: text/xml
Accept-Encoding: gzip
Authorization: Basic d2FuZG9uZVxyeWFuemh1OjEyMzQ1Ng==
Host: wddevsvr01
User-Agent: SVN/1.8.5 (x64-microsoft-windows) serf/1.3.2 TortoiseSVN-1.8.4.24972
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
DAV: http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
DAV: http://subversion.tigris.org/xmlns/dav/svn/log-revprops
Depth: 1

No correct solution

OTHER TIPS

If one is stuck with original (i.e., non-git) TFS repositories, yet would dearly like to have individual developers access such TFS-specific content via git-svn or subversion, then using my drastically reworked version of SvnBridge might help: https://github.com/andim2/SvnBridge
(announcement at Announce: SvnBridge: new version (strongly improved))

Note that original SvnBridge code (as published by former CodePlex site) is rather problematic (incomplete/buggy). My current version is quite a bit less so, but nevertheless not fully stable. So, if your use case is compatible (i.e., moderate/limited requirements, or higher requirements yet sufficient capabilities in case something fails and needs debugging) with using such a relatively custom tool to access TFS, then I'd encourage you to give it a try.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top