`
huahuashijie888
  • 浏览: 33609 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

TFS2011的合并功能与Git的对比

阅读更多


全新的差异/合并体验—我们过去5年来发布的就是原始SourceSafe 差异/合并工具—大约在1994年我们还停留在One Tree 软件时创建。多年来它一直被增强,以支持全球化,Unicode等,但它本质上是同一个diff工具。不过现在不再是了,都已经过去了。我们在VS编辑器的基础上新建了一个差异/合并体验。在你说“等等,我真的很喜欢kdiff!”之前,请不用担心——这仍然是可配置的,你可以使用自己喜欢的任何工具,但是话说回来,这次真的变得更好。为什么说它更好了呢?

  • 它同时支持“内联”和“并排”模式,你可以选择自己最喜欢的模式。
  • 它有句法高亮提示(VS编辑器中支持这个)
  • 单行中的个别变更会有高亮提示
  • 当同时进行比较和合并时,你可以利用VS编辑器的强大力量,包括其中的撤销,智能感应和其他功能。
  • Diff有一个很棒的“迷你地图”。
  • 现在你可以在视图中做更多的操作了(比如历史等等。)
  • Diff使用VS中全新的临时标签功能,以免弄乱你的文件。
  • 手动选择合并方案的改进方法。
  • 打开/关闭忽略空格的互动方法。

这里有些屏幕截图来展示这些功能,你会注意到很多我上述列举的优点:

临时标签中的并排差异视图(一直到右边),左边有变更高亮��示槽,同行内变更高亮提示,VS风格类/方法导航,句法上色等。没错在源代码上方文件名的文本看上去很傻,那是一个错误。

DiffSxS

使用内部模式的相同diff:

DiffInline

以下是一些关于合并的截屏。我把你可以选择的三种视图都包含在其中了:

MergeTool

MergeTool2

MergeTool3

总的来说,这是一款比我们以前更好的默认差异和合并体验。

合并时最少化冲突—这大概是我们听到过的最大的关于合并的抱怨了,它的方式太麻烦了。我们花了很长时间来努力研究这个反馈,总结出首要的问题是做合并时会有太多冲突报告,而这些报告没有要求你做有意义的决定。大家希望它“处理”所有明显的合并并提请他们注意哪里他们有真正的工作要做。

为展示TFS 2010和TFS 11间的区别,我运行了一个示例场景。它很简单,而且看上去有点刻意为之,但却能显示出其中的差异。我选取了一个充满TFS源代码的文件夹,并为它加分支。然后我在两个分支中把两个方法进行了重命名,并合并了结果。结果是源代码分支中48个文件改变了,而在目标分支中有90个文件改变了。结果报告中的冲突如下:

  • TFS 2010: 38 个冲突
  • TFS 11: 12 个冲突

差别在于TFS 11自动解决了26个冲突,无需经过用户交互。

我总是听说Git是这种行为的“黄金标准”。所以,我们对Git和TFS合并行为做了一个点对点的比较,我们发现为了向Git体验看齐所必需的代码改动真的很小。所以我们比较了新版TFS和Git。我不想说这是耗费精力的测试,或者说我面面俱到,但我相信它覆盖了大部分常见情况,当你亲自体验时,如果发现我们遗漏了什么,请让我知道。

针对这个情况,我想比较不同冲突的行为。我创建了一个含有9个文件的文件夹,并进行了分支,然后安排了一个特定模式的变更,以激起冲突。以下就是变更:

File

Source change

Destination change

Comment

file1.txt

unchanged

unchanged

Trivial case, nothing to merge and nothing in the destination

file2.txt

edit line 3

unchanged

Just merge the change into the destination

file3.txt

unchanged

edit line 3

Nothing to merge over and the change in the destination should affect it

file4.txt

edit line 3

edit line 7

Distinct changes in source and destination

file5.txt

edit line 5

same edit line 5

Same change in both files should merge well

file6.txt

edit line 5

different edit line 5

This is a conflict that will require user interaction to resolve

file7.txt

delete file

unchanged

Delete the file in the source an no changes in the destination

file8.txt

delete file

edit line 5

A file delete in the source conflicting with an edit in the destination

file9.txt

rename file

unchanged

Should not really be any conflict here

然后我在TFS 2010,TFS 11和Git中创建了同样的场景,并查看结果。在这个场景中,我对三个产品都使用了命令行。

以下是TFS 2010的合并输出:

image

注意其中列出了3个冲突,还有4个额外的合并。文件1和3无需任何兼并。以下是tf状态输出:

image

我们可以看到有7个变化有待解决(期望的,基于我们在合并输出中看到的)

以下是同样场景中Git的合并输出:

GitMergeOutput

以下是状态输出:

GitStatus

首先要注意的是Git只显示了2个冲突—文件4被自动解决,而在TFS 2010中并没有。我还注意到文件5完全没有显示(记得那是源代码和目标中发生相同变化的地方)。除此之外,合并/冲突结果是相同的。我还注意到TFS合并输出的外形不易于阅读,Git中的着色代码更好,而且还在状态输出中包含了冲突信息,这也很不错。

然后我在TFS 11中运行了同样的场景:

Dev11MergeOutput

Dev11Status

现在冲突的数量和Git相同。我们在显示文件5.txt上还是存在差别的,因为我们在合并上做的借记/贷记逻辑需要待决定定的变化来辨认合并已经发生。我要更留心地看看它。输出是相同的,我也和团队说了要在这里做一些改进,以提高可读性,减少冗长。

当我在做与Git的比较时,我很惊讶的发现我们在2010中解决的冲突种类数量没想象的那么高。不过,还没把频繁度算进去(所以我才先做了一个重命名。)我们没有处理的一个类型正好是最常见的,所以对开发者来说小小的变化就会产生很大的影响。

UI中无基合并—还有一个大家一直都很希望解决的就是希望能在UI中实行无基合并。我们在命令行中支持这个,当我也很多次在Power Tools的博文中说到过回滚这个问题,对很多人来说,不在UI中就等于不在产品中。现在UI中也有了。当你从源代码控制管理器中启动合并时,会有一个浏览器按钮,你能通过它来找到分支以完成无基合并。

我们来看一个例子。我从这样的分支结构着手:

Hierarchy

你会发现在destination和AlternateDestination间没有合并关系。但让我们来想象一下我在destination中有一些改变,我想在AlternateDestination中有相同的改变,但我又不想通过Source来实现。我希望从destination到AlternateDestination做无基合并。我现在就可以转到源代码控制管理器,开始标准合并体验了。

MergeWiz

一如往常,在列表中只有Source,这是唯一和destination相关的分支。然而,和TFS不同,现在有了一个浏览……按钮,达成无基合并。如果你点击它,你会得到:

BrowseBranch

在这里你可以看到我可以选择AlternateDestination。如果我选中,并点击确定,我就会回到向导:

BaselessMerge

而且它警高我,我正在做无基合并,但是我可以点击下一步,然后完成并继续进行。所以,你现在可以在UI界面中做无基合并了。

未搁置上兼并—从一开始人们就喜欢搁置,把它看做是打包变化并将其放在一边的一个简单干净的方法。然而,我们经常听到抱怨无法搁置待定改变到工作空间,无法处理合并冲突,这是个严重的限制。现在不会了!我们把合并融入了未搁置操作,它用起来就像在产品的任意地方进行合并一样。

这篇博文写得已经很长了,所以我也不再发这一点的截屏了。在这个场景中新版功能如下,合并被执行了,冲突也被提交了等等。所有周边的UI与合并发生的其他场景中(像合并与获得)一样。

分享到:
评论

相关推荐

    GitTfs源码管理器转换,适用于VS2013项目中有Git目录Tfs就无法工作的情况

    请注意,这通常是一个单向操作,因为TFS不支持Git的分支和合并模型。 总的来说,GitTfs是一个强大的工具,可以帮助开发者在Git和TFS之间灵活切换。在VS2013项目中遇到Git和TFS兼容性问题时,它是解决问题的关键。...

    GitTfs-0.29.0

    git是“分布式“管理方式,开放人员的每台计算机上都有一个“版本控制器”,每个开发人员把自己开发的模块的代码都上传到github上(充当一个远程仓库,类似与“中转站”的作用),其他人可以从github上下载相应的代码...

    git-tfs:一个GitTFS桥,类似于git-svn

    介绍是TFS(Team Foundation Server)和git之间的双向桥梁,类似于git-svn。 它将TFS提交提取到git存储库中,并允许您将更新推回TFS。 。 请参阅以了解详细信息并下载。 如果遇到问题,请查看页面。 在这样做之前,...

    GIT分支代码统计

    Git不仅提供了版本回溯、合并分支等基本功能,还支持各种高级操作,如代码统计。本主题聚焦于"Git分支代码统计",这是一项对于项目管理和团队协作至关重要的任务。通过统计每个分支的代码量,我们可以了解开发进度,...

    GitTfs-0.25.1.529

    公司的发展会遇到项目代码管理工具的更换,我们公司这遇到过以前C#语言写的代码一直用tfs管理,而php与java写的用svn管理,后来公司要求统一用git去管理,这个工具就是用来把tfs上的项目代码迁移到git上面去

    tfs培训与讲义

    在TFS培训中,还应当包含版本控制系统(Version Control)的学习,特别是TFVC与Git的管理、分支策略、合并和冲突解决等。此外,TFS的项目管理功能,如工作项跟踪、迭代规划、敏捷看板、报告和分析等也是不可或缺的一...

    TFS的使用说明文档

    TFS内置了团队门户和讨论板功能,促进团队间的沟通与协作。此外,它还可以集成Microsoft Teams,实现更实时的通信。 10. **安全性与权限**: TFS提供了详细的权限模型,确保只有授权的用户可以访问特定的资源。...

    git VS插件

    Visual Studio 插件如“Git for Windows”和“Visual Studio Team Services Git”(现称为Azure DevOps),将Git的强大功能与VS的图形界面相结合。这些插件通常包括以下功能: 1. **源代码管理**:在VS中直接查看、...

    TFS2013功能说明以及使用教程

    ### TFS2013 功能说明与使用教程 #### 一、TFS2013简介 **Visual Studio Team Foundation Server (TFS)** 是微软提供的应用生命周期管理(ALM)解决方案的核心平台。TFS2013不仅适用于本地部署环境,同时也支持云...

    TFS 工具 TFS tools

    TFS工具通常与.NET框架紧密集成,尤其是对于.NET开发者而言,他们可以通过Visual Studio IDE直接访问TFS的功能。TFS提供了丰富的API和SDK,使得开发者可以构建自定义的TFS集成工具,扩展其功能以满足特定需求。例如...

    稳定版的git管理工具

    Git与TFS(Team Foundation Server)的结合使用,是微软为了实现跨平台开发而引入的一种集成方案。TFS是一个全面的DevOps平台,提供了项目管理工具、源代码控制、自动化构建、测试管理和发布等功能。通过集成Git,...

    IDEA新版本2020.3的TFS插件

    标题中的“IDEA新版本2020.3的TFS插件”指的是IDEA 2020.3版本中针对TFS的专门插件,该插件旨在帮助用户无缝地在IDEA环境中与TFS进行交互,实现代码的版本控制、变更跟踪、分支管理等功能。描述中的"IDEA TFS支持...

    永久脱离TFS

    1. **版本冲突**:脱离TFS后,团队成员需要手动处理合并冲突,而TFS通常会自动解决这些冲突。 2. **协作机制**:需要建立新的协作流程,例如通过电子邮件或第三方工具共享代码更改。 3. **版本控制替代方案**:选择...

    git使用培训.pptx

    - **TFS**(Team Foundation Server):微软的版本控制与项目管理工具。 - **Mercurial**:另一个轻量级的分布式版本控制系统。 - **ClearCase**和**Rational ClearCase**:IBM 提供的企业级版本管理系统。 ### ...

    TFS 插件14.0

    `features`目录可能包含插件的各种特性描述和配置信息,而`plugins`目录则包含了实际的插件组件,这些插件可能涵盖了与TFS核心功能的交互、与IDE的集成以及其他定制化功能。 综上所述,TFS插件14.0是一个强大的团队...

Global site tag (gtag.js) - Google Analytics