•     今天在Visual Studio 2010内试用了一下Team Foundation Server中的版本管理功能,总的感觉是“痛苦”,其实真想找找它的优点,可能是时间花的不够,确实没找到。要声明一下,这个感觉完全取决于你以前用的是什么版本管理工具以及你有多依赖版本管理工具

        我大部分的项目使用SVN或GIT,曾经有一个项目在客户那里用 ClearCase,大学涉世未深的时候也用过VSS。我在项目中是较强地依赖版本管理的,也就是说该用工具的时候就用工具,而不是通过“文件重命名”、 “目录拷贝”、“收发EMail”、“重复修改”、“共享目录”等手段来做版本管理。

        下面总结了我在试用过程中的Pain Point,用过SVN或GIT的人会更有体会。

    * 断网了你就死定了

        打开项目要连接服务器。比如断网时修改一个文件,check out动作需要连接服务器,IDE就挂在那里,直到我受不了了把网线插回去IDE才有反应。如果一直坚持下去,据说会出现警告框,提示文件将脱离版本控制之类的,没有机会验证。

    * 悲观的Conflict策略

        即使修改了文件不同位置,在get latest version后也提示Conflict。

    * 乐观的提交一致性保护策略

        Check In时如果Local Copy不在最新版本之上不会被阻止,而是在某一个文件有Conflict时要求在本地解决,再check in。也就是说会有服务器端的冲突检测,可惜此时服务器上便产生了一个和任何本地版本都不一样的版本,天晓得这个版本会不会工作,在一致性保护上实在是够乐观的。

    * 服务器端Diff

        即使是查看一下本地修改也要连接到服务器才能做到。

    * 本地文件控制策略不透明,不开放,而且具有侵入性

        不像SVN或GIT,所有秘密全在.svn或.git隐藏文件夹内。TFS可以确定的是solution和project文件夹中各有一个版本管理元文件,所有被管理的文件会被“侵入式”地变为只读(在IDE外被更改后会欺骗版本控制,类似ClearCase中的Hijack),再就是通过Source Control Explorer管理了workplace和local path的映射......。

        如果把项目文件夹挪动位置或改名,别指望会成功打开,项目会因binding information找不到和workspace mapping错误而脱离版本控制。事实上,你要先创建一个workplace和新的Local path关联,然后TFS才允许你在新的地方签出同一个项目。

        本地目录的完整路径是和Server上的目录对应的,这个关系不可以改,项目保存的位置不可以随便变。你创建Branch后也不能把本地目录直接Switch到Branch上,要重新get latest version。

        不透明的文件控制策略会让针对版本管理的排错变得困难很多。

    * TFS采用了check in/check out/lock的同步模式

        它并不跟踪真实的修改,即使check out后什么都没改,文件还是修改状态,还需要check in。

    * TFS与IDE的秘密约定导致在IDE之外进行版本管理相当繁琐

        比如对目录和文件做版本管理,需要通过Source Control Explore进行繁琐的操作(与SVN或GIT在资源管理器中的操作相比真是......)

    * 有些操作太复杂,蹩脚

        比如查看本地的所有改动,只能一个一个文件地看,通过右键菜单,每次都要到服务器端做Diff。

        再比如Revert Change操作,看看MVP给的步骤吧:https://msmvps.com/blogs/vstsblog/archive/2009/01/10/how-to-revert-changes-checked-into-tfs-version-control.aspx

        再比如把一个文件从solution中移出,但想保留版本控制,TFS认为你要删除该文件,为你创建了一个delete的pending change,你需要undo这个change才行,或者执行这个删除,再到Source Control Explorer中把它加回来,别扭死了。

        还有到处都是对话框,即使你每次都做同样的事情,还是需要多次点击和选择。

    * TFS内部集成了任务跟踪,Project Portal,Planning,Reporting等功能

        这对大型团队来说确实省了不少事,但对中小团队,唉,又被绑架了。它的敏捷项目管理模板给人官僚的感觉,刚起步的敏捷团队最好是从Story Wall开始。这种集成性降低了灵活性,剥夺了选择的权利,甚至让人懒得去看看外面的世界是什么样的。

    * 安装、配置、维护繁琐

        你需要几个G的空间安装相应组件。

    * 只支持http和https

        在网络条件不佳的环境中速度会有影响

    总结

        TFS为了照顾VSS的客户,同时眼睛还总盯着另一个官僚版本管理工具IBM的ClearCase,最后搞的它和ClearCase一样,功能不少,很强大,就是思路偏了,适合给大领导看,不适合给团队用

        本来点5次鼠标,打开关闭1个窗口就能做的事它要点30次鼠标,确认3个对话框,打开并关闭4个窗口才能做到,同时你还要不断提醒自己到了哪一步了。它压根就不理会程序员此时到底想干什么