我把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将添加到您的解决方案中的所有辅助文件(.vssscc)来“支持”TFS -我们最近遇到了这些文件最终映射到错误的分支的问题,这导致了一些有趣的调试…
我想是声明
每个人都讨厌它,除了我
这就浪费了进一步的讨论:当你继续使用Git时,如果出现任何问题,他们都会责怪你。
除此之外,对我来说,Git比集中式VCS有两个优势,这是我最欣赏的(Rob Sobers部分描述过):
整个回购的自动备份:每次有人从中央回购中提取数据时,他/她都会获得完整的历史更改。当一个回购丢失时:别担心,在每个工作站都带上一个。 离线回购访问:当我在家里(或在飞机或火车上)工作时,我可以看到项目的完整历史,每一个签入,而不需要启动我的VPN连接来工作,并且可以像我在工作时一样工作:签入,签出,分支,任何事情。
但正如我所说:我认为您正在打一场失败的战斗:当每个人都讨厌Git时,就不要使用Git。这可以帮助你了解他们为什么讨厌Git,而不是试图说服他们。
如果他们只是因为这对他们来说是新事物而不想要它,并且不愿意学习新内容,那么你确定你能与这些员工一起成功开发游戏吗?
真的每个人都讨厌Git吗?还是他们受到了一些意见领袖的影响?找到领导,问他们问题出在哪里。说服他们,你就能说服团队的其他人。
如果你不能说服领导者:忘记使用Git,使用TFS。会让你的生活更轻松。
Original: @Rob, TFS has something called "Shelving" that addresses your concern about commiting work-in-progress without it affecting the official build. I realize you see central version control as a hindrance, but with respect to TFS, checking your code into the shelf can be viewed as a strength b/c then the central server has a copy of your work-in-progress in the rare event your local machine crashes or is lost/stolen or you need to switch gears quickly. My point is that TFS should be given proper praise in this area. Also, branching and merging in TFS2010 has been improved from prior versions, and it isn't clear what version you are referring to when you say "... from experience that branching and merging in TFS is not good." Disclaimer: I'm a moderate user of TFS2010.
Edit Dec-5-2011: To the OP, one thing that bothers me about TFS is that it insists on setting all your local files to "read-only" when you're not working on them. If you want to make a change, the flow is that you must "check-out" the file, which just clears the readonly attribute on the file so that TFS knows to keep an eye on it. That's an inconvenient workflow. The way I would prefer it to work is that is just automatically detects if I've made a change and doesn't worry/bother with the file attributes at all. That way, I can modify the file either in Visual Studio, or Notepad, or with whatever tool I please. The version control system should be as transparent as possible in this regard. There is a Windows Explorer Extension (TFS PowerTools) that allows you to work with your files in Windows Explorer, but that doesn't simplify the workflow very much.
如果您的团队使用TFS,而您想使用Git,那么您可能需要考虑“Git到TFS”的桥接。从本质上讲,您每天都在计算机上使用Git工作,然后当您想要将更改推送到TFS服务器时,您可以将它们推送到TFS服务器。
有一些(在github上)。我在上一个地方(和另一个开发人员一起)使用了一个,并取得了一些成功。看到的:
https://github.com/spraints/git-tfs
https://github.com/git-tfs/git-tfs
推荐文章
- GitHub -未能连接到GitHub 443 windows/连接到GitHub失败-无错误
- 如何使Eclipse/EGit在更新后识别现有的存储库信息?
- 撤销意外git隐藏pop
- 我怎么能让詹金斯CI与Git触发器推到主人?
- Git:哪个是分支的默认配置远程?
- 如何从拉请求中删除提交
- 如何用分发文件发布npm包?
- 跟踪在GitHub上创建的一个新的远程分支
- 没有空格的合并会产生冲突
- 如何使用refspec将Git标记推到分支?
- 如何使用Git向远程存储库进行初始推送?
- 将文件的当前工作副本与另一个分支提交的副本区别对待
- 配置Git接受特定https远程的特定自签名服务器证书
- 如何将一个特定的提交从一个分支合并到Git中的另一个分支?
- 通过SSH配置Git登录一次