git GitHub Enterprise 与 Team Foundation Server (TFS)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12779365/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
GitHub Enterprise vs. Team Foundation Server (TFS)
提问by Wilbert
We will be starting a new project at the company I'm working at. It's a software development project in C++ and C#, with ~6-8 developers at three locations.
我们将在我工作的公司开始一个新项目。这是一个使用 C++ 和 C# 编写的软件开发项目,在三个地点拥有约 6-8 名开发人员。
Older projects here use SVN and a custom Issue tracker, but it's planned to switch to TFS. For this new project, I would like to convince the management to use GitHub Enterprise instead of TFS. I don't have too much experience with TFS, but I've used git a lot, and have some GitHub experience.
这里的旧项目使用 SVN 和自定义问题跟踪器,但计划切换到 TFS。对于这个新项目,我想说服管理层使用 GitHub Enterprise 而不是 TFS。我对 TFS 没有太多经验,但我使用过很多 git,并且有一些 GitHub 经验。
I am specifically asking about the complete experience, that is, the integration of Version Control, Issue/Bug tracking and a Wiki. There are some relatedquestions on here, but they focus on the version control aspect only. So:
我特别询问完整的体验,即版本控制、问题/错误跟踪和 Wiki 的集成。这里有一些相关的问题,但它们只关注版本控制方面。所以:
- What are the main advantages of GitHub Enterprise over TFS?
- What benefits does TFS offer than GitHub Enterprise cannot replicate?
- Which of the two solutions offers better support for Continuous Integration?
- GitHub Enterprise 相对于 TFS 的主要优势是什么?
- TFS 提供了哪些 GitHub Enterprise 无法复制的优势?
- 这两种解决方案中哪一种为持续集成提供了更好的支持?
All development will be on Windows machines using Visual Studio (2010, maybe 2012).
所有开发都将在使用 Visual Studio(2010,也许 2012)的 Windows 机器上进行。
采纳答案by wemu
Well I can't give you a complete answer. But we had a look at TFS for Java development and here are some points that may be interesting for you as well.
嗯,我不能给你一个完整的答案。但是我们查看了用于 Java 开发的 TFS,这里有一些您可能也会感兴趣的要点。
- we encountered length restrictions for path+filename using TFS. This seems more likely with Java as the packaging in C# is done differently
- locking: creating a file somehow locks it in TFS (or reserves a "spot" for it). This got quite annoying when people were not in the room to fix these files. With distributed teams I can't imagine how that is supposed to work.
- CI with Java was messy. It worked but compared to Jenkings/Hudson/Bamboo/TeamCity I would not use it for Java. Using C# may be more interesting since TFS allows workflows for CI builds. So certain builds could be promoted to automatic deployment. But I never used that in real-life. I just liked the idea :)
- The issue tracking in TFS is ok. There are some Scrum/Agile planning plugins available too
- the TFS wiki is a waste of time. But the GitHub wiki is based on Git so people need to write markup. That is ok for developers but I have some doubts our team members come from that area.
- I'm not aware GitHub has any CI built in? All CI servers I know have Git support.
- the Git Windows client is a bit weird. The msysgit client has path length restrictions, the cygwin one os even more strange (just of it feels) but both work nicely. GitHub has an own client - I don't know what it is based on.
- 我们在使用 TFS 时遇到了路径+文件名的长度限制。这在 Java 中似乎更有可能,因为 C# 中的打包方式不同
- 锁定:创建一个文件以某种方式将其锁定在 TFS 中(或为其保留一个“位置”)。当人们不在房间里修复这些文件时,这变得非常烦人。对于分布式团队,我无法想象这应该如何运作。
- 使用 Java 的 CI 很混乱。它有效,但与 Jenkings/Hudson/Bamboo/TeamCity 相比,我不会将它用于 Java。使用 C# 可能更有趣,因为 TFS 允许 CI 构建的工作流。因此,某些构建可以提升为自动部署。但我从未在现实生活中使用过。我只是喜欢这个主意:)
- TFS 中的问题跟踪没问题。还有一些 Scrum/Agile 计划插件可用
- TFS wiki 是在浪费时间。但是 GitHub wiki 基于 Git,因此人们需要编写标记。这对开发人员来说没问题,但我怀疑我们的团队成员来自那个地区。
- 我不知道 GitHub 内置了任何 CI?我知道的所有 CI 服务器都支持 Git。
- Git Windows 客户端有点奇怪。msysgit 客户端有路径长度限制,cygwin one os 更奇怪(只是感觉),但两者都运行良好。GitHub 有自己的客户端——我不知道它基于什么。
Considering your team is distributed I would go for Git. It will allow a more flexible workflow. If the network is stable TFS will certainly do the job as well. If you worked with SVN before: TFS as source control will most certainly piss people off. But developers used to VisualStudio and the MS-Server-Parts have far less conflicts with it.
考虑到你的团队是分布式的,我会选择 Git。它将允许更灵活的工作流程。如果网络稳定,TFS 肯定也能胜任。如果您以前使用过 SVN:作为源代码控制的 TFS 肯定会惹恼人们。但是习惯于 VisualStudio 和 MS-Server-Parts 的开发人员与它的冲突要少得多。
Again: we tried (or had to try) using TFS + Java, with C# + Visual Studio it's a complete different story. The integration will be much better there. Yet some of my points may still be useful :)
再说一遍:我们尝试(或不得不尝试)使用 TFS + Java,而使用 C# + Visual Studio 则完全不同。那里的整合会好得多。然而我的一些观点可能仍然有用:)
回答by Florian B?sch
I can't comment on TFS specifically as my only experience with it was brief and very unpleasant so I wont.
我无法具体评论 TFS,因为我对它的唯一体验是短暂且非常不愉快的,所以我不会。
I do however use git and github (the enterprise version as well) regularly and I've worked with a variety of centralized VCSes (rcs, cvs, svn, synergy) and decentralized VCSes (hg, git).
然而,我确实经常使用 git 和 github(企业版),并且我使用过各种集中式 VCS(rcs、cvs、svn、synergy)和分散式 VCS(hg、git)。
I think the main difference between GIT and TFS apart from some auxiliary feature difference is that fundamentally TFS is a centralized system (like rcs, cvs, svn and synergy) and that git is a decentralized system (dvcs). This may not seem that much of a differentiation at first, but it has profound implications.
我认为除了一些辅助功能差异之外,GIT 和 TFS 之间的主要区别在于,从根本上讲,TFS 是一个集中式系统(如 rcs、cvs、svn 和 Synergy),而 git 是一个分散式系统(dvcs)。乍一看,这似乎并没有太大的区别,但它具有深远的影响。
- A clone of a dvcs repo contains the entire history so you can keep working, switching branches, commiting features etc. if the network is down, the server isn't responding, you're sitting in an airplane etc.
- Since commits are local to your cloned repository, you have one additional degree of freedom (orthogonal to branches etc.) where you can work on a feature by making a feature clone of the repository and if doesn't work out, just delete the repository and it will never have made it into the history of the upstream repository if you didn't push.
- DVCSes do not dictate a particular workflow. You are free to structure your team interaction any way you want (tiered, orthogonal, flat, centralized, what have you). This is a big advantage that helps teams grow (and shrink) without being left with a system that cannot fulfill their needs by design.
- GIT (and hg as well) supports things like patchsets/quilts directly, which can be used for continous integration. This is usually difficult to do in centralized VCSes so it's mostly just not done (I don't know if TFS has those features)
- dvcs 存储库的克隆包含整个历史记录,因此您可以继续工作、切换分支、提交功能等。如果网络出现故障、服务器没有响应、您坐在飞机上等。
- 由于提交是克隆存储库的本地提交,因此您有一个额外的自由度(与分支正交等),您可以通过制作存储库的功能克隆来处理功能,如果不起作用,只需删除存储库如果您不推送,它永远不会进入上游存储库的历史记录。
- DVCS 不规定特定的工作流程。您可以以任何您想要的方式自由地组织您的团队互动(分层、正交、扁平、集中,您有什么)。这是一个很大的优势,可以帮助团队成长(和缩小),而不会留下无法通过设计满足他们需求的系统。
- GIT(以及 hg)直接支持补丁集/被子之类的东西,可用于持续集成。这在集中式 VCS 中通常很难做到,所以大部分都没有完成(我不知道 TFS 是否有这些功能)