全新的差异/合并体验—我们过去5年来发布的就是原始SourceSafe 差异/合并工具—大约在1994年我们还停留在One Tree 软件时创建。多年来它一直被增强,以支持全球化,Unicode等,但它本质上是同一个diff工具。不过现在不再是了,都已经过去了。我们在VS编辑器的基础上新建了一个差异/合并体验。在你说“等等,我真的很喜欢kdiff!”之前,请不用担心——这仍然是可配置的,你可以使用自己喜欢的任何工具,但是话说回来,这次真的变得更好。为什么说它更好了呢?
- 它同时支持“内联”和“并排”模式,你可以选择自己最喜欢的模式。
- 它有句法高亮提示(VS编辑器中支持这个)
- 单行中的个别变更会有高亮提示
- 当同时进行比较和合并时,你可以利用VS编辑器的强大力量,包括其中的撤销,智能感应和其他功能。
- Diff有一个很棒的“迷你地图”。
- 现在你可以在视图中做更多的操作了(比如历史等等。)
- Diff使用VS中全新的临时标签功能,以免弄乱你的文件。
- 手动选择合并方案的改进方法。
- 打开/关闭忽略空格的互动方法。
这里有些屏幕截图来展示这些功能,你会注意到很多我上述列举的优点:
临时标签中的并排差异视图(一直到右边),左边有变更高亮��示槽,同行内变更高亮提示,VS风格类/方法导航,句法上色等。没错在源代码上方文件名的文本看上去很傻,那是一个错误。
使用内部模式的相同diff:
以下是一些关于合并的截屏。我把你可以选择的三种视图都包含在其中了:
总的来说,这是一款比我们以前更好的默认差异和合并体验。
合并时最少化冲突—这大概是我们听到过的最大的关于合并的抱怨了,它的方式太麻烦了。我们花了很长时间来努力研究这个反馈,总结出首要的问题是做合并时会有太多冲突报告,而这些报告没有要求你做有意义的决定。大家希望它“处理”所有明显的合并并提请他们注意哪里他们有真正的工作要做。
为展示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的合并输出:
注意其中列出了3个冲突,还有4个额外的合并。文件1和3无需任何兼并。以下是tf状态输出:
我们可以看到有7个变化有待解决(期望的,基于我们在合并输出中看到的)
以下是同样场景中Git的合并输出:
以下是状态输出:
首先要注意的是Git只显示了2个冲突—文件4被自动解决,而在TFS 2010中并没有。我还注意到文件5完全没有显示(记得那是源代码和目标中发生相同变化的地方)。除此之外,合并/冲突结果是相同的。我还注意到TFS合并输出的外形不易于阅读,Git中的着色代码更好,而且还在状态输出中包含了冲突信息,这也很不错。
然后我在TFS 11中运行了同样的场景:
现在冲突的数量和Git相同。我们在显示文件5.txt上还是存在差别的,因为我们在合并上做的借记/贷记逻辑需要待决定定的变化来辨认合并已经发生。我要更留心地看看它。输出是相同的,我也和团队说了要在这里做一些改进,以提高可读性,减少冗长。
当我在做与Git的比较时,我很惊讶的发现我们在2010中解决的冲突种类数量没想象的那么高。不过,还没把频繁度算进去(所以我才先做了一个重命名。)我们没有处理的一个类型正好是最常见的,所以对开发者来说小小的变化就会产生很大的影响。
UI中无基合并—还有一个大家一直都很希望解决的就是希望能在UI中实行无基合并。我们在命令行中支持这个,当我也很多次在Power Tools的博文中说到过回滚这个问题,对很多人来说,不在UI中就等于不在产品中。现在UI中也有了。当你从源代码控制管理器中启动合并时,会有一个浏览器按钮,你能通过它来找到分支以完成无基合并。
我们来看一个例子。我从这样的分支结构着手:
你会发现在destination和AlternateDestination间没有合并关系。但让我们来想象一下我在destination中有一些改变,我想在AlternateDestination中有相同的改变,但我又不想通过Source来实现。我希望从destination到AlternateDestination做无基合并。我现在就可以转到源代码控制管理器,开始标准合并体验了。
一如往常,在列表中只有Source,这是唯一和destination相关的分支。然而,和TFS不同,现在有了一个浏览……按钮,达成无基合并。如果你点击它,你会得到:
在这里你可以看到我可以选择AlternateDestination。如果我选中,并点击确定,我就会回到向导:
而且它警高我,我正在做无基合并,但是我可以点击下一步,然后完成并继续进行。所以,你现在可以在UI界面中做无基合并了。
未搁置上兼并—从一开始人们就喜欢搁置,把它看做是打包变化并将其放在一边的一个简单干净的方法。然而,我们经常听到抱怨无法搁置待定改变到工作空间,无法处理合并冲突,这是个严重的限制。现在不会了!我们把合并融入了未搁置操作,它用起来就像在产品的任意地方进行合并一样。
这篇博文写得已经很长了,所以我也不再发这一点的截屏了。在这个场景中新版功能如下,合并被执行了,冲突也被提交了等等。所有周边的UI与合并发生的其他场景中(像合并与获得)一样。
分享到:
相关推荐
请注意,这通常是一个单向操作,因为TFS不支持Git的分支和合并模型。 总的来说,GitTfs是一个强大的工具,可以帮助开发者在Git和TFS之间灵活切换。在VS2013项目中遇到Git和TFS兼容性问题时,它是解决问题的关键。...
git是“分布式“管理方式,开放人员的每台计算机上都有一个“版本控制器”,每个开发人员把自己开发的模块的代码都上传到github上(充当一个远程仓库,类似与“中转站”的作用),其他人可以从github上下载相应的代码...
介绍是TFS(Team Foundation Server)和git之间的双向桥梁,类似于git-svn。 它将TFS提交提取到git存储库中,并允许您将更新推回TFS。 。 请参阅以了解详细信息并下载。 如果遇到问题,请查看页面。 在这样做之前,...
Git不仅提供了版本回溯、合并分支等基本功能,还支持各种高级操作,如代码统计。本主题聚焦于"Git分支代码统计",这是一项对于项目管理和团队协作至关重要的任务。通过统计每个分支的代码量,我们可以了解开发进度,...
公司的发展会遇到项目代码管理工具的更换,我们公司这遇到过以前C#语言写的代码一直用tfs管理,而php与java写的用svn管理,后来公司要求统一用git去管理,这个工具就是用来把tfs上的项目代码迁移到git上面去
在TFS培训中,还应当包含版本控制系统(Version Control)的学习,特别是TFVC与Git的管理、分支策略、合并和冲突解决等。此外,TFS的项目管理功能,如工作项跟踪、迭代规划、敏捷看板、报告和分析等也是不可或缺的一...
TFS内置了团队门户和讨论板功能,促进团队间的沟通与协作。此外,它还可以集成Microsoft Teams,实现更实时的通信。 10. **安全性与权限**: TFS提供了详细的权限模型,确保只有授权的用户可以访问特定的资源。...
Visual Studio 插件如“Git for Windows”和“Visual Studio Team Services Git”(现称为Azure DevOps),将Git的强大功能与VS的图形界面相结合。这些插件通常包括以下功能: 1. **源代码管理**:在VS中直接查看、...
### TFS2013 功能说明与使用教程 #### 一、TFS2013简介 **Visual Studio Team Foundation Server (TFS)** 是微软提供的应用生命周期管理(ALM)解决方案的核心平台。TFS2013不仅适用于本地部署环境,同时也支持云...
TFS工具通常与.NET框架紧密集成,尤其是对于.NET开发者而言,他们可以通过Visual Studio IDE直接访问TFS的功能。TFS提供了丰富的API和SDK,使得开发者可以构建自定义的TFS集成工具,扩展其功能以满足特定需求。例如...
Git与TFS(Team Foundation Server)的结合使用,是微软为了实现跨平台开发而引入的一种集成方案。TFS是一个全面的DevOps平台,提供了项目管理工具、源代码控制、自动化构建、测试管理和发布等功能。通过集成Git,...
标题中的“IDEA新版本2020.3的TFS插件”指的是IDEA 2020.3版本中针对TFS的专门插件,该插件旨在帮助用户无缝地在IDEA环境中与TFS进行交互,实现代码的版本控制、变更跟踪、分支管理等功能。描述中的"IDEA TFS支持...
1. **版本冲突**:脱离TFS后,团队成员需要手动处理合并冲突,而TFS通常会自动解决这些冲突。 2. **协作机制**:需要建立新的协作流程,例如通过电子邮件或第三方工具共享代码更改。 3. **版本控制替代方案**:选择...
- **TFS**(Team Foundation Server):微软的版本控制与项目管理工具。 - **Mercurial**:另一个轻量级的分布式版本控制系统。 - **ClearCase**和**Rational ClearCase**:IBM 提供的企业级版本管理系统。 ### ...
2. **智能合并**:idea-tfs 提供了智能的冲突解决工具,帮助开发者处理合并时可能出现的问题。 3. **变更集管理**:用户可以创建、编辑和管理变更集,更方便地组织和跟踪代码更改。 4. **持续集成**:与其他 IDEA ...