使用Visual Studio 2013进行源代码控制时,TFVC(TFS版本控制)和Git之间有哪些重大区别?

109
有许多有关Git和TFVC源代码控制的问题和答案,但目前没有覆盖Git集成到我所找到的Team Foundation Server/Service的现有答案。 我将使用Visual Studio 2013开发各种语言(C#,C ++,PHP,Javascript,MySSQL)的项目。以后可能会有一些iOS开发。我很熟悉SVN,VSS和TFVC用于源代码管理。然而,我从来没有使用过Git。我更喜欢TFS作为流程管理/敏捷开发工具...它不是完美的,但在Visual Studio中很好地集成了起来。 那么,为了帮助我在这两个系统之间做出决定...
TFVC和Git在使用Visual Studio 2013进行源代码控制时有哪些重大区别?
- 在我的情况下,唯一的优点是本地存储库(并不是说它不重要),以及支持iOS开发? - Git的唯一缺点是命令行界面(有些人会认为这不是缺点;-P)? - 您是否在Visual Studio 2013 GUI中有Git的经验?这足以支持基本的分支/合并而无需命令行界面吗? - 是否有详细的Git入门指南,显示如何在Visual Studio 2013中使用Git?微软有一个视频介绍如何将现有的Git存储库集成到Visual Studio 2013中,但我正在寻找使用Git和VS 2013开始的教程。
我不是在这里寻找一本书,只需要一些使用TFVC和Git的人提供的几个要点和相关链接即可。
3个回答

126

更新

自2013年以来发生了很多事情:

  • Microsoft已向Team Foundation Server,Azure DevOps Server和Azure DevOps添加了ssh支持。
  • Visual Studio 2019 16.8+带有完全重新设计的git客户端。
  • Microsoft已将自己的内部产品从TFVC迁移到Git。Windows和Office源现在存储在Azure DevOps的Git中。
  • Microsoft已经收购了GitHub,这是与DevOps相关的主要关注点,许多为Azure DevOps做出贡献的人都因此转移到了GitHub上。
  • Git的虚拟文件系统和Git大文件系统解决了许多人留在TFVC的原因。
  • Azure DevOps有一个内置的迁移工具,可以将(部分)TFVC历史记录转换为git仓库。

在这段时间里,TFVC几乎没有什么进展:

  • YAML管道推出两年后仍未获得TFVC支持(我根本不指望这些)。
  • Team Explorer在Visual Studio中现在被称为“传统”。
  • TFVC已被声明为功能齐全。
  • Eclipse和Visual Studio Code以及Linux / Mac的TFVC支持已正式弃用/终止。

很明显,Git胜利了。


使用VS 2013时,在源代码控制方面TFS和Git的主要区别是什么?

MSDN网站有一个非常详尽的页面介绍了Team Foundation Version Control和Git之间的所有特性和区别

在我的情况下,唯一的好处是本地存储库(不是说这个不重要),以及对IOS开发的支持吗?

不,还有很多,但它们通常是Git的高级应用场景。本地库、离线支持以及对历史记录的完整本地保真度都非常强大,你可以通过Visual Studio直接使用这些功能。还有其他一些很棒的功能!从一个存储库分支和合并到另一个存储库的能力非常强大。我建议您查看Pro Git书籍了解更多信息。Git在TFS中只是另一个git服务器,几乎具有标准Git的所有功能。

在合并之前重写历史记录的能力使您可以删除或组合许多较小的更改集,使历史记录更清晰、更易于阅读。

Git的唯一缺点是命令行界面吗(有人会认为这不是缺点)?

TFVC有一个命令行界面,但人们很少使用它。对于那些想要使用Git并且从未做过TFVC更多操作的人们来说,他们可能不需要离开UI,尽管他们将无法获得许多酷功能...

可能还有一些其他缺点,主要是因为它与人们习惯的不同。如果您不花时间学习git在您执行操作时会发生什么事情,那么很容易自食其果。像Rebase和Squash之类的东西非常强大,并且可以创建非常干净的历史记录,但是如果使用不当,可能会留下合并失败的问题。TFS可以设置某些安全设置,以取消对Git存储库上做出非常愚蠢决定的权限

针对Windows上的Git用户的一个非常酷的插件是PoSHGit。它提供了PowerShell命令行的命令自动完成。

您是否有使用VS 2013 GUI进行Git操作的经验?那是否足以支持基本的分支/合并而无需使用命令行界面?

对于基本操作,它拥有您所需的一切。但是,您需要能够可视化不同的分支以了解正在发生的情况。由于Git服务器和本地存储库只是Git,因此任何git客户端都可以在这里帮助您。SourceTree是一个选择,Git for Windows客户端是另一个选择。

对于标准操作(如Check-in、Check-out、Merge、Branch或Push、Pull、Fetch、Commit、Merge),UI可以正常工作。

是否有关于使用VS 2013展示Git的详细入门指南?微软有一个视频介绍如何将现有的Git存储库集成到VS 2013中,但我想要一个从头开始使用Git和VS 2013的指南。

使用Git的入门在许多地方都可以找到...以下是一些选项:

其他值得阅读的内容:

此外,以下是几个值得安装的工具:

  • PoshGit:Windows PowerShell命令行提示工具,用于Git和PowerShell的无缝集成。
  • SourceTree:可视化Git客户端,可帮助用户更轻松地使用Git并管理版本控制。
  • Git Diff Margin:Visual Studio插件,可将Git源代码版本控制系统的差异与文本编辑器一起显示,以便更好地了解源代码文件中的更改。

3
ALM Rangers 将很快在此发布Git针对TFVC用户的指南:http://vsarbranchingguide.codeplex.com/releases。当前的Beta版本尚未包含它,我预计它将与下一批同时发布。 - jessehouwing
8
自从我最初发布这篇文章以来,已经过去了将近一年,我想告诉大家,我们已经成功地使用VS2013和Git了。我喜欢在一个团队项目下创建多个代码库的能力。我们遇到了一些合并问题。在若干情况下,自动合并选择不正确。所以看起来像是成功合并的东西实际上并不是。我们现在会仔细检查所有已合并的文件。此外,在某些情况下,合并会出错,并在VS UI中抛出错误(libgit2合并冲突)。要修复它,我们必须转到命令提示符并发出git pull命令(不好玩)。 - Greg Grater
1
我知道在第四次更新中会有一个修复上一个错误的补丁。而且有些情况下,开发人员之间的行尾设置不同可能会导致出现这些问题。 - jessehouwing
5
自从几个月前VS 2013的Update 4发布后,我们一直在使用它,它似乎已经解决了我们所有GUI Git问题。我们有定期从远程服务器拉取的习惯,这有助于保持我们的本地仓库最新。此外,微软最近对产品需求/backlog和任务板进行了多次积极更新。现在你可以直接从任务板编辑描述,分配任务、设置状态并调整任务优先级/顺序。 - Greg Grater
1
"Git vs TFVC"链接指向"开始使用Git"。这是否意味着我们现在应该更好地使用Git而不是TFVC?;D找到了一个新的链接:https://www.visualstudio.com/en-us/docs/tfvc/comparison-git-tfvc - Martin Schneider
显示剩余5条评论

17
为了澄清一些常与TFS混淆的术语:Team Foundation Server (TFS)是一个应用程序生命周期管理工具,其中包括源代码版本控制系统(VCS)组件。TFS使用的VCS组件主要是Team Foundation Version Control (TFVC)。所以问题是TFVC vs Git (实际上,TFS支持Git作为VCS选项)。Jessehouwing有一个非常好的答案详细解释了这个问题,请参考他的回答。就我个人而言,在选择使用哪种VCS时,Git更胜一筹:1.它很轻量级,简单易用;2.分布式本质意味着它非常弹性,能够很好地抵御灾难发生;3.离线工作很简单,您可以使用自己的完整存储库进行工作。您可以提交更改、还原、浏览历史记录等操作。只有在需要与远程存储库同步时才需要联网;4.在TFS中,没有一种简单的方法来保存您的更改状态(文件添加、修改、删除),并切换到另一个代码状态(例如,处理两个功能并在之间切换)。在Git中,您只需切换到不同的分支即可。

2
TFS有分支和Shelf Sets(可以实现#5),甚至可以配置您的项目使用Git。 TFS VCS还有一个命令行用于#。 它不是轻量级的,但它在开箱即用方面比Git做得更多,因为它具有完整的项目管理/错误跟踪/工作跟踪/发布管理/构建管理/签入策略/测试内置功能。 - Matthew Whited
@MatthewWhited 当然可以,但与git相比,它的基于目录的实现使其非常繁琐,而git则是基于图形的实现。请注意,我说没有“简单”的方法来做到这一点。 - James Wierzba
@MatthewWhited,我也同意需要额外的应用程序生命周期工具,但是我的回答仅限于源代码版本控制解决方案。 - James Wierzba
2
我不知道... 我发现TFS非常容易使用。虽然我也不喜欢GIT创建的所有分支,因为这使得确保每个人都在同一代码上变得更加复杂,对于某些人来说变化很快,而对于其他人来说则很慢。 - Matthew Whited
1
不知道。GIT对于它旨在完成的任务来说过于复杂,非常不直观(为什么是pull request而不是push request?!)。TF源代码控制非常简单,可以在几分钟内向我的团队中的任何新开发人员解释清楚。我还认为在团队内部甚至个人工作时,鼓励本地工作是一个很大的劣势。你如何在Git中防止丢失你的工作,而不会在项目中留下分支?(对此,在TFS上有shelvesets) - Cesar
开发人员请求将他们的更改“拉取”到主分支中。但您也可以轻松地将其视为开发人员请求将其更改“推送”到主分支中。 - James Wierzba

4
如果你不熟悉命令行界面,Git 有多个 GUI 前端可供使用。Git 实际上包含了一个名为 gitkgit-gui 的仓库浏览器 GUI 工具。此外还有第三方应用程序,如 git-colaTortoiseGit其他

2
当然,Visual Studio本身提供了Git的GUI。但是总有一些时候,您可能想要深入到命令行中去做一些其他情况下无法完成的事情。一个公开所有Git命令的GUI与命令行一样困难。 - jessehouwing
有命令行工具。例如,可以完全消除一个分支的存在。 - Engineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接