我应该如何使用Mercurial作为一个独立的开发人员?

我决定我想用Mercurial来做一个小型的个人项目。

我读过的大部分帮助都是关于合并多个用户之间的更改。 由于我是独奏,这不会发生。

我应该拥有多个存储库吗? 我的开发计算机已经备份到我的Windows家庭服务器,因此,为了备份目的而在别处存储第二个存储库似乎并不重要。

我应该每天分枝吗? 或只是在发布? 或什么时候?

一般来说,对于使用Mercurial的独立开发人员,您推荐哪些做法?


我使用Mercurial来开发FsCheck,这是一个在codeplex中托管的单元测试框架。 我目前是唯一的开发者,但偶尔会有人给我发补丁。

具体来说,我的文件系统中有一个名为“FsCheck”的文件夹。 在那里,我有一个存储库,因此文件夹称为main。 通常情况下,我在工作于特定功能或错误修复或其他方面的位置旁边有几个文件夹,例如bug-escapingexceptions和feat-statefulchecking和patch-userFoo。 这些是使用hg克隆创建的。

当我完成一个功能或bug修复后,我将该文件夹中的所有内容提交到main。 主要可能合并。 (hg commit,hg push,hg merge)。 然后我删除该文件夹(小心使用hg status和hg outgoing,我没有扔掉一些有用的东西)。

除了发布之前,我几乎从不工作,在那里我做最后的清理(比如说文档)。 在发布之前,我在主要版本号上标记(hg tag v0.5.1)。

Codeplex使用svn作为sourcecontrol。 我只用它来存储版本,为此我使用本地检出的SVN工作副本,并使用hg归档复制Mercurial存储库。 然后提交使用svn。 原始的,但它的作品(使用Mercurial作为SVN的'超级客户'在Windows上是不是非常人性化,但在我的opnion)

我还没有对以前的版本进行维护,但是我会通过克隆该版本的修订版中的主版本库(这很容易,因为我标记了它),并在该单独的版本库中工作。 合并回主干只要将更改推送到主合并即可。

综上所述:

  • 一个文件夹,用于存储项目的所有存储库以及项目名称
  • 在该文件夹中有一个主要存储库,每个“工作单元”有一个临时存储库,并且具有工作单元的描述性名称。
  • 这很好,因为您的分支机构和您正在处理的内容在文件系统中直观可见。


    从您的问题措辞的方式来看,我认为您可能会对版本控制术语有一些误解。

    您应该为每个项目设置一个存储库。 您可以将存储库视为文件系统上的文件夹。 当您在特定文件夹中初始化Mercurial存储库时,该文件夹及其任何子文件夹中的每个文件都有资格添加到存储库以进行版本控制。 您不一定需要添加所有内容,但只要您愿意,其中的任何内容都可以添加。

    如果您愿意,您可以将此本地存储库推送到远程存储库,无论是作为备份形式还是与其他人共享代码的方法。 但是,如果它只是一个个人项目,这很可能不是必需的,特别是因为您已经有一个备用解决方案。

    分支通常用于保持项目的不同“版本”分离。 正如一些人所提到的,这可以作为独奏开发者用于尝试重构代码的方法,或测试针对特定问题的不同方法。 如果它不能解决问题,你不必担心如何确定回滚到哪里,你只需要分支。 如果确实起作用,则将分支合并回主存储库(“主干”)并继续。

    如果你确实到了代码“发布”的地步,并且你需要保持旧版本的维护,你还需要使用分支。 例如,假设您发布1.0版本,并且有些人开始使用它。 在他们使用它的时候,你私下继续朝着下一个版本(也许是1.1)努力,在你的中继库中增加一些功能。 现在,有人在发布的1.0代码中发现了一个需要修复的bug,但是你不能仅仅修复它,而是给它们提供代码,因为它没有被发布的状态。 这是1.0分支派上用场的地方。 您可以修复1.0分支中的错误,并将错误修正更改合并到主干中,以便在此处修复错误。 然后,您可以使用bug修复软件重新打包1.0,并将其发布给用户,而不必弄清楚如何将主干线置于可向公众公开的状态。

    除此之外,使用Mercurial solo通常不会涉及很多奇特的工作。 做一些工作,当你完成一个功能时,将它提交给自己一个“检查点”,如果需要的话,你可以在未来回来。 你不需要每次保存或任何类似的东西时提交,只要你觉得你添加了一些有意义的东西就可以了。 如果你需要回顾一下,这将会给你一个很好的项目历史。

    有关更多信息,我强烈建议花些时间阅读本书:使用Mercurial进行分布式修订控制。 您不必阅读高级主题,但至少阅读第1-5章和第8章会给您一个关于Mercurial和版本控制的很好的介绍。


    我每天都会使用Mercurial,请参阅此处,我也会参考少数支持Mercurial,ShareSource(我在信用页上)的免费托管服务。 自Xen放弃BitKeeper以来,我一直在使用HG。

    我建议你,为了个人项目,不惜一切代价避免分支机构。 Mercurial关于什么是分支的想法与你所期望的有很大不同。 像Git这样的其他系统让分支(和疯狂的科学家想法)更容易一些。 但是,当我需要简单便宜的分支时,我只使用Git。

    我典型的一天有hg:

    (See where I left off)
    # hg status 
    
    (See what I was doing with foo)
    # hg diff -r tip src/foo/foo.c
    
    (Finish one module, commit it)
    # hg commit src/foo/foo.c
    
    (Push changes)
    # hg push
    

    合并也非常简单,以及从相关存储库中提取特定修订。 但是,如果你是独自一人,如果得到解决合并的机会,你可能会因为没有更新远程回购而搞砸了。

    我发布了一些个人爱好项目,一年后我发布了它们,广受欢迎,我很高兴我使用了HG。 它的语法非常接近颠覆,它非常直观且非常便携。

    当然,是的,我使用Git和SVN ..但不适用于个人项目。 关于我的回购索引(已发布链接)的说明,我重新编写了PHP中的hgwebdir,因为我想轻松修改其外观,并从每个回购中提取RSS。

    总之,对于个人使用,你会发现它非常友好。 提交,标签等很简单..避免分支,除非你真的需要它们。

    这是我前段时间写过的一篇教程,介绍如何使用Mercurial管理网站,您可能会在设置密钥hgrc等时感兴趣。

    链接地址: http://www.djcxy.com/p/37545.html

    上一篇: How should I use Mercurial as a lone developer?

    下一篇: Why is branching and merging easier in Mercurial than in Subversion?