对于从SVN进行部署的任何建议(将版本号自动写入我的代码中)?
我已经对SVN感到满意,现在我需要一种更轻松地将代码部署到登台服务器或者实时服务器的方法。我还希望有一些方法可以将构建信息放到该站点的页脚中,以帮助进行测试。网站是PHP / MySQL。
解决方案
回答
用于根据需要svn更新的脚本。
SVN支持关键字。我们可以将要扩展的关键字添加到keyword属性,然后SVN将会扩展。请参阅$ Id $或者$ Rev $,或者SVN书中描述的关键字。
回答
首先为我们希望拥有修订信息的文件启用关键字替换:
svn propset svn:keywords "Rev" file.txt
添加到我们要存储修订信息的文件中:
$Rev$
进一步的阅读:http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
回答
如果要更新项目AssemblyInfo.cs中的版本号,则可能对本文感兴趣:
CodeProject:在Visual Studio项目中使用Subversion修订版号
If you enable SVN Keywords then every time you check in the project Subversion scans your files for certain "keywords" and replaces the keywords with some information. For example, At the top of my source files I would create a header contain the following keywords: '$Author:$ '$Id:$ '$Rev:$ When I check this file into Subversion these keywords are replaced with the following: '$Author: paulbetteridge $ '$Id: myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $ '$Rev: 145 $
回答
我喜欢使用capistrano进行推送。请参考这里。
我们可以使用SVN $ Rev $属性将修订号添加到页脚中。
回答
管理此问题的一种非常简单的方法是通过以下方式设置应用程序:
只需使部署应用程序成为主干的工作副本(将项目" svn co"复制到/ www根目录),然后通过ssh控制台运行" svn up"(ssh [email protected] svn up / path / to / project
),当我们需要更新时。我们还可以使用适当的签出机制进行回滚。这很重要:如果这样做,则将RewriteRules(或者等效项)添加到.htaccess(或者等效项)中,以禁止访问.svn目录。如果我们不能执行上述操作,请改为通过ssh运行" svn export"(这样就不会成为"工作副本"),但这自然比执行" up"要慢。
另外,我们可以查看Ruby on Rails对Capistrano的作用。.它是相同的基本概念,但是如果更新在中间出错,则可以通过将每个结帐存储在单独的文件夹中并将"最新"链接到/ www来支持事务备份。目录。
回答
属性方法只会为我们提供该属性所在文件的最新修订版本号,而不会提供整个存储库的主修订版(即堆栈溢出页脚)。如果需要,则需要使用svnversion。
我最近开始在一个项目上使用Capistrano,它精湛,非常灵活且功能强大。我最终偏离了它的正常用法,但是这使一次"单击"部署变得更加容易。
回答
关键字的东西在很多情况下都会失败-例如,如果我们在部署之前修改了源代码,或者如果我们从项目中的一个目录检入,则同一项目中的另一个目录将具有不同的修订号。请仔细检查文档,以确保关键字按照我们认为的方式工作。
更好的方法是使用svnversion程序在编译或者部署时生成有关已检出目录的信息。 Svnversion将显示有关所有目录版本的信息,并标记源是否已在本地修改。
回答
我为我的php项目提出的方法,可能不是最好的方法,但是经过一段时间的搜索之后,看来确实是这样,该方法是进行签出,运行版本检查,清除.svn文件夹并继续。这是我编写的Shell脚本的一部分:
(首先,我们需要脚本来检查仓库)
# get the svn revision number and create a RELEASE file svnvers=`svnversion .` echo "version: $svnvers" echo "<release><development>0</development><revision>$svnvers</revision></release>" > RELEASE # remove all .svn directories find . -name .svn -exec rm -rf {} \;