0

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

这几口用tfs比较难,我发现'SvnBridge'可以帮助开发者使用svn client来使用tfs。

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

  1. 资源管理器中的浏览器文件和文件夹,使用http://tfssvn.mydomain.com/
  2. 浏览 TortoiseSVN 中的一些文件夹和文件,用户 http://tfssvn.mydomain.com/,但是有些文件夹无法列出,可能它有无效字符,如“R&D”等。“R&D”的父文件夹无法列出,所以它下面的所有文件夹和文件都无法列出或读取。(但在原始Subversion Repository中,支持名为“R&D”的目录。我已经测试过。)
  3. 不能退房。所有文件夹和文件都不能用 TortoiseSVN 或 svn 命令行检出。

我使用的SvnBridge( http://svnbridge.codeplex.com/ ) 最新版本v6.2,半年前发布,2013年9月12日,最新签到2013年10月13日。很多bug在“讨论”中,恐怕项目已经停止了。

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

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

1 回答 1

0

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

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

于 2018-03-15T13:30:02.463 回答