总结TFS 11版控件改进

[原文发表地址] Wrapping up TFS 11 Version Control improvements

[原文发表时间] 2011-09-01 12:28

这是我“开发者都是疯狂粉丝”TFS功能系列的第三篇博文。第一篇是关于工作空间改进的,第二篇有关兼并。而这篇文章则是总结性文字,囊括了这个版本的其他控件改进。还有一些仍在改进过程中,我还没办法详说,不过这篇文章应该把大部分都包括了。

 

团队资源管理器

可能我还没谈过的最大的改进是团队资源管理器和未决改变窗口。我之后会写一整篇博客来说一下我们对团队资源管理器做的改进,所以现在我只想关注其中一小部分。你最该知道的就是团队资源管理器工具窗口不再是简单的树控件了。它现在还是一个“画布”,我们集合了许多体验,能让你在其间进行导航。我们所作的其中一个改变就是把未决改变窗口合并到团队资源管理器。

 

我这里给你们看的用户界面不是最终的—我们还在完善改进中(尤其是导航部分),不过已经初具成效了。总的来说,我们是想简化界面避免杂乱无章,因为在现在的工具窗口中,太过复杂,视觉负担太重。下面是团队资源管理器中全新的未决变化页面,下面还有一些关于这个变化的评论。

 

clip_image001[8]

 

我想指出几点:

 

1. 窗口有垂直方向,默认和解决方案资源管理器共享空间。

 

2. 查看文件列表更为简便。它是一种合理压缩的树视图,而不是逐字写更改类型,更有视觉效果([+]代表添加, [oldfilename]代表重命名strikeout代表删除等等。)结果不会那么杂乱,看上去更简单了。对重命名文件来说,我想让你注意一下2010版中的重命名。

 

3. 你会注意到现在没有复选框了。不过我们有“包括”和“除外”变化。你可以在他们之间拖拽。你上传时,只有在“包括变化”中的文件才会包括在上传的文件中。除外变化也包括检测到的变化函数,我在之前的工作空间那篇博文中提过。

 

4. 如果你仔细看,你会发现我们新增了“用ID添加工作项”命令,这是在2010中没有的(你只能选择一个查询结果),是一个更好的请求功能。

 

5. 每个组件都可展开或者折叠以移除杂乱。

 

6. 如果您的签入规则相悖,组件就会有显示,如果正常,就不会显示—这样就减少了杂乱。

 

7. 如果你的签入说明被定义了,那就会显示签入说明。我们默认设置为无,所以你在上面也不会看到。

 

正如你看到的,其余命令在“更多”下拉条中:

 

clip_image002[8]

 

总的来说我觉得管理未决变化是一个重大改进。

 

友好的名称

我们在开发TFS2005(那是很久之前了)的时候,我们在产品中每一处都显示每个人的域名(比如redmond\bharry)。在之后的试用版中,我们收到许多反馈,说这点对许多顾客来说都很不方便。许多顾客的windows用户名都是随机的数字和字母—看上去就好像是mycompany\Q27f01。没人知道那是谁(甚至主人自己都不知道)。现在要把整个产品进行改变为时已晚,不过我们设置了一个变化工作项来追踪以使用“友好的名字”(比如Brian Harry),让产品其余部分使用域名(比如redmond\bharry)。这个的确平息了问题,但我们发现好像没有时间在TFS 2008和TFS 2010中完成这个工作。终于,现在是时候嘞。现在只要用户名出现,就会同时有友好的名字了。让我们现在来做这个工作的最终动力就是在互联网中没有域名,(Google,Facebook,Live ID等等)。为了在我们的主机服务上显示用户名,我们不得不大幅度重新安排如何管理用户名。

 

下面是源代码控制资源管理器的截屏,它显示了我的完整名字,不仅仅是域名:

 

clip_image003[8]

 

为了让那些习惯用域名的人有一个平稳的过渡(他们习惯在视觉控制中使用它们了),我想说我们在任何位置(视觉控制中)都接受用户名的输入,无论是友好名称还是域名,都可以完成同样的工作。

 

减少模态

还有一个我知道的大家都不喜欢的就是模式对话框的顶部有太多的模式对话框。在TFS2010中,我们有太多这样的问题了。最严重的缺点就是模态会导致你锁入用户界面的部分,无法进入用户界面的其余部分来调查其他相关信息。而且堆放的对话框很杂乱,我们必须引进新的命令安装,因为你无法进入主菜单/工具栏等。我们已经尽力减少产品中的模态了。在文档中显示更多,还有团队资源管理器等。我在上面向你展示的团队资源管理器窗口登陆就是一个很好的例子(我们现在在用户界面中很多位置使用它,比用未决变化窗口还多)。而且在文档中让“比较”使用VS编辑器也产生了一种非模式的体验,相对于使用外部比较工具。我还想举的一个例子就是shelveset。整体的shelveset体验本来就像是堆放的模式对话框体验。现在再也不是这样了。你仔细观察未决变化组件的“更多”内容菜单,就会发现有“找到Shelveset”的选项。模仿了2010中的未决变化窗口中旧版的“unshelve”按钮。不过,除了发布一个模式对话框,它还会在团队资源管理器窗口中打开新的方框,如下所示:

 

clip_image004[8]

 

需要注意的事项如下:

1. 我还可以由shelvest拥有者进行筛选(这是默认筛选到我的shelvesets)。我可以输入“Brian Harry”或者“redmond\bharry”,得到的结果是相同的。

 

2. 我还可以通过shelveset标题中的文本进行筛选(“在此输入筛选列表”框),对那些有很多shelveset的人来说,是很上手的(我觉得这样的人还是很多的)。这是一个增量—在你输入筛选时只要键入你想找的就可以了。

 

3. 我们提供了一种更好的显示模式,让你知道shelveset的历史时间,而不是简单的创建日期。

 

4. 我只要找到我想要的shelveset,就不用点击“详情”按钮,获取一个模式对话,我只要双击就会出现一个shelveset详情框,可以在shelveset中操作文件,这和在其他地方的操作一样。我添加了一个图片。注意这和上面展示过的未决变化窗口惊人地相似。另外,再注意我配置了一个登陆说明(地理位置),在方框的底部显示。我还拆分了注释部分,并用shelveset相连了一个工作项。

 

clip_image005[8]

 

许多地方的Changeset详情(比如历史,注解等),现在这些也将变得无模式化了。

 

异步操作

我在这个系列的第一篇博文中谈论过离线问题以及本地工作空间的响应能力优势,那就是无需连接服务器来工作。我们也增强了用户界面来让那些必须连接服务器的工作做起来更顺畅。我们通过创建一些异步操作(比如历史,注释,源代码控制explorer)来实现这个。我们做的异步变化中,一些是根据我之前说的模态变化来的。要等待一个模式对话异步是很困难的。你想开始着手其他事情的时候,而模式对话框会随时随地跳出来影响你吗?

我们针对异步做的工作如下:

 

1. 现在可以异步编辑一个文件了。本地工作空间把我们从服务器分离出来,但同时我们也分离了所有的IDE更新,所以编辑文件就不同步了。

 

2. 现在登陆也是异步的—你可以在登陆进程中同时继续工作。

 

3. 寻找shelveset也是异步的

 

4. Shelveset详情以及changeset详情也是异步的。

 

5. 文件比较是异步的。

 

6. 在视觉控制之外的东西也是异步的—比如打开工作项。之前都是阻止用户界面的。

 

当然也有很多与VS项目系统相关的东西很难做到异步。除此之外,我们没做到异步的最大的操作就是“获取最新版本”了。

 

用户界面中的回滚

我在最新的动力工具博文中谈过这个问题(还添加了截屏)。我们为TFS 2010最新的动力工具的用户界面中添加了回滚,同样,也加到了TFS 11产品中。很高兴能长久地实行这个请求。

 

恢复文件的修改时间

当TFS把文件放在你本地磁盘时,它经常以操作发生时间为准,默认设置文件修改时间为日期/时间。这对一些工作来说这是有问题的。有些工作为了增量部署或其他变化管理,会在文件上添加日期戳。源代码安全对在文件上设置时间戳有3个选项:

 

1. 文件上有的时间(这是默认的,当创建或者依据建立追踪时十分有效)

 

2. 文件的修改时间是上传前的最后编辑时间。

 

3. 文件上传的日期/时间。

 

TFS 2010和早前的版本都只支持第一种选择,在TFS 11中,我们添加了第三种选择。可以用工作空间基础进行设置。我们希望在今后还能添加第二种选择,不过目前我们还没能达到这样的程度。

 

Unix文件属性

我们各地团队资源管理器 的客户端都在Unix上运行。你要在Unix上处理的一个问题就是文件属性—尤其是执行位。这是一个文件必须保存恢复的属性,否则就会把事情搞得一团糟。TFS 2008中不支持这点,在2010中,我们添加了一个属性系统,希望在这些场景中应用,但是并没有在添加分支和兼并语义上应用,所以携带unix文件属性很不顺利。同时我们的团队Explorer Everywhere团队在“.tpattributes”文件中创建了储存文件属性,但这个解决方案还不完整。

 

在TFS 11中,我们希望弄清属性机制,并建造一流的Unix文件属性支持。简单来说,现在你可以在视觉控制中向文件附加属性,并期望它们在所有视觉控制操作中“正确”运行。虽然Unix文件属性支持是之前一个特点的化身,但第二个场景恢复文件修改时间应该马上就会跟进了。

 

Shelveset上的属性

这个听上去可能没那么让人印象深刻,但在我之后的博文中我会详细讲讲在这个基础上创建的很酷的功能。在TFS 2010中,我们引入了属性系统,让你能在对象上标记属性(我在Unix文件属性部分提到过一些)。不过,我们没有在shelveset上弄这样的特定属性支持。在TFS 11中我们进行了添加。这是一个总体的机制扩展。你可以向shelveset附加属性,它们的行径也将受shelveset许可的控制。当shelveset被删除时,它们也会被自然删除。给我一周左右时间,我会告诉你为什么这是个很好的功能。

 

总结

在“开发者们都是疯狂粉丝”主题下基本把所有的版本控制改进都介绍到了。正如我在开头说到的,也许有点东西我没说到,但是你现在所看到的也是接近所有的东西了。很多东西了—3篇相当长的博文来介绍完全。之后还会有更多“疯狂粉丝”的东西—更多团队Explorer改进,创建,工作项追踪……我会在之后几篇博文中介绍。

 

我希望你们喜欢你们所看到的东西。我迫不及待希望和你们分享那些东西,让你们亲自试试。

Brian