我决定在一个小的个人项目中使用Mercurial。
我读到的大部分帮助文档都是关于在多个用户之间合并更改。由于我是单独工作,所以这不会发生。
我应该有多个存储库吗?我的开发计算机已经每晚备份到我的Windows Home Server,因此似乎没有必要再在其他地方建立第二个存储库只作为备份。
我应该每天进行分支吗?还是只在发布时或何时分支?
总的来说,你推荐哪些实践方法适用于使用Mercurial的单独开发人员?
我决定在一个小的个人项目中使用Mercurial。
我读到的大部分帮助文档都是关于在多个用户之间合并更改。由于我是单独工作,所以这不会发生。
我应该有多个存储库吗?我的开发计算机已经每晚备份到我的Windows Home Server,因此似乎没有必要再在其他地方建立第二个存储库只作为备份。
我应该每天进行分支吗?还是只在发布时或何时分支?
总的来说,你推荐哪些实践方法适用于使用Mercurial的单独开发人员?
从你提问的方式,我认为你可能对版本控制术语有一些误解。
每个项目应该有一个单独的代码库。你可以把代码库简单地想象成文件系统上的文件夹。当你在特定的文件夹中初始化Mercurial代码库时,该文件夹及其子文件夹中的每个文件都可以被添加到代码库进行版本控制。你不一定需要添加所有文件,但如果需要的话,任何文件都可以添加。
如果你想要将本地代码库推送到远程代码库,可以作为备份或与他人共享代码的方法。但如果这只是一个个人项目,这很可能是不必要的,尤其是因为你已经有一个备份解决方案了。
分支通常用于将项目的不同“版本”分开。正如一些人所提到的,这对于单独开发者来说很有用,可以尝试重构代码的方法,或测试解决特定问题的不同方法。如果不起作用,你不必担心回滚到哪里,你只需删除该分支。如果成功了,就将该分支合并回主要代码库(“主干”),然后继续工作。
如果您在代码上做了"发布"并需要维护旧版本,您还需要使用分支。例如,假设您发布版本1.0,有些人开始使用它。当他们在使用时,您在主干存储库中私下继续朝着下一个发布版本(比如1.1)添加功能。现在,有人发现了需要修复的1.0版本代码中的错误,但您不能只是在主干中修复它并将代码提供给他们,因为该代码未准备好发布。这时就可以派上用场1.0分支。您可以在1.0分支中修复错误,并将bugfix更改合并到主干中,以便在那里也修复该错误。然后,您可以重新打包1.0版本并添加bugfix,将其发送给用户,而无需想办法让主干处于准备发布的状态。(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
这些通常与任何软件项目的工作方式相同。仅拥有或不拥有版本控制已经无需讨论 ;)
通常,当您的功能准备好时,您只需提交即可。由于您有备份,因此不需要每天提交以确保您的工作得到安全存储。
对于分支:在我的个人项目中,我主要使用它尝试想法,例如当我有另一种解决相同问题的方法时。为此,我也喜欢Git的stash命令。
但是我确实有多个代码库。我有一个带有shell访问权限的托管服务,可以将代码推送到该服务。因此,无论我在哪里工作,无论我使用的是哪台工作站(在工作场所:当我有时间编码时,在家中的台式机以及在父母家时使用的笔记本电脑),都可以与该存储库同步。
我之前使用过CVS、Perforce和Subversion作为我的个人版本控制系统,大约两周前开始使用Mercurial :-) 在工作中,我们使用MS Team System...
对我来说,最值得注意的新功能是在不同机器之间轻松传输。在工作中,我有一些存储在Mercurial repo中的东西(使用hg作为Team System的超级客户端)。我定期将所有更改推送/拉取到/从我的笔记本电脑上,这样我就可以在两台机器上拥有完整的历史记录。
在家里,我也会从笔记本电脑上推送/拉取repo。
因此,我可以在任何地方工作(在家办公使用强大的计算机,在路上使用笔记本电脑或在工作中),而不必担心会丢失更改。好吧,偶尔我需要合并两个更改,但那很少会有问题...在我看来,hg做得非常好。
此外,Mercurial的“设置成本”相当低。你阅读一篇教程,安装它,输入“hg init”,然后继续工作。不再需要决定某些东西是否属于你神圣的SVN服务器,放在哪里等等。Mercurial的“摩擦力”比SVN的低一些。
我认为这取决于您是否正在维护现有应用程序并同时添加功能(或修复大型错误)。
这样,您可以在自己的分支中创建新功能,同时修复主分支中的错误。
我对我的应用程序正是这样做的,但使用本地版本的CVS。此外,如果新开发人员加入您的团队,您就可以开始工作了。
我同意这与备份是两个不同的问题。
祝好运,
Randy Stegbauer