我把Git介绍给了我的开发团队,除了我之外,每个人都讨厌它。他们想要取代 它与Team Foundation Server。我觉得这是一个巨大的倒退,尽管我不是很熟悉TFS。有经验的人能比较一下TFS和Git上的分支支持吗?另外,总的来说,TFS的优点和缺点是什么?之后我会讨厌它吗 使用Git几年?


当前回答

在对利弊进行了一番调查后,我所在的公司也决定采用TFS。不是因为GIT不是一个好的版本控制系统,而是最重要的是对于TFS交付的完全集成的ALM解决方案。如果版本控制特性很重要,那么选择GIT可能是最好的。然而,对于普通开发人员来说,陡峭的GIT学习曲线不可低估。

关于TFS作为一个真正的跨技术平台的详细解释,请参阅我的博客文章。

其他回答

这两个系统的关键区别在于,TFS是集中式版本控制系统,Git是分布式版本控制系统。

使用TFS,存储库存储在中央服务器上,开发人员签出工作副本,这是特定时间点的代码快照。使用Git,开发人员可以将整个存储库克隆到他们的机器上,包括所有历史记录。

在开发人员的机器上拥有完整的存储库的一个好处是,在服务器崩溃时可以提供冗余。另一个好处是,你可以在不同版本之间来回移动你的工作副本,而无需与服务器通信,这在服务器宕机或无法连接时很有帮助。

对我来说,真正的好处是您可以将更改集提交到本地存储库,而无需与服务器通信,也无需对您的团队造成潜在的不稳定更改(即破坏构建)。

例如,如果我正在开发一个大型功能,我可能需要一周的时间来编码和测试。我不想在周中签入不稳定的代码并破坏构建,但是如果我在接近周末时意外地占用了整个工作副本,会发生什么情况呢?如果我一直没有做出承诺,我就有失去工作的风险。这不是有效的版本控制,TFS很容易受此影响。

使用DVCS,我可以不断地提交,而不用担心破坏构建,因为我是在本地提交更改。在TFS和其他集中式系统中,没有本地签入的概念。

我甚至还没有讨论DVCS中的分支和合并有多好,但是你可以在SO或谷歌上找到大量的解释。根据经验,我可以告诉您在TFS中进行分支和合并并不好。

如果你的组织中关于TFS的争论是它在Windows上比Git更好,我建议在Windows上工作得很好的Mercurial——它集成了Windows资源管理器(TortoiseHg)和Visual Studio (VisualHg)。

在对利弊进行了一番调查后,我所在的公司也决定采用TFS。不是因为GIT不是一个好的版本控制系统,而是最重要的是对于TFS交付的完全集成的ALM解决方案。如果版本控制特性很重要,那么选择GIT可能是最好的。然而,对于普通开发人员来说,陡峭的GIT学习曲线不可低估。

关于TFS作为一个真正的跨技术平台的详细解释,请参阅我的博客文章。

我想是声明

每个人都讨厌它,除了我

这就浪费了进一步的讨论:当你继续使用Git时,如果出现任何问题,他们都会责怪你。

除此之外,对我来说,Git比集中式VCS有两个优势,这是我最欣赏的(Rob Sobers部分描述过):

整个回购的自动备份:每次有人从中央回购中提取数据时,他/她都会获得完整的历史更改。当一个回购丢失时:别担心,在每个工作站都带上一个。 离线回购访问:当我在家里(或在飞机或火车上)工作时,我可以看到项目的完整历史,每一个签入,而不需要启动我的VPN连接来工作,并且可以像我在工作时一样工作:签入,签出,分支,任何事情。

但正如我所说:我认为您正在打一场失败的战斗:当每个人都讨厌Git时,就不要使用Git。这可以帮助你了解他们为什么讨厌Git,而不是试图说服他们。

如果他们只是因为这对他们来说是新事物而不想要它,并且不愿意学习新内容,那么你确定你能与这些员工一起成功开发游戏吗?

真的每个人都讨厌Git吗?还是他们受到了一些意见领袖的影响?找到领导,问他们问题出在哪里。说服他们,你就能说服团队的其他人。

如果你不能说服领导者:忘记使用Git,使用TFS。会让你的生活更轻松。

如果您的团队使用TFS,而您想使用Git,那么您可能需要考虑“Git到TFS”的桥接。从本质上讲,您每天都在计算机上使用Git工作,然后当您想要将更改推送到TFS服务器时,您可以将它们推送到TFS服务器。

有一些(在github上)。我在上一个地方(和另一个开发人员一起)使用了一个,并取得了一些成功。看到的:

https://github.com/spraints/git-tfs

https://github.com/git-tfs/git-tfs

Git的整个分布式功能真的非常棒。它提供了shelsets(在当前产品中)没有的一些特性,比如本地回滚和提交选项(比如Eclipse的本地历史特性)。您可以使用开发人员分支来缓解这种情况,但老实说,许多开发人员一点也不喜欢分支和合并。我经常被要求在TFS中打开旧式的“独占签出”功能(并且每次都拒绝它)。

我认为许多大型企业都很害怕允许开发人员将整个历史带到本地工作区并随身携带(例如给新雇主)……偷一张快照是不好的,但拿走整段历史就更麻烦了。(并不是说你不能从TFS得到你想要的完整历史)…

上面提到,这是一种很好的备份方式,这对于开源来说也是很好的,因为原来的维护者可能会停止关心并删除他的版本,但对于企业计划来说,这对于许多企业来说还是不够,因为没有明确的责任分配来保存备份。而且,如果主“项目”以某种方式消失了,就很难弄清楚该使用哪个版本。它倾向于指定一个存储库作为主导/中心。

我最喜欢Git的是Push/Pull选项,在这里你可以轻松地为项目贡献代码,而不需要拥有提交权限。我猜您可以在TFS中使用非常有限的用户和搁置集来模拟这一点,但它没有Git选项那么强大。跨团队项目的分支可能也可以,但从管理的角度来看,这对许多组织来说并不可行,因为添加团队项目会增加大量的管理开销。

我还想在非源代码控制领域补充一些内容。工作项跟踪、报告和构建自动化(包括实验室管理)等特性极大地受益于中央领先的存储库。当您使用纯分布式模型时,这将变得更加困难,除非您使其中一个节点领先(从而返回到较少分布式的模型)。

随着TFS Basic与TFS 11一起推出,在TFS 12+时代,可以将本地TFS Basic同步到中央TFS的分布式TFS可能已经不远了。我会在用户信箱里投上我的一票!