我把Git介绍给了我的开发团队,除了我之外,每个人都讨厌它。他们想要取代 它与Team Foundation Server。我觉得这是一个巨大的倒退,尽管我不是很熟悉TFS。有经验的人能比较一下TFS和Git上的分支支持吗?另外,总的来说,TFS的优点和缺点是什么?之后我会讨厌它吗 使用Git几年?
当前回答
人们需要放下枪,离开窗台,思考一分钟。事实证明,DVCS有客观的、具体的、不可否认的优势,这将对团队的生产力产生巨大的影响。
这一切都归结为分支和合并。
在DVCS之前,指导原则是“向上帝祈祷,你不必涉足分支和合并。如果你这样做了,至少求他让它变得非常非常简单。”
现在,有了DVCS,分支(和合并)得到了很大的改进,指导原则是“立即完成”。它会给你带来很多好处,而且不会给你带来任何问题。”
这对于任何团队来说都是一个巨大的生产力助推器。
问题是,为了让人们理解我刚才说的,并相信这是真的,他们必须首先投入一点学习曲线。他们不需要学习Git或任何其他DVCS本身……他们只需要学习Git如何进行分支和合并。一遍又一遍地阅读一些文章和博客文章,慢慢来,直到你看到为止。那可能要花2到3天的时间。
但一旦你看到这一点,你甚至不会考虑选择非dvcs。因为DVCS确实有明确、客观、具体的优势,最大的优势在于分支和合并。
其他回答
在对利弊进行了一番调查后,我所在的公司也决定采用TFS。不是因为GIT不是一个好的版本控制系统,而是最重要的是对于TFS交付的完全集成的ALM解决方案。如果版本控制特性很重要,那么选择GIT可能是最好的。然而,对于普通开发人员来说,陡峭的GIT学习曲线不可低估。
关于TFS作为一个真正的跨技术平台的详细解释,请参阅我的博客文章。
最重要的是(
https://stackoverflow.com/a/4416666/172109 https://stackoverflow.com/a/4894099/172109 https://stackoverflow.com/a/4415234/172109
), 这是正确的,TFS不仅仅是一个风险投资。TFS提供的一个主要特性是本机集成的错误跟踪功能。变更集与问题相关联,并且可以跟踪。支持各种签入策略,以及与Windows域的集成,这是运行TFS的人所拥有的。与Visual Studio紧密集成的GUI是另一个卖点,这吸引了鼠标和点击较少的开发人员及其经理。
因此,比较Git和TFS并不是一个合适的问题。正确的,尽管不切实际,问题是比较Git和TFS的VCS功能。在这一点上,Git将TFS踢出了水面。然而,任何严肃的团队都需要其他工具,这就是TFS提供的一站式目标。
人们需要放下枪,离开窗台,思考一分钟。事实证明,DVCS有客观的、具体的、不可否认的优势,这将对团队的生产力产生巨大的影响。
这一切都归结为分支和合并。
在DVCS之前,指导原则是“向上帝祈祷,你不必涉足分支和合并。如果你这样做了,至少求他让它变得非常非常简单。”
现在,有了DVCS,分支(和合并)得到了很大的改进,指导原则是“立即完成”。它会给你带来很多好处,而且不会给你带来任何问题。”
这对于任何团队来说都是一个巨大的生产力助推器。
问题是,为了让人们理解我刚才说的,并相信这是真的,他们必须首先投入一点学习曲线。他们不需要学习Git或任何其他DVCS本身……他们只需要学习Git如何进行分支和合并。一遍又一遍地阅读一些文章和博客文章,慢慢来,直到你看到为止。那可能要花2到3天的时间。
但一旦你看到这一点,你甚至不会考虑选择非dvcs。因为DVCS确实有明确、客观、具体的优势,最大的优势在于分支和合并。
我想是声明
每个人都讨厌它,除了我
这就浪费了进一步的讨论:当你继续使用Git时,如果出现任何问题,他们都会责怪你。
除此之外,对我来说,Git比集中式VCS有两个优势,这是我最欣赏的(Rob Sobers部分描述过):
整个回购的自动备份:每次有人从中央回购中提取数据时,他/她都会获得完整的历史更改。当一个回购丢失时:别担心,在每个工作站都带上一个。 离线回购访问:当我在家里(或在飞机或火车上)工作时,我可以看到项目的完整历史,每一个签入,而不需要启动我的VPN连接来工作,并且可以像我在工作时一样工作:签入,签出,分支,任何事情。
但正如我所说:我认为您正在打一场失败的战斗:当每个人都讨厌Git时,就不要使用Git。这可以帮助你了解他们为什么讨厌Git,而不是试图说服他们。
如果他们只是因为这对他们来说是新事物而不想要它,并且不愿意学习新内容,那么你确定你能与这些员工一起成功开发游戏吗?
真的每个人都讨厌Git吗?还是他们受到了一些意见领袖的影响?找到领导,问他们问题出在哪里。说服他们,你就能说服团队的其他人。
如果你不能说服领导者:忘记使用Git,使用TFS。会让你的生活更轻松。
这两个系统的关键区别在于,TFS是集中式版本控制系统,Git是分布式版本控制系统。
使用TFS,存储库存储在中央服务器上,开发人员签出工作副本,这是特定时间点的代码快照。使用Git,开发人员可以将整个存储库克隆到他们的机器上,包括所有历史记录。
在开发人员的机器上拥有完整的存储库的一个好处是,在服务器崩溃时可以提供冗余。另一个好处是,你可以在不同版本之间来回移动你的工作副本,而无需与服务器通信,这在服务器宕机或无法连接时很有帮助。
对我来说,真正的好处是您可以将更改集提交到本地存储库,而无需与服务器通信,也无需对您的团队造成潜在的不稳定更改(即破坏构建)。
例如,如果我正在开发一个大型功能,我可能需要一周的时间来编码和测试。我不想在周中签入不稳定的代码并破坏构建,但是如果我在接近周末时意外地占用了整个工作副本,会发生什么情况呢?如果我一直没有做出承诺,我就有失去工作的风险。这不是有效的版本控制,TFS很容易受此影响。
使用DVCS,我可以不断地提交,而不用担心破坏构建,因为我是在本地提交更改。在TFS和其他集中式系统中,没有本地签入的概念。
我甚至还没有讨论DVCS中的分支和合并有多好,但是你可以在SO或谷歌上找到大量的解释。根据经验,我可以告诉您在TFS中进行分支和合并并不好。
如果你的组织中关于TFS的争论是它在Windows上比Git更好,我建议在Windows上工作得很好的Mercurial——它集成了Windows资源管理器(TortoiseHg)和Visual Studio (VisualHg)。
推荐文章
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何完全删除TFS绑定
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录