我加入了一个新团队,选择tfs 2012来管理源代码,因为它是从vss升级的。但据我所知,更多的团队成员喜欢subverion。
在这几个口中很难使用tfs,我发现'SvnBridge'可以帮助开发人员使用svn客户端来处理tfs。
我在tfs app服务器上成功配置了SvnBridge-Server(iis-header:tfssvn.mydomain.com,iis-port 80)。所以它可以做到这些:
我使用的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
答案 0 :(得分:0)
如果一个人坚持使用原始(即非git)TFS存储库,但是非常希望让各个开发人员通过git-svn或subversion访问这些特定于TFS的内容,然后使用我的重新编写版本的SvnBridge可能会有所帮助:
https://github.com/andim2/SvnBridge
(Announce: SvnBridge: new version (strongly improved)公告)
请注意,原始的SvnBridge代码(由前CodePlex网站发布)相当有问题(不完整/错误)。我目前的版本相当少,但不完全稳定。 因此,如果您的用例是兼容的(即,中等/有限的要求,或更高的要求,但有足够的能力,以防出现故障并需要调试)使用这种相对自定义的工具来访问TFS,那么我鼓励您试一试。