单一开发者的源代码pipe理系统
一个非常小的团队(一个开发人员)推荐的源代码pipe理系统是什么?
价格并不重要。 客户将支付:-)
我正在使用VS 2008在C ++中处理Vista32,后来在C#中使用WPF。 为此设置一个额外的(物理)服务器似乎矫枉过正。
有什么意见?
我会使用Subversion(实际上我使用它)[ 更新 :2014年7月 – 我使用Git – 查看答案的结尾]。 SVN是:
- 自由,
- 足够好(见下面的缺点),
- 简单,
- 在Windows(也是Linux)上工作得很好,
- 很多人使用它,所以很容易得到帮助,
- 可以集成大多数IDE即Visual Studio (即ankhsvn或VisualSVN – 更多信息 )或Eclipse (即Subclipse – 这里有人问)。
我强烈build议单独的机器到源代码pipe理服务器。 至多在云上的某个地方。 优点:
- 如果你的开发盒死了,你不会丢失你的源代码控制库。
- 你不必担心维护一个盒子。
有一些公司托pipeSVN存储库 。
这里是指向各种操作系统的SVN(客户端和服务器)软件包的链接。
SVN的缺点
我在Windows机器上使用SVN大约5年,发现SVN有一些缺点:)。
大型软件仓库速度很慢
SVN(或其客户端–TortoiseSVN)有一个很大的缺点 – 除非你有SSD驱动器,否则在大型(数千个文件)存储库上的速度很慢(更新或提交)。
合并可能很困难
很多人抱怨SVN合并的难度。
我合并了大约4年(包括在CVS约2年 – 这是可怕的,但可行),并与SVN约2年。
而我个人并不觉得很难 – 另一方面 – 在合并CVS分支之后,任何合并都很容易:)。
我实际上每周都会合并一个大版本库(实际上是两个版本库),很less遇到难以解决的冲突(大部分冲突都是用我使用的diff软件自动解决的)。
但是,如果你遵循一些简单的规则,如果less数开发者合并的项目应该不是问题:
- 经常合并变更,
- 避免同时在各分支机构积极发展。
于2011年7月添加
许多开发者推荐分布式版本控制,比如Git或Mercurial 。
从单一开发人员的angular度来看,DVCS相对于SVN只有几个重要的优势:
- DVCS可以更快。
- 您可以提交到本地存储库,而无需访问中央存储库。
- DVCS是热门的东西,喜欢使用/学习(如果有人支付你的学习)。
而且我不认为在单个开发者的情况下合并是一个问题。
Joel Spolsky写了关于Mercurial的教程,这是值得一读的。
所以,尽pipe有DVCS的许多优点,如果合并或速度不是问题,我会留在SVN中。
或者试试Mercurial,根据这个和这个 SO问题,在Windows上得到更好的支持(2011年7月)。
于2014年7月新增
大约一年来,我用Git(主要是Git)为我的宠物项目(即解决欧拉问题)和地方分支机构的每个欧拉问题是非常好的function – 正如它被描述为DVCS的优势。
今天,Windows上的Git工具比2年前更好。 您可以使用远程回购(比如GitHub或ProjectLocker等)来保持项目的副本远离您的工作站,无需额外的努力/金钱。
然而,我只使用GUI客户端查看差异(有时select文件提交),所以最好不要怕命令行 – 这真是太好了。
所以今天我会和Git一起去。
我也build议Mercurial。 它的命令集非常像Subversion中的命令集,所以学习曲线并不那么陡峭。 如前所述,它旨在在本地运行,但也可以轻松地在计算机之间共享/合并更改,甚至可以将其推送到远程服务器进行备份。
它提供了很好的工具,比如TortoiseHG ,它有很好的NetBeans和Eclipse插件。 它也是在Win32上本地运行的,因为它是用Python编写的。
如果您不想自己设置服务器(例如备份),则可以使用免费的托pipe服务提供商; Mercurial Wiki上有一个完整的列表。
我肯定会推荐git
适用于大型和小型团队。 只有缺点是本地Windows支持不佳。 尽pipeCygwin对我来说工作的很好。 还有一个本地的Windows端口 。
它的一些好处:
- 对非线性工作stream程的优秀支持。 它的分支和合并比Subversion好得多。
- 好的工具来导航你的仓库
- 处理好大项目。
- 在不更改存储库的encryption签名的情况下修改历史logging是不可能的
- 由于其非整体devise,脚本很容易。
有些人发现它有一个陡峭的学习曲线。 但一旦你明白了,你几乎可以做任何你想要的东西。
去颠覆和tortoiseSVN,你不需要在服务器上设置它。
- 成本为零
- 颠覆文档是伟大的,有趣的阅读
- tortoiseSVN是一个非常方便的客户端
Sourcegear的Vault是一个不错的select,它运行在SqlServer上,并且已经存在很多年了。 我不会使用任何版本的VSS(Visual Source Safe)。
Subversion的进入门槛很低。
TortoiseSVN是一个免费的客户端,并集成到您的资源pipe理器,即在右键单击菜单。
存储库可以只是PC上或networking驱动器上的某个目录。 备份只是意味着压缩这个目录
有一些Visual Studio的Subversion插件, AnkSvn是我用过的,它是免费的,很好地集成(即移动和删除文件等)
对于一个开发者来说,Subversion是一个不错的select
更新:
自从这篇文章以来,我一直在使用Mercurial。 这是一个分布式的SVN。 “分布式”方面可能不会直接对单个开发人员有用,然而它合并更好,速度更快。 还有一个免费的,很好的Windows资源pipe理器扩展客户端 – 乌龟汞 。
所以总之,如果你是那种一次在许多分支上工作的人(做高潮等),或者你一次在多台电脑上工作,并希望完全离线访问两者的检查历史,那么Mercurial 。 如果你只是想简单的跟踪和一个成熟的和易于理解的解决scheme,那么Subversion 。
我很惊讶没有人提到过Perforce 。 2人免费,速度非常快,并与VS集成。 另外源服务器默认绑定它。
除了源码控制之外,完成这个循环并设置一个符号服务器和一个源服务器是非常值得的,这样你就可以简单地debugging你已经发布的任何东西(例如,不再search与二进制文件匹配的pdbs或源代码) 。 自2005年以来,源代码和符号服务器都是完全免费的,并且支持VS。
您可以使用SourceGear作为Visual Studio源代码安全的替代工具。 IDE集成在Visual Studio中。
该工具对于单个用户是免费的。
更多信息: http : //www.sourcegear.com/vault/index.html
我使用Mercurial 。 它在我的Vista开发系统上独立运行,无需其他依赖关系。 我使用命令行,但也有TortoiseHG与资源pipe理器集成。
两点评论:
- 还有其他的工具可能更好地与VS集成。 我认为Subversion有很好的VS插件。
- 一个单独的服务器的好处是,这是一个很好的备份所有的工作,如果你的硬盘等死在你等等,所以打折有一个。
编辑: @Slartibartfast – 如果你只是想在单个机器上运行源代码控制,像git或Mercurial这样的分布式源代码控制工具是理想的,因为它们被devise成在没有服务器开销的情况下在机器上运行完整的存储库。 事实上,你从来没有连接你的存储库到其他人的推拉变化并不意味着这个工具是不对的。
针对您的问题有两种可能的解决scheme:集中式VCS或分布式VCS(DVCS)。
像Subversion这样的集中式VCS可以满足您提交和浏览日志的function。 它还使您能够安全地将您的存储库存储到另一台计算机,这应该是您的主要目标之一,因为硬盘驱动器故障始终是可能的。 但是,使用Subversion,历史logging仍然只存在于中心位置,这使得它很容易受到攻击,并且你说你不想拥有另一台服务器。
分布式版本控制系统(DVCS)(如Mercurial和Git)使您可以在存储库上执行更复杂的操作。 使用这两种工具,整个存储库都驻留在同一台计算机上,这使得备份和使用另一台计算机(如笔记本电脑)的存储库变得更容易。 虽然Mercurial看起来似乎很复杂,但是使用Subversion的操作与Mercurial几乎是一样的。 因此,如果您已经了解Subversion,就没有额外的开销,您可以稍后使用Mercurial的更高级function。
您应该能够find您的Mercurial存储库的在线存储库服务,使您可以轻松地进行备份,并在某天有需要时进行协作。
我的build议是Mercurial与TortoiseHg。
源代码pipe理系统不关心是否只有一个开发人员参与:)
我build议你使用之前使用过的源代码pipe理系统。
如果你喜欢vs 2008源代码控制系统的整合,但是我会去TFS,尽pipe我从来没有经验来设置它,但它不应该这么难。
另一种可能是使用svn(你会在google上find一些服务器),并使用集成到windows shell中的Tortoisesvn ,并且很好用。
许多post主张将存储库放在服务器上,因为它提供了冗余。 我不认为这对单个用户是有帮助的。 使用单独的服务器机器会增加很多复杂性,但是不会购买太多的冗余:如果您丢失了服务器机器,您的开发机器上仍然有当前的源代码,但是您可能已经失去了所有的历史logging。 如果定期备份该服务器,则将存储库放在服务器上确实有意义。 对存储库使用外部托pipe服务可以提供存储冗余,但是您处于外部服务的摆布之中,并且您需要连接到互联网才能访问存储库。 如果您使用外部主机,请频繁备份您控制的存储库!
我会先使用本地文件库来推荐TortoiseSVN。 只要确保将本地存储库定期备份到第二台机器或外部介质(如CD-ROM)。
我推荐两件事情:
首先,其他服务器 – 如果你的机器死了会发生什么? 房子烧了? 从冗余的angular度来看,将它安装在另一台机器上是一个好主意。
第二个是什么:
如果您对视觉源(非)安全非常熟悉,请考虑SourceGearVault。 这是非常好,非常快,非常大的改进VSS“克隆”(即从用户POV,同样的方式工作,而不是在引擎盖下)。 需要SQL服务器和Windows寿(这是.NET + SQL服务器)。 免费为1个用户。
你不是,那么我build议你做两件事情之一:
首先,获取VisualSVN。 很棒,和VS2008一起工作得很好。 其次,如果您必须在本地运行,请获取VisualSVN服务器(免费!)。 确保你有一个好的备份计划。 在XP / 2003/2008 / Vista等运行。它只是Apache + SVN,在引擎盖下,所以它只是节省您的设置 – 花了我5分钟安装并运行。
或者,我更喜欢这个:
去像Unfuddle,Dreamhost等地方,并得到托pipeSVN。 它是私人的,速度很快,最重要的是它是OFFSITE。 我梦寐以求的帐户,有一些像500GB的存储和1-2TB的转移/月大约$ 6 /月的疯狂的东西! 还有其他的SVN主机+错误跟踪等。环顾四周。
但是 – 是的 – SVN是schizzzznit.you可以创build一个本地存储库,但我喜欢有一个远程,备份服务器。
对于1个开发人员(或者<5个IMO),TFS是完全不必要的,
我意识到,成本不是一个问题,但一个很好的免费的解决scheme,不会涉及检查和出,将托pipe在Dropbox的代码,通过这样做,你会立即得到版本和备份,这是主要function,单开发者系统会提供。
Bazaar是一个很好的版本控制系统。 我喜欢将它用于我的Linuxconfiguration,因为您不需要创build单独的回购。
前一阵子,我做了一个关于如何使用SVN和一个开发者的博客文章。 我称之为单服务源控件
天儿真好,
我会在这里问一个明显的问题。
客户使用什么系统(如果有的话)?
例如,您不希望将从SVN或CVS到Clearcase的事情复杂化。
干杯,
抢
那么,开始时,你不需要分发一个:)我不知道这个物理部分是什么意思,因为你可以把svn服务器放在你自己的机器上。
另一方面,NetBeans具有本地历史logging模块,用于logging文件的所有本地更改。 如果Visual Studio有类似的东西的话,那么对于你来说就足够了。
我build议Subversion,因为它是单一的开发人员,我假设你没有做复杂的合并和大量的日志/历史检查。
似乎很多人正在使用http://svnrepository.com/为他们的托pipe。; 它随着Trac甚至Git,如果你以后需要它。
这里有一些好的答案。
我想重新build议使用单独的计算机来托pipe源代码pipe理服务器,尽pipe它不一定是专用的机器。 它可能是您的Windows家庭服务器框,或者您已经运行的其他服务器。 或者它可能是一个其他服务器上托pipe的虚拟机。 无论如何,只要将它与您编写代码的机器分开即可。
我也想build议你为你的服务器获得一个很好的备份纪律。 至less每晚至less; 如果可以,每小时一次。 备份到专用设备(如外部硬盘驱动器)或异地(另一个州的表兄的服务器)或云(Amazon S3)。 请记住,您的源代码是您的关键资产; 搞定此事!
我已经与Bazaar工作了几个星期,真的很喜欢它。 我是一个Linux开发人员,所以对Tortois不太了解,但是如果你喜欢,你应该知道Tortoisbzr
手下来我会使用Git,我相信很多原因,为什么单个开发者想使用Git暗示或描述在Git魔术
我使用Springloops – 开发人员的版本控制工具
- SVN / Git版本控制
- 自动部署到服务器
- 创build存储库
- 邀请人
- 导入文件
- 大力支持
所以,试试Springloops
我不明白为什么你的一个开发人员改变源代码pipe理问题上的任何事实。 我会遵循相同的系统(事实上,我在我的个人项目上)。 在这些情况下我使用wush.net (svn和trac)。 设置速度快,不要求自己做或知道任何服务器问题。 我build议你使用这样的东西。
我会build议使用颠覆。 许多人build议使用一个单独的盒子作为服务器,以防您的开发机器死亡。 当SVN服务器死亡时会发生什么? 这里的答案是,无论您select在哪里运行服务器,都要确保您经常进行频繁的备份,可能每天都会自动进行一些次级备份,最好是异地备份。
我也使用Perforce作为我个人的东西,主要是因为我们在工作中使用它。 还有emacs的绑定,所以你可以同步,检查东西,所有从emacs内。
我最近把我的工作室从Subversion移到了Perforce,并在我的博客上写了一些关于它的注释,这是一个事后分析。 希望它是有用的。