背景
我从事过很多小项目(原型,演示,一次性等).它们主要用Visual Studio编写(WPF或ASP.NET,代码用C#编写).通常,我是唯一的编码员.偶尔,我和另一个人一起工作.项目来来往往,通常只需几个月,但我有一套不断发展的公共代码库,我可以重复使用.
问题
我之前尝试过使用源代码控制软件(SourceGear Vault),但是在处理一个小项目时似乎需要很多开销,特别是当我是唯一的程序员时.不过,我想要一些版本控制提供的功能.
这是我想要的功能列表:
让我看任何文件中的旧版本我的项目的瞬间.请不要强迫我完成以下工作:(1)检查我当前的工作,(2)将我的本地副本还原为旧版本,以及(3)检查当前版本,以便我可以再次处理它.
事实上,如果我是项目中唯一一个,我不想退房.我唯一想做的就是说:"请保存我现在拥有的版本2.5."
有效地存储我的数据.如果我的项目中有100 Mb的媒体,我不希望复制我发布的每个新版本.只复制更改内容.
让我将我的公共库代码文件保存在我的硬盘驱动器上的一个位置,以便我所有当前项目都可以从我对我的库中进行的任何错误修复或改进中受益.我不想每次做出改变时都要将我的库复制到其他项目中.
但是,不要让我回到过去任何项目的任何版本,看看源代码(包括库代码)看起来像那个版本发布的时间.
请不要让我在我的机器上存储一个特殊的数据库服务器,这使我的计算机在我甚至不编程时需要更长的时间来启动和/或使用资源.
这存在吗?
如果没有,我有多接近?
编辑1:TortoiseSVN印象
我做了一些Subversion实验.一对观察:
一旦你检查了存储库中的内容,它就会对你的文件产生影响.它将这些隐藏的.svn文件夹放在项目文件夹中.它与文件夹图标混淆.我还没有让我的项目恢复"正常".Unversion一个工作副本让我在那里的一部分,但我仍然有蓝色问号图标的文件夹.这让我脾气暴躁: - /更新:最后通过手动创建新文件夹并复制文件夹来摆脱文件夹图标.(不好.)
我安装了Visual Studio(AnkhSVN)的开源插件.在我的硬盘驱动器中创建一个新的存储库后,我尝试从Visual Studio检入解决方案.它确实让我害怕它会做的事情.它在检查仅是物理(从文件系统的POV)我的解决方案文件夹内的文件夹和文件.为了完成上面的第5项,我需要解决方案使用的所有源代码都要签入.我试图手动执行此操作,但它不是一个用户友好的过程(一方面,当我选择多个库项目时立即尝试检查它们,它似乎只检查了第一个).然后,当我尝试检查后续项目时,我开始收到错误对话框.
所以,此时我对SVN(及其支持软件)有点沮丧.
编辑2:TortoiseHG的印象
我现在正在尝试Mercurial(TortoiseHG).起初有点难以弄清楚,没有比我说的TortoiseSVN更好或更差.我在启动时注意到了一个RPC服务器(与第6项有关).如果我不与任何人分享任何东西,我认为应该可以关闭它,但这不是我能通过查看选项找出的东西(稍后会查看帮助).
我很欣赏我的本地存储库只是一个.hg文件夹.并且,简单地将文件夹放在回收站中似乎就是我需要做的就是将所有内容恢复正常(即,取消我的项目).当我签入(提交)时,它似乎只提供一个简单的注释窗口.我想也许会有一个放置版本号的地方.
我(可能不是很聪明)尝试添加一个Windows快捷方式(一个别名我的库项目的文件夹)失败,而不是我真的认为它会工作:)我想也许这将是一个偷偷摸摸的方式来获取我的图书馆项目(目前位于其他)包含在存储库中.但不是.也许我会尝试"subrepos",但该功能正在建设中.所以,如果没有一些手动同步,我将能够完成第4项和第5项.
任何分布式源代码控制解决方案似乎都符合您的要求.看看bazaar,git或mercurial(已经在上面提到过).我个人从v0.92开始就一直在使用集市,没有投诉.
编辑:哎呀,再看一遍后,我很确定这3个解决方案中的任何一个都能处理你所要求的所有6个功能.
我认为Fog Creek的新产品Kiln会让你非常接近.针对您的具体要点:
这可以通过Web界面轻松完成 - 您无需触摸本地副本或更新.只需找到您想要的文件,单击要查看的修订版,您的代码就会出现在您的面前.
我不知道,你可以做的事情正是像"请把这个保存为2.5版本",但你可以到变更集,使您可以识别一个特殊的版本(其中"特殊"可以指任何它想要你)添加独特的标签.
Mercurial已经做得很好(窑在后端使用),所以在这方面不应该有任何问题.
通过创建不同的存储库,您可以轻松地拥有一个中央"核心"部分,该部分在各个项目中保持一致(尽管我不完全确定这是否是您所说的).
我想大多数版本控制系统都允许你这样做......
Kiln是托管的,所以对本地机器的性能没有任何影响.您提交给系统的代码是安全可靠的.
最重要的是,Kiln可以通过他们的学生和初创版免费获得最多两个许可证(这也可以获得FogBugz的免费副本).
窑现在正处于公开测试阶段 - 您可以在我的第一个链接上请求您的帐户 - 并且随着越来越多的问题已经解决,用户将被释放.(有关当前测试版用户所说的内容的一些想法,请查看专门用于反馈的Kiln Knowledge Exchange网站.)
(完全披露:我是一名现在在Fog Creek工作的实习生)
分布式版本控制系统(Mercurial,Bazaar,Git)很不错,因为它们可以完全自包含在工作副本顶部的单个目录(.hg,.bzr,.git)中,其中Subversion使用单独的存储库目录,以及工作副本的每个目录中的.svn目录.
使用TortoiseHG和TortoiseSVN,Mercurial和Subversion可能是最容易在Windows上使用的; Bazaar GUI也在不断改进.显然还有TortoiseGit,虽然我没有尝试过.如果您喜欢命令行,Easy Git似乎比标准的git命令更好用.
我想更详细地讨论第4点,公共库.不幸的是,我认为它们中的任何一个都不会太容易使用,因为我不认为它们是由GUI直接支持的(我可能是错的).我实际上在实践中使用的唯一一个是Subversion Externals.
颠覆在这项工作上相当不错; 你可以使用Externals(参见SVN书中的章节),但要将项目的版本与库的版本相关联,你需要在外部定义中"固定"库版本(它本身是版本的,作为属性的目录).
Mercurial支持类似的东西,但两种解决方案似乎都有点不成熟:最新版本内置的子存储库支持和"Forest Extension".
Git有"子模块"支持.
遗憾的是,我还没有看到像Bazaar的子存储库或子模块这样的东西.