我应该如何以及使用哪种工具进行源代码管理?

时间:2011-01-27 01:13:09

标签: c# visual-studio version-control tortoisesvn

首先介绍一点背景:

我一直在使用Team Foundation Server大约几个月,并且知道如何使用它。我一直在将它用于Codeplex上的项目。他们需要TFS并且它在我的Visual Studio安装中,所以基本上我从来不知道如何使它工作,因为它在Visual Studio中无缝工作,我只需要检查和检查东西...

但现在我想看看其他替代品是否可用并首先安装了Mercurial命令行(我从未使用过),然后搜索了GUI替代品并安装了TortoiseHg并遵循其网站上的文档说明。然后它说要安装一个3路Diff工具......我搜索了它然后找到了TortoiseSVN;我认为它必须是一些插件或其他东西,所以当我偶然发现SO Question时,我搜索了与我的情况相关的问题,并且非常迷恋于这么多工具用于不同的工作。

现在:

  • 有人可以解释所有用于源代码控制的工具。我是否必须为每个不同的任务安装不同的工具。是不是所有人都有任何一个包。基本上我们在Source Controlling中执行的任务是什么。我只知道签入,签出和检查Codeplex网站的差异。 我还应该知道什么

  • Git,BitBucket等每个网站都使用不同的Tortoise(xxx)进行源代码控制。

  • 源控制和版本控制是否有不同的术语

请帮助..

3 个答案:

答案 0 :(得分:5)

这是一个很大的话题,不可能提供一个包罗万象的答案。尽管如此,这里有一些想法,假设您正在寻找更多Software Configuration Management解决方案,而不是简单的Revision Control System类型方法:

发布管理:

除了并发控制(签入,签出等),您的SCM还可以/应该提供历史记录,标记,分支和其他版本管理类型功能。也就是说,它应始终提供单一的事实来源,告知哪些源文件何时发布到哪个版本,服务包等。为了做到这一点,您的构建环境需要很好地集成到您的SCM中。

WIP管理:

一个好的SCM系统可以让您将正在进行的工作与最新的已检入版本进行比较。它还应该让您恢复您的WIP,暂时搁置它,或者逐个文件地合并其他更改。

文档&训练

不要低估使用可以为您提供大量帮助,书籍,文档,社区支持甚至付费支持的工具的重要性。同时选择一个受欢迎的"工具可能意味着一些新开发人员可以少学习。

持续整合:

自动构建是任何严肃组织必须的,您应该选择可以由构建系统访问的SCM(例如Hudson,CruiseControl,Bamboo等)

安全

SCM系统应该具有内置的身份验证系统,并且能够使用外部身份验证提供程序,因为许多组织会随着时间的推移而发生变化。此外,它应该能够支持在防火墙之外工作的开发人员,最好是支持http。

IDE和构建工具集成

为了简化所有这些工作,您的SCM必须能够无缝链接到您的开发系统和您使用的任何命令行工具中。几乎所有非Microsoft IDE都支持所有SCM工具,这一事实变得更加容易。

来源浏览

我见过的大多数SCM工具都有许多质量非常高的第三方浏览器,例如Fisheye。因此,我将其视为差异化因素。

那么使用哪种工具?

如果贵公司的组织包含得非常好,那么请选择Subversion。它非常受欢迎,与每个IDE / OS / Build工具集成,与ToroiseSVN一起工作,支持所有平台,支持多种协议,多个UI,强大的命令行,庞大的社区,免费,并且坚如磐石。它也有一个很好的免费book

如果你有一个高度分散的开发小组和/或期望从许多不同的人那里获得开源贡献,那么请使用Git的分布式功能。

除了这两个,节省大量的时间和麻烦,忘记其他一切......真的。我意识到自己很自以为是,但你有点要求提出意见。

答案 1 :(得分:1)

如果我要向你提出建议,那就是

  

使用mercurial(aka hg),然后开始   在命令行中学习它。那   你将学习所有基本概念,   这可能有点隐藏   你只使用这样的GUI覆盖   作为TortoiseHG。一切都很好   当然,简单的教程也许   众所周知的hginit涵盖   一些简单的使用场景。

那将是“我还应该知道什么”部分的答案,至少在一开始就是这样。然后你可以自己探索,有一个有限但有点坚实的基础。或者,至少,您可以提出更简明的问题来了解更多信息,或者更深入地了解您引用的SO问题。当然,你的问题比这更广泛,但我建议不要试图一次掌握一切。每个系统都有它自己的怪癖和专长,但你现在不应该担心这个事实。就像编程一样 - 如果你还不知道,你不应该一次学习多种语言。

啊,作为画龙点睛:Tortoise(xxx)并不完全是一个版本控制系统,这只是一个典型的shell集成Windows客户端到系统xxx的名称。就我而言,“乌龟”部分指的是“贝壳”。


PS。 “Mercurial”的建议当然归功于我个人的品味,也是因为学习Hg会让你很容易掌握其他系统的大部分想法(如果你需要的话)。

答案 2 :(得分:1)

根据我的个人经验,我建议您查看称为分布式版本控制系统的新一代“源控制系统”。这些是像Git这样的系统(我认为Mercurial,但我没有使用它。)在本地存储完整版本控制系统,当你提交到远程存储库(推入git术语)时,你可以在本地版本中推送更改控制系统到服务器上的主版本控制系统。

Git也是为了让Branching变得轻而易举。在像Subversion这样的系统中,分支并不容易,但使用Git Branching是推荐的更改方法。我使用过Git,Subversion(SVN)和SourceSafe(迄今为止三者中最差的源控制系统!),这是Git相对于更传统的源代码控制系统的主要优势。

例如,如果您要修复错误或在使用SVN的代码库中添加功能,则标准做法是

  1. 查看您将要工作的分行。
  2. 修复任何错误并对其进行测试。
  3. 检查更改。
  4. 使用Git或类似系统

    1. 在本地分支主分支(即开发,产品版本1.1等)。
    2. 在您的本地分支版本中进行任何错误修复并进行测试(即您为版本1.1制作了jira-123-bugfix分支)。
    3. 将分支合并回您创建它的主分支的本地副本,并确保一切正常。
    4. 然后将您对主分支的本地副本所做的更改推送到中央Git存储库。
    5. 这样做的好处是,如果您必须返回并修复错误修复程序,您仍然可以获得该分支的本地副本。

      有关详细信息,请参阅A Successful Git Branching Model等文章。