还有其他解决方案吗,例如"svnbridge"?



我加入了一个新团队,该团队选择tfs 2012来管理源代码,因为它是从vss升级而来的。但据我所知,更多的团队成员喜欢subverion。

在这几口中很难使用tfs,我发现"SvnBridge"可以帮助开发人员使用svn客户端来使用tfs。

我已经成功地在tfs应用服务器上配置了SvnBridge服务器(iis头:tfssvn.mydomain.com,iis端口80)。所以它可以做到这些:

  1. 在资源管理器中浏览文件和文件夹,使用http://tfssvn.mydomain.com/
  2. 在TortoiseSVN中浏览一些文件夹和文件,用户http://tfssvn.mydomain.com/,但是有些文件夹无法列出,也许是具有无效的Charactor,如"R&D"等。"R&D"的父文件夹无法列出,因此它下面的所有foleder和文件都不能列出或阅读(但在原始的Subversion Repository中,目录的名称类似支持"研发"。我已经测试过了。)
  3. 无法结账。无法使用签出所有文件夹和文件TortoiseSVN或svn命令行

SvnBridge(http://svnbridge.codeplex.com/)我使用了它,最新版本v6.2,于2013年9月12日发布,半年前,最近一次登录于2013年10月13日。"讨论"中有很多错误,恐怕项目已经停止了。

我想知道有没有其他像"SvnBridge"这样的解决方案可以支持在tfs上使用svn客户端

SvnBridge服务器的错误日志:

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

如果一个人坚持使用原始(即非git)TFS存储库,但又非常希望个别开发人员通过git-svn或subversion访问此类特定于TFS的内容,那么使用我彻底修改的版本的SvnBridge可能会有所帮助:https://github.com/andim2/SvnBridge
(Announce:SvnBridge上的公告:新版本(经过大力改进))

请注意,原始SvnBridge代码(由前CodePlex网站发布)存在问题(不完整/错误)。我目前的版本有点不那么稳定,但仍然不完全稳定。因此,如果您的用例与使用这样一个相对自定义的工具来访问TFS兼容(即中等/有限的需求,或者更高的需求,但在出现故障并需要调试时有足够的功能),那么我鼓励您尝试一下。

相关内容

最新更新