我们最近决定开始使用SCM软件(是的,我们可能应该很久以前),我们决定尝试使用Mercurial。从我可以发现,据说它比Windows更好地使用Windows。我们还计划使用TortoiseHG而不是命令行,因为这是我们更熟悉的。我的学习时间还很早,我有一个问题,我一直在寻找相互矛盾的答案。
我们有一个apache服务的PHP站点。我们计划将每个开发人员的工作副本放在不同的端口上,直到将来我们可以正确虚拟化服务器(每个开发人员一个)。我们希望在继续新开发的同时为“稳定”构建保留分支/标记/内容。当然,每当有错误修正时,我们想立即推送它,但我们也想将它合并到dev分支中。
我从一些人那里听说我们应该克隆回购,在克隆中做我们的更改,然后在完成时将其合并。
我也听说过我们应该只使用分支,并在完成后合并分支。
在存储库的情况下,你如何处理apache?每次添加新功能时都必须将其重新配置为指向不同的目录是一件痛苦的事情......
感谢你们光芒四射。我很感激帮助!
我们如何解决这个问题?
[编辑] 另外,关于HG,什么是“搁置”和“补丁”?谢谢。
答案 0 :(得分:1)
在distributed revision control system中,没有中央服务器,每个“克隆”都有整个存储库的副本。在本地仓库中进行更改,以后将更改集推送到其他仓库(或从中拉出)。因此,实际上每个克隆都是一个分支,每个“提交”都是一个合并。
我将在下面建议一个工作流程示例。有关我撰写的内容的更深入说明,请参阅this article(编辑:实际上我的意思是this one,关于版本管理,但另一个也很有用......)和this short Mercurial overview。
假设您有一个“主”存储库,它将包含所有开发人员的所有最新信息。您可以克隆它(一次)并创建一个“生产”存储库。之后,将其更新为最新的稳定版本(应该使用标记进行标记)。
您还可以为每个开发人员再次克隆它(重申:您只克隆一次),并使它们彼此独立工作。他们可以随意提交(因为提交只影响本地存储库),理想情况下应该只在变量集稳定时将其变为“main”。他们也可以从其他开发人员那里获取变更集,但是他们可以立即执行合并。当“main”有一个稳定的版本时,它应该被标记为这样,“生产”可以拉动并更新到该版本。
如果在生产版本中发现了错误,任何开发人员都可以:a)提交(或搁置)他们当前工作的目录; b)将他们的工作目录更新为同一修订版“生产”正在运行; c)修复bug,提交并推送更改; d)再次更新到他离开的地方并继续正常工作。新的变更集将可用于“生产”以进行提取和更新,并且还可供每个开发人员将其合并到当前版本中。
对于每个工作副本(端口号,数据库实例等)特定的内容,您应该将它们存储在单独的配置文件中,并将此文件忽略我的Mercurial。这样,即使在更改版本时,这些值对于每个开发人员和生产实例也将保持不变。