对从 SVN 进行部署的任何建议,并自动将版本号写入我的代码中?
Posted
技术标签:
【中文标题】对从 SVN 进行部署的任何建议,并自动将版本号写入我的代码中?【英文标题】:Any recommendations for deployment from SVN, with version numbers written into my code automagically? 【发布时间】:2010-09-09 03:53:50 【问题描述】:我已经习惯了 SVN,现在我需要一种方法来更轻松地将我的代码部署到登台或实时服务器。我还想要一些将构建信息放在该站点的页脚中以帮助测试的方法。网站是 php/mysql。
【问题讨论】:
【参考方案1】:首先为您希望获得修订信息的文件启用关键字替换:
svn propset svn:keywords "Rev" file.txt
添加到要存储修订信息的文件中:
$Rev$
进一步阅读:http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
【讨论】:
请注意,此方法仅将 file.txt 的修订版放入其中,而不是全局修订版。有关详细信息,请参阅提供的 SVN 书籍链接 Staale。【参考方案2】:properties 方法只会为您提供您拥有该属性的文件的最新修订号,而不是整个存储库的头修订号(例如 Stack Overflow 页脚)。如果您需要,则需要使用svnversion。
我最近开始在一个项目中使用 Capistrano,它非常棒,非常灵活和强大。我最终偏离了它的正常用法,但它使一次“点击”部署变得更加容易。
【讨论】:
【参考方案3】:如果您想更新项目 AssemblyInfo.cs 中的版本号,您可能会对这篇文章感兴趣:
CodeProject: Use Subversion Revision numbers in your Visual Studio Projects
如果您启用 SVN 关键字,那么每次您签入项目时,Subversion 都会扫描您的文件以查找某些“关键字”并用一些信息替换这些关键字。
例如,在我的源文件顶部,我会创建一个包含以下关键字的标题:
'$作者:$ '$Id:$ '$修订:$
当我将此文件签入 Subversion 时,这些关键字将替换为以下内容:
'$作者:paulbetteridge $ '$Id: myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $ '$ Rev: 145 $
【讨论】:
【参考方案4】:根据需要进行 svn 更新的脚本。
SVN 支持关键字。您可以将要扩展的关键字添加到关键字属性中,然后SVN将扩展。请参阅 $Id$ 或 $Rev$,或 SVN 书中描述的关键字。
【讨论】:
【参考方案5】:我喜欢使用 capistrano 进行推送。请参阅here。
您可以使用SVN $Rev$ property 将修订号添加到您的页脚中。
【讨论】:
【参考方案6】:管理此问题的一个非常简单的方法是按以下方式设置您的应用:
只需使您的部署应用程序成为您的主干的工作副本(svn co
项目到您的 /www 根目录),并在需要更新时通过 ssh 控制台 (ssh user@host.com svn up /path/to/project
) 运行svn up
。您还可以使用适当的结帐机制进行回滚。这很重要:如果您这样做,请将 RewriteRules(或等效项)添加到您的 .htaccess(或等效项)以禁止访问 .svn 目录。如果您不能执行上述操作,请改为通过 ssh 运行 svn export
(因此它不会是“工作副本”),但这自然会比运行 up
慢。
此外,您还可以查看 Ruby on Rails 对 Capistrano 的作用。这是相同的基本概念,但支持事务备份,如果更新在中间出错,则通过将每个结帐存储在单独的文件夹中并将“最新”符号链接到你的 /www 目录。
【讨论】:
【参考方案7】:关键字 stuff 在很多情况下都会失败——比如如果您在部署之前修改了源代码,或者如果您从项目中的一个目录签入,那么同一项目中的不同目录将具有不同的修订号。仔细检查文档,确保关键字符合您的预期。
更好的方法是使用svnversion 程序在编译或部署时生成有关已检出目录的信息。 Svnversion 将显示所有目录的版本信息,并标记源是否在本地修改。
【讨论】:
【参考方案8】:我为我的 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 \;
【讨论】:
以上是关于对从 SVN 进行部署的任何建议,并自动将版本号写入我的代码中?的主要内容,如果未能解决你的问题,请参考以下文章
CentOS 7 环境下部署 SVN 并实现自动更新(版本库放在Tomcat下)