有没有像'svnbridge'这样的其他解决方案?

时间:2014-02-17 16:22:21

标签: tfs tfs2012 svn-client svnbridge

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

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

我在tfs app服务器上成功配置了SvnBridge-Server(iis-header:tfssvn.mydomain.com,iis-port 80)。所以它可以做到这些:

  1. 资源管理器中的浏览器文件和文件夹,使用http://tfssvn.mydomain.com/
  2. 浏览用户TortoiseSVN中的一些文件夹和文件 http://tfssvn.mydomain.com/,但有些文件夹无法列出,也许就是这样 有无效的Charactor,比如“R& D”等。“R& D”的父文件夹 不能列出,所以它下面的所有foleder和文件都不能列表或 阅读。(但在最初的Subversion Repository中,direcotries的名字就像 支持“R& D”。我测试了它。)
  3. 无法退房。所有文件夹和文件都无法签出 TortoiseSVN或svn命令行。
  4. 我使用的SvnBridge(http://svnbridge.codeplex.com/)最新版本v6.2,于2013年9月12日,半年前发布,以及2013年10月13日的最新检查。很多错误在“讨论',我担心该项目已经停止。

    我想知道是否有其他一些解决方案,如“SvnBridge”可以支持在tfs上使用svn-client?

    来自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
    

1 个答案:

答案 0 :(得分:0)

如果一个人坚持使用原始(即非git)TFS存储库,但是非常希望让各个开发人员通过git-svn或subversion访问这些特定于TFS的内容,然后使用我的重新编写版本的SvnBridge可能会有所帮助: https://github.com/andim2/SvnBridge
Announce: SvnBridge: new version (strongly improved)公告)

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