本地服务器的SVN,GIT或Mercurial

mat*_*tyb 4 svn git version-control mercurial git-svn

我希望在我们的本地服务器上安装一个版本控制系统.我一直在关注SVN和GIT的优缺点,甚至是Mercurial.

目前我们有大约30-35个不同的网站.我会创建一个包含所有文件夹的仓库吗?还有哪个更好地处理所有这些作为个人网站项目?GIT还是SVN?

我还必须在我们的Linux服务器上安装它,并为开发人员创建开发沙箱.涉及的人也使用Windows和MAC.

我只是在寻找经验建议,以及如何在服务器上本地安装它们的指导性链接.

至于APPS,我相信TourtiousGIT/SVN在Windows上很好,而Tower和Versions在MAC上也很不错.

Jan*_*ger 5

让我们尝试平衡比较,基于这样的前提:在您的场景中,您可能无论如何都不需要任何高级功能.

对照

存储

  • 文件系统上的布局:SVN需要两个东西,工作目录和存储库,用于处理数据.这不仅会造成不必要的元数据重复,而且会使事情变得更加笨拙.Git和Mercurial都可以将完整的历史保存在工作目录中(每个工作目录都是一个完整的存储库).如果您不打算在服务器上签出文件的副本,这就不太相关了(但是它总是比这复杂一点,所以请记住,可能还有其他情况下这整个子弹点根本不适用).

  • 工作目录的混乱:SVN .svn在存储库的每个子目录中添加子目录; Git和Mercurial只在顶层添加一个.git/ .hg目录.

  • 空间消耗:Git和Mercurial使用的存储机制往往比SVN更有效.Git的缺点是必须偶尔优化存储库(如果你没有非常大的文件,它往往会相当快); 我不知道Mercurial是否有必要,但我怀疑它不是.

结论:我推荐Git或Mercurial.

特征

既然你可能甚至不需要Git/Mercurial更好的合并功能,我不认为这是一个决定因素.如果您计划同时处理多组更改,则不适用; 在这种情况下,Git/Mercurial可能会让事情变得更容易.

速度

众所周知,Git和Mercurial比SVN更快,特别是因为它们的设计允许在本地执行许多操作.

  • 看看旧东西:在SVN中查看您的更改历史意味着SVN必须连接到远程存储库并查看其中; 在(例如)Git中,历史通常在SVN建立连接之前显示.

  • 依赖于操作系统:Git的许多优化主要适用于Linux; 例如,Windows可能会遇到更糟糕的性能.对于其他竞争者来说,情况可能也是如此,我不知道.

  • 传输:几乎在任何情况下,Git和Mercurial都比SVN更快地发送和接收新的变化.

结论:如果你喜欢快速的话,Git和Mercurial是首选.在Windows上,Mercurial可能是更好的选择,但如果您想确定,请咨询/执行实际基准测试.

DVCS

Git和Mercurial允许开发人员继续处理他们的事情,并在一组合理的提交中组织它们,即使它们当前没有连接到您的网络.在SVN中,提交只能在它们最终在服务器上的同时进行,因此SVN用户倾向于使用更多的单片(因此更难以理解)提交.另一方面,至少Git甚至有一个工具可以使用二进制搜索快速找到引入错误的提交.同样,SVN可能会出现在底部.

复杂

我是Git的忠实粉丝,我很容易同意Git不是最用户友好的VCS,至少如果你不了解它的设计.对于更高级的用例,我相信工具链可以弥补这一点; 在您的情况下,您可能更喜欢Mercurial或SVN,除非您希望将来使用相同的VCS来处理更复杂的项目.

工具,接口

我不太了解Mercurial,所以我不太熟悉它存在的接口.实际上我也没有为Git使用任何花哨的shmancy接口,但是我相信所有的竞争者都有很多工具允许基本用法,我们可以说,不喜欢命令行的人.但是,我强烈建议您在对团队中的任何特定内容进行操作之前先进行一些小测试.

你的问题

对于不同的系统,存储库的结构往往不同.在SVN中,可以在同一个存储库中拥有一大堆项目; Git和Mercurial强烈希望每个项目都有一个存储库.对于共享代码,Git至少有三个工具(其中两个是第三方)用于使用外部存储库,Mercurial可能也有一些东西.无论如何,我知道SVN有类似的东西.

如果您将它们作为单独的存储库进行管理,我可能会推荐Git或Mercurial,因为正如已经说过的那样,它们往往每个存储库的开销更少.

如果您使用任何更大的Linux发行版,在您的服务器上安装Git/Mercurial/SVN可能很容易; 几乎可以肯定现成的包装.如果您预计必须管理具有不同的每用户访问控制的许多存储库,那么Git的一个很好的管理系统称为gitolite.如果没有类似的东西,管理几个存储库可能会有点麻烦.