我有一个网站,我想部署到客户端DEV和UAT环境,该网站是mercurial repo的一部分 - 它位于与.hg文件夹相同级别的Website文件夹中。我知道我可以推送整个存储库,但宁愿只推送 网站文件夹,以便客户端没有其他文件和文件夹。
回购协议看起来像这样:
修改 客户端服务器没有直接连接到互联网,我对它们的访问是通过VPN,然后是RDP。目前要部署我需要对站点进行压缩的任何更改,将其放在共享的ftp服务器上,然后等待最多3天,以便将文件复制到服务器。已配置规则,因此我可以通过此连接使用Mercurial。
编辑2 我已经设法通过忘记网站文件夹及其所有内容从网站文件夹创建一个subrepo,提交更改然后放回文件,创建一个repo然后回显.hgsub文件。本地这对我有用,我可以从网站回购克隆而不获取任何其他文件夹。但是,即使我在repo服务器上重复这个过程,我还是无法使用这个版本的repo。当我尝试将托管版本克隆到我的本地工作副本时,我收到404错误,但我可以在托管服务器上克隆托管版本。
如果你想要实现我的目标,我会很感激一些分步说明(如果你喜欢的傻瓜指南);这是为了能够将仅网站文件夹推送到客户端服务器。回购的主副本在我们的repo服务器上,我有一个本地克隆,需要能够从我的副本中推出版本。
编辑3 事实证明,我在http://mercurial.aragost.com/kick-start/en/subrepositories/#converting-folder-into-a-subrepository中描述的将文件夹转换为子文件的问题是,在2.1.0之后的版本中,convert命令被破坏并且在2.3.1中仍然被破坏。在我想出来并回滚到TortoiseHg的那个版本后,我能够将文件夹转换为subrepo,在repo的根目录中我有.hgsub,其中说网站=网站。我能够在本地工作,承诺整个回购,subrepo,克隆完整的回购或subrepo(这是我想要的),然而我无法从我们的主回购获得这个服务器即可。
我将整个内容压缩并将其ftp到我们的远程主服务器服务器,然后进行设置以便我可以从中进行克隆。直接在服务器上运行正常(hg clone --verbose - C:\ Repositories \ EM。),但是当我尝试使用(hg clone --verbose - {{3)从服务器克隆到我的本地开发机器时它失败了“HTTP错误:404(未找到)”。
requesting all changes
adding changesets
adding manifests
adding file changes
added 628 changesets with 6002 changes to 4326 files
updating to branch default
resolving manifests
calling hook preupdate.eol: <function preupdate at 0x00000000035204A8>
getting .hgignore
getting .hgsub
getting .hgsubstate
HTTP Error: 404 (Not Found)
[command returned code 255 Fri Apr 20 10:51:23 2012]
我不知道问题是什么,文件在那里为什么404?
答案 0 :(得分:2)
在我看来,Mercurial不应该用于此目的。如果该网站是Web应用程序,则尤其如此,因为您不应该在Mercurial中拥有DLL。
您应该查看Visual Studio中内置的Web部署工具。查看this页面,看看它是否适合您的目的。
如果无法在目标服务器上安装所需的服务,则可以将其配置为使用FTP。
答案 1 :(得分:1)
答案 2 :(得分:0)
正如其他人指出的那样,你不能使用推送。只需从你的服务器到他们的'rsync'。您甚至可以在钩子中自动执行此操作,您可以将其推送到本地存储库并自动部署到其站点。类似的东西:
[hooks]
changegroup.deploy = $HG update ; rsync Website account@theirserver:/path/to/docroot
答案 3 :(得分:0)
我有一个有效的解决方案。我创建了一个批处理文件,用于创建传出仓库并启动内置服务器,以便我可以在客户端计算机上从中提取。首先,它清除前一个文件夹,然后从我的本地工作副本克隆(有一个参数来确定它应该从哪个标记克隆)。接下来,它会创建一个地图文件,并将网站文件夹转换为新的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等)构建传出网站的标记,并给它一分钟来创建我的网站文件夹,有历史记录,我可以用来拉出或推送。我不需要调用hg serve,因为我知道客户端服务器的名称,所以我可以通过创建别名远程存储库来推送变更集。但我包括了这一步,以便客户端机器可以拉动。我还没有完全探索这个选项,所以我不确定它是否有任何特别的优势。这只是我在项目上工作的情况很好,但如果任何其他开发人员需要处理这个问题,那么他们本地项目服务器的Uri显然会有所不同(http:// SIMON -PC:8000 /韩元不是每个人的情况),在这种情况下,推入客户端可能是最好的。
但是通过使用这种方法,我的本地工作回购不需要更改,因此我不会遇到任何与我们的中央仓库沟通的问题,即edit3中提到的404错误。我通过转换过程保留了回购的整个历史记录,因此下次我需要发送更改时,我不会从修订版1开始 - 换句话说,它不会破坏网站,尽管我是每次我保留历史记录并且只能拉/推网站目录时删除整个传出仓库(_ProjectName),因为它每次都是作为一个独立的&#39;而创建的。回购