如何将mercurial配置为仅部署网站文件夹
我有一个网站,我想部署到客户端开发和UAT环境,该网站是mercurial repo的一部分-它位于与.hg文件夹相同级别的网站文件夹中。我知道我可以推送整个存储库,但宁愿只推送网站文件夹,这样客户端就不会有其他文件和文件夹 回购协议如下所示:如何将mercurial配置为仅部署网站文件夹,mercurial,tortoisehg,mercurial-subrepos,Mercurial,Tortoisehg,Mercurial Subrepos,我有一个网站,我想部署到客户端开发和UAT环境,该网站是mercurial repo的一部分-它位于与.hg文件夹相同级别的网站文件夹中。我知道我可以推送整个存储库,但宁愿只推送网站文件夹,这样客户端就不会有其他文件和文件夹 回购协议如下所示: 项目根 .hg 数据库(SQL源代码管理使用此选项) 文件(所有规格、PDF、艺术品等) Lib(Nuget之前的第三方DLL) 软件包(Nuget内容) 网站(这是我想要部署的唯一区域) .hgignore Project.sln 编辑: 客户
- 项目根
- .hg
- 数据库(SQL源代码管理使用此选项)
- 文件(所有规格、PDF、艺术品等)
- Lib(Nuget之前的第三方DLL)
- 软件包(Nuget内容)
- 网站(这是我想要部署的唯一区域)
- .hgignore
- Project.sln
请求所有更改
添加变更集
添加舱单
添加文件更改
添加了628个变更集,对4326个文件进行了6002次更改
更新到分支默认值
解析清单
调用hook preupdate.eol:
得到,忽略
获得hgsub
获取。hgsubstate
HTTP错误:404(未找到)
[命令返回代码255 Fri Apr 20 10:51:23 2012]
我不知道问题是什么,文件在那里,为什么是404
在我看来,Mercurial不应该用于此目的。如果该网站是一个web应用程序,这一点尤其正确,因为您不应该在Mercurial中使用DLL 您应该看看内置在VisualStudio中的web部署工具。看看这一页,看看它是否适合你的目的
如果无法在目标服务器上安装所需的服务,则可以将其配置为使用FTP 正如其他人所指出的,你不能使用推送来实现这一点。只需从您的服务器到他们的服务器进行“rsync”。您甚至可以在钩子中实现自动化,在钩子中,您推送到本地存储库,它将自动部署到他们的站点。比如:
[hooks]
changegroup.deploy = $HG update ; rsync Website account@theirserver:/path/to/docroot
我有一个有效的解决办法。我创建了一个批处理文件,该文件创建了一个传出的repo,并启动了内置服务器,这样我就可以在客户端机器上从中提取。首先,它清除上一个文件夹,然后从我的本地工作副本克隆(有一个参数来确定它应该从哪个标记克隆)。接下来,它创建一个映射文件,并将网站文件夹转换为新的Website2文件夹,以保留历史记录,然后删除原始文件夹并重命名新文件夹。最后,它启动了内置服务器
cd c:\inetpub\wwwroot
rd /S /Q _ProjectName
hg clone -- C:\inetpub\wwwroot\ProjectName#%1 C:\inetpub\wwwroot\_ProjectName
cd c:\inetpub\wwwroot\_ProjectName
echo include Website > map.txt
echo rename Website . >> map.txt
hg --config extensions.hgext.convert= convert --filemap map.txt . Website2
cd Website2
hg update
cd ..
hg remove Website/*
hg commit -m "Removed Website"
rename Website2 Website
hg serve
所以它并不漂亮,但现在我只需要调用批处理文件并传递我想要从中构建传出网站的标记(uat、dev等),然后给它一分钟时间创建我的网站文件夹,其中包含历史记录,我可以使用它从中拉取或推送。我不需要调用hgserve,因为我知道客户机服务器的名称,所以我可以通过创建别名远程存储库来推动变更集。但是我包括了这个步骤,这样客户端机器就可以拉。我还没有完全探讨过这个选项,所以我不确定它是否有什么特别的优势。如果只有我一个人在做这个项目,这是很好的,但是如果其他开发人员需要做这个,那么他们本地project server的Uri显然会有所不同(http://SIMON-PC:8000/ 不是每个人都会这样),在这种情况下,向客户推销可能是最好的
但通过使用这种方法,我的本地工作回购协议不需要改变,因此我不会收到任何问题
cd c:\inetpub\wwwroot
rd /S /Q _ProjectName
hg clone -- C:\inetpub\wwwroot\ProjectName#%1 C:\inetpub\wwwroot\_ProjectName
cd c:\inetpub\wwwroot\_ProjectName
echo include Website > map.txt
echo rename Website . >> map.txt
hg --config extensions.hgext.convert= convert --filemap map.txt . Website2
cd Website2
hg update
cd ..
hg remove Website/*
hg commit -m "Removed Website"
rename Website2 Website
hg serve