对于每个公共服务器,我们有三个阶段:开发,testing和生产。 每个阶段都是一个Web服务器。 我正在使用Mercurial中的命名分支来补充这个过程。 诀窍是将正确的版本推送到正确的服务器上,也就是说,当脚本发布testing运行时,testing分支将被推送到testingnetworking服务器。
我有钩,所有的细节都解决了。 我不确定的部分是Mercurial文件结构。 我想实现使用RSync的发布过程,为此,我需要一个本地文件夹进行同步,这个文件夹可以是我在服务器上创build的存储库,但是我需要确认的是如果服务器版本的存储库可以是目前我想要的任何分支。
也就是说,我在testing中创build一个存储库
cd test hg init touch sample hg add ./* hg commit -m "whatever" -u someowner
现在让我们说,我从工作站做了一堆工作,并提交更改到存储库,创build两个命名分支test和prod 。 我所关心的是实际的testing目录。 我可以使该目录包含某个命名分支的最新版本(在我上面进行初始化的服务器上)并且不会伤害存储库本身吗?
在我刚接触Mercurial的背景下,
如果我理解了这个场景和问题,那么答案是“是”。
让我解释一下我认为你在问什么:你有一个Mercurial仓库托pipe在某个地方,你有三个命名分支在这个仓库。 我会假设他们被命名为default , test和prod 。 开发人员将更改推送到存储库中。
您想要将代码发布到三个不同的Web服务器上,我们称之为web-default , web-test和web-prod 。 你想为此使用rsync 。
这是一个非常合理的设置。 主要问题是如果你可以运行
$ hg update test $ rsync -av --exclude .hg . web-test:/var/www
在服务器存储库,如果它会影响未来的推动。 答案是肯定的,你可以更新工作副本到你想要的任何版本 – 推送到服务器的更改集不会受到任何影响。
所以你可以在服务器上做三个钩子,就像这样:
[hooks] changegroup.default = hg update default && rsync ... web-default:/var/www changegroup.test = hg update test && rsync ... web-test:/var/www changegroup.prod = hg update prod && rsync ... web-prod:/var/www
只要有人推送到存储库,就会将每个分支的提示发布到相应的web服务器上。 我希望能帮到你!