TFS作为源控制:你喜欢什么?你讨厌什么?

jco*_*lum 17 tfs tfs2008

我现在已经使用TFS大约18个月了,我真的不为此感到兴奋.这似乎是目前市场上最糟糕的SCM版本.

我认为这个线程将帮助人们决定TFS是否适合他们与其他源控制系统.虽然TFS做的远不止这些,但我认为源代码控制对软件开发至关重要,因此您选择的任何系统(或其组合)都需要首先考虑源代码控制.

TFS与其他源代码控制有什么好处 - 没有其他人做得好吗?

TFS对其他人似乎做得很好的事情有什么不妥

Jas*_*ams 34

优点

  • 从根本上说,它是一个完善的系统.坚固可靠.
  • 与工作项目,报告等相结合
  • 电动工具非常好.
  • [编辑]它正在改善,并在2010年,2012年,2013年取得了很好的进展
  • TFS对于自定义工具非常易于访问.有一个丰富的API,可以很容易地编写仪表板和其他工具来获取TFS中的数据.由于所有数据都存储在SQL中,您可以根据需要浏览并直接查询.多年来我一直与许多不同的SCM合作,从未找到过如此开放和可访问的SCM:一切(用户故事,任务,错误,问题,测试计划,迭代,源代码控制和分支,构建,单元测试,持续整合)就在您的指尖.这是TFS的一个很棒的功能.TFS的许多UI失败已经在几个下午为我的团队编写工具和仪表板来解决.让我们面对现实,如果你自己编写,它就完全符合你的需要.

缺点

  • 有一个区域的健壮性失败了:如果你在"一次性"中对文件应用多个更改(添加,重命名,编辑),那就会让人感到非常困惑.如果您不单独检查这些操作,那么当您跨分支合并这些更改时,TFS2005和TFS2008都会崩溃.在2010年以后它不再崩溃,但它通常无法正确检查更改,因此您必须进入并清理一堆丢失和错误命名的文件.

  • 没有独立的源代码控制浏览器.它被集成到VS中,当你想要处理源代码控制项而不需要运行VS的另一个副本时,这真的很烦人.当然,你可以给你的艺术家一个团队资源管理器,但让我们问问自己,一个艺术家是否只想查看文件,签出,签到,而且GLV真的需要一个完全复杂的VSTS实例来实现它吗?此外,集成非常糟糕,以至于您无法实际使用解决方案资源管理器中的TFS(它只是关于您已检出的内容,并且当您从该窗口应用操作时很快就会学习打开源代码时这是不可靠的控制窗口和工作在那里,它首先集成了它的位置)[编辑:文件浏览器扩展非常好 - 接近独立的浏览器 - 并且简单易用.它的主要缺点是缺少与文件命令的正确集成 - 重命名或删除你必须记住使用TFS子菜单的文件,或者你将在本地重命名/删除这完全搞砸了源代码控制,因为TFS对你所知的改变一无所知取得了.不幸的是,这意味着只有"高级"TFS用户可以信任使用它.所以,基本上,对于大多数用户来说,它仍然是"没有独立浏览器"的情况]

  • 用户界面很糟糕(但正在改进,至少在Web访问方面).当然,它有效,但有很多可以做到的,使其高效,愉快,使用更加万无一失.例如[2012年之前]当您单击"签入"时,它会勾选所有剩余的未签入项目,这样如果您将来不小心再次单击"签入",它会检查您不想要的大量内容.在此之后,提供"撤消最后签到"选项以快速回滚它是如此容易 - 但没有一个.[编辑:UI得到了改进,但这些具体问题仍然存在于VS2010中,虽然它现在有一个登记确认对话框,可以降低意外登记的风险] [编辑:在2012年它会好得多,但他们已经疯了,将所有单独的TFS对话框卷入一个窗口,这是一个严重的倒退.挂起的更改窗口与2010年的工作方式差不多 - 找到的东西比较难,需要更多的点击才能实现相同的功能,如果您从任何地方签入文件,所有当前"包含"的文件都会被删除进入'排除'所以,如果你有几件东西,他们都混在一起]

  • 工作区.在大多数情况下,每个团队成员必须具有基本相同的工作空间映射,从属于本地根文件夹.我们需要定义7个映射,大约需要5分钟来设置.无法从服务器推送工作空间定义.没有[edit] easy [/ edit]方法来复制工作区,因此您可以使用现有工作区(或其他用户)作为起点.不,您必须手动重复输入所有绑定,一遍又一遍.如果您在源代码管理资源管理器中更改了活动工作区,则它不会同步到您的挂起更改窗口,因此您需要花费15分钟来了解为什么您从其他分支合并的文件未列出.[编辑:2010/2012这种情况越来越好,因为您可以在其他PC上看到工作区并更轻松地复制和粘贴它们,但它仍然是一个非常笨拙的用户界面]

  • 它具有变更集,但您无法将项目捆绑到待处理的签入列表中的单独变更集中,就像在Perforce中一样,您只能通过实际检入变量集将它们与变更集相关联.您实际上一次只能处理一个变更集,或者你必须在办理登机手续时手动将待办事项列表中的文件分开.[2012年仍然很差]

  • 合并工具很糟糕.如:依赖于自动合并,它们根本不起作用,并且不必要地在代码中引入错误.这些工具和1994年我第一次使用SourceSafe时的工具一样糟糕.所以在购买非常昂贵的 VSTS许可证后,你要做的第一件事就是用实际工作的东西替换合并工具.这意味着每次出现合并冲突时,都必须选择每个文件.选择解决冲突并确定.选择使用您的第三方合并工具,然后确定.然后合并.然后保存.然后选择接受合并的更改.(你应该能够选择"自动合并"并让它只使用实际工作的第三方合并工具,而不会遇到一连串无意义且烦人的对话框,总是默认为错误的选项)[编辑:InVS2010合并工具仍然很糟糕.但前端用户界面得到了很大的改进(合并冲突现在只需点击一下,而不是4或5次点击 - 当你必须合并许多文件时,这是一个巨大的改进] [2012年有进一步的改进,但它们仍然是'好的'而不是好的]

  • 它不会在运行的VS实例之间同步.因此,如果您在一个VS中签入文件,则另一个文件仍将在您的待办事项列表中列出该文件.(显然很容易同步它,因为电动工具windows-explorer扩展所做的任何更改都会立即反映在VS中).[编辑:2012年他们已经解决了这个问题.现在,每次切换到挂起的更改视图时,它都会刷新15秒(在2010年它会缓存并立即显示,但偶尔会过时)]

  • 分支是目前工作的标准方式.因此,您希望分支/合并工具能够快速轻松地完成此任务.但不是.[编辑:2010年和2012年取得了重大进展,但合并得到了极大的支持 - 这实际上是劳动密集型的.只是能够合并一组连续变化的小东西,所以如果要合并5个不连续的变更,你必须逐个进行,但每次打开对话框时都会从头开始而不是记住你去过哪里,你上次合并的内容,可用的变更集列表等等.你应该能够选择你想要的任何变更集,它应该自动完成剩下的工作.

  • 如果你的GLV(获得最新版本)解决方案,并且其中的一些项目已被更改,VS会反复询问您是否要重新加载每个已更改的项目.关闭您的解决方案,然后GLV,然后再打开解决方案比打开它的GLV快约10倍.如果我是GLV,那么我当然想重新加载项目!当我在超市买食物时,他们不会问我每件物品"你想把这件物品带回家吗?".[编辑:VS2010仍未破] [已于2012年修复.华友世界!]

  • [edit]如果两个团队成员将新项目添加到解决方案中,那么当第二个人去办理登机手续时,他们必须(显然)解决合并冲突.但是,TFS将.sln视为文本文件,并将其破坏(它添加了两个项目条目,但项目计数实际上只增加一次).修复sln格式以使文件可合并是如此容易.

  • [edit]我没有在"解决​​方案资源管理器"窗口中执行任何源代码控制操作,因为自"集成"首次出现以来,它一直相当不可靠.即使在2008年,它通常会在未检出的文件上随机显示"已检出"图标,而递归操作有时会做出奇怪的事情.几乎每个源控制'故障'​​都是由于有人从Solution Explorer开始操作而导致的.幸运的是,无论如何,我更喜欢在Source Control窗口中工作.[2012:对不起,不能告诉你这是否已修复,因为我自2008年以来没有使用过这个功能]

  • [edit]从Source Control Bindings窗口开始的位置?VS可以说"你的源代码控制设置已经被破坏了,没有明显的原因.我永远无法解决星期四的问题.我能解决这个问题吗?[是]",但相反,它显示了一个复杂,令人困惑的对话框对任何人都没有意义的信息,导致UI如此可怕,以至于它使初级程序员自成一体.诀窍是忽略整个窗口,隐藏在桌面后面并单击"修复它"按钮,然后修复它.

  • [编辑 - 添加12/2010]当您获取源代码时,特别是在解决合并冲突时,其他窗口通常会被带到前面(解决方案资源管理器会跳转到我的Pending Changes视图前面,我已将其停靠在同一选项卡中区域,或源控制窗口在另一个文档窗口后面消失.当你有另一个要合并的文件或另一个文件夹来获取时,这真的很烦人,因为你必须继续"找到"源控制/待定更改窗口.获取代码不应该不断重新排序我的文档/工具窗口.[2012:仍然破碎]

  • [edit - added 1/2014]使用TFS 2012/2013,可以选择服务器或本地工作空间.服务器是旧系统的名称,您必须与服务器联机才能检出文件.Local是新的默认值,并在您的计算机上复制整个源存储库,允许您对任何文件进行编辑,而无需先检查它们.TFS然后根据其本地副本区分您的文件以计算您更改的内容.这听起来不错,对很多人来说这可能是好的,但它有一些你应该注意的严重缺点:

    • 当您不再检出文件时,它们在编辑时不会被锁定,因此有些人可以同时编辑任何给定文件,在签入时需要合并操作.这对于基于文本的源代码文件很好,但是当文件不可合并时,会导致困难或丢失工作.不可合并或不可自动合并的文件包括解决方案,项目,资源(resx),XAML和任何其他XML文件 - 因此这会在开发环境中导致许多问题.如果(像我们一样)您还希望在源代码管理下存储Word和Excel文档以及二进制文件,那么本地工作空间是非常危险的.我们已经失去了几天的工作,因为有人不知不觉地使用了本地工作区,然后合并他们的更改是不切实际的.您可以重新配置TFS服务器,使服务器工作区成为默认设置.

    • 随着本地工作区,你必须保持2个一切拷贝到电脑上.当我们升级TFS时,我们突然发现每个人都丢失了25GB的磁盘空间,花了几周的时间才找到磁盘空间已经消失的地方!这对我们来说是一个主要问题,因为我们都使用固态硬盘而且现在(2014年)固态硬盘已经变得越来越大/越来越便宜,以至于我们可以用磁盘空间来实现这么低效.

    • 在我们使用本地工作空间的几周内,我们发生了几次TFS损坏文件或丢失更改的事件,可能是由于实施中的错误.很简单,我们不能接受任何低于100%可靠性的源控制系统.

    • TFS变得更容易管理; 如今,如果您不想过多地定制任何东西,您可以在很短的时间(小时)内设置服务器,并且设置持续集成构建和备份等非常容易.另一方面,虽然我发现设置TFS数据库的备份非常容易,但是恢复该数据库并在我们的服务器自身崩溃之后启动并运行是另一回事 - 花了4天的时间来解决所有不必要的阻塞问题(例如,你必须从网络驱动器恢复备份,数据不能是本地的.当我试图将图像恢复到重建的服务器时,TFS一直告诉我没有可以恢复的数据库.当我越过那个,TFS不会使用这些数据库,因为它们与主机服务器不匹配(因为该服务器已经消失,操作系统已经重新安装).需要大量的搜索和修补才能恢复备份.恢复应该"只是"工作"!

正如您所看到的,上面的大多数只是简单的UI抱怨.关于UI有很多可以改进的地方.但实际的基础产品是好的.我更喜欢TFS,而不是我过去28年来使用的所有其他SCM.

我甚至不介意这么糟糕的用户界面,除了它是开发人员必须在一小时内使用的核心用户界面之一,他们必须付出这么多才能获得它.如果来自单个开发人员的订阅资金用于改进UI,则会对TFS的可用性产生巨大影响!这是痛苦认为TFS仅仅是还是OK的时候它可以轻易被优秀的有位漂亮的用户界面.

  • 请注意,虽然它不可发现,但您可以非常轻松地复制工作区映射.编辑工作区,单击第一个映射,shift +单击最后一个映射,按Ctrl + C复制到剪贴板.现在,您可以将这些映射粘贴到新工作区中. (3认同)
  • 有人在乎解释他们为什么会被投票?我的答案不是咆哮,它是我日常使用TFS中最大问题的事实清单,(我只是信使,而不是没有解决这些非常实际问题的团队).话虽如此,我的团队仍然使用TFS,尽管有这些烦恼,因为它是一个很好的SCM,如果有时使用令人沮丧.如果您认为我错过了重要的赞成点,那么为什么不简单地添加自己的答案呢? (2认同)

kub*_*ubi 13

  1. 除非您已将其检出,否则不会跟踪文件更改,因此如果您在Notepad ++中编辑文件,则TFS不会发现任何更改.
  2. 有人可以很容易地检查一个fille并将其锁定,以便其他任何人都无法进行更改.TFS不应该放弃这种能力,但它肯定会使它比现在更难做.
  3. 撤消提交或两个提交的方法非常不清楚,以至于我无法确定它是否有效.
  4. TFS使文件只读的方式除非你检查它们是令人讨厌的,虽然它确实帮助我记得在保存我编辑的文件之前检查文件.

  1. 我认为与visual studio的内置集成很好,如果你喜欢那种东西(我没有)

  • 从第四个开始(与第一个相关) - 只有锁定它们才有意义,必须明确检查它是原因的一个很好的部分.在您开始工作之前,您没有隐含的文件"所有权".如果"修复"锁定对您的团队来说是一个很大的灵丹妙药,请与管理员讨论拒绝锁定权限.至于"撤销",我很高兴除了从命令行回滚之外它并没有真正构建."撤消"改变了历史.我宁愿看到开发人员检查以前的版本,并强制签入解释他们为什么要做某事. (2认同)

小智 9

我是Microsoft的Team Foundation Server团队的成员.这里提出了很多非常有效的问题.其中一些在2010版本中得到了解决.其他人仍然是问题,但我们确实认识到它们并且正在努力改进下一版本的开发人员体验.像这样的讨论非常有助于我们确保解决正确的问题.

以下是有关2010版本至少部分解决的问题的一些信息:

独立客户

对于想要在VS之外使用该产品的非开发人员客户,他们可以使用Windows Shell扩展powertool.

如果您有用户(开发人员或非开发人员)需要从非Window计算机访问TFS,他们可以使用Team Explorer Everywhere.包括Mac和Linux在内的平台都支持此功能.

复制工作区

今天有两种方法可以复制工作区.第一个是在cmd行使用workspace template命令.防爆.

Tf/workspace/new/template [要从中复制的工作空间名称/所有者]

或者,您可以在UI中打开工作区,选择所有映射,复制它们,然后将它们粘贴到文件/电子邮件中.其他人可以将这些相同的映射粘贴到他们的工作区中.

如果您可以简单地指定客户端自动接收的默认工作空间,那肯定会很棒,但我们今天没有.

合并稳健性

在TFS 2010中解决了在合并时执行添加,重命名,添加然后出现问题的方案.

Branch/Merge是一流的体验

在TFS 2010中,分支现在是TFS中的第一类对象.您可以可视化分支,甚至可以跟踪分支中的变化.分支现在也是基于服务器的快速操作.

获取多个项目的最新版本

您可以通过在源代码管理资源管理器中选择TFS实例节点然后选择"获取最新"来执行此操作.这相当于根文件夹($).

文件锁定

默认情况下,TFS在用户签出文件时从不锁定文件.这是我们在Microsoft使用TFS的方式以及我们如何看待使用TFS的大多数客户.可以使用户明确锁定文件.一些客户认为这是可取的,但它不是默认的路径体验.


jco*_*lum 6

Con:Checkout模型.许多应用程序不能很好地处理标记为只读的文件,然后更改为可写(Word 2007,记事本).所以你打开一个文件,编辑文件,尝试保存,然后你被告知你无法保存,因为它是只读的.很好,现在你必须另存为...,删除原始文件并将新名称重命名为旧名称.如果将本地文件设为只读是有好处的话,我看不到它.我真的更喜欢Subversion的方法.

将文件设置为只读的一个好处是它会提醒您检查它们.然而,这实际上只是结账模式的一个症状.