我已经习惯了 SVN,现在我需要一种更轻松地将我的代码部署到登台或实时服务器的方法。我还想要一些将构建信息放在该站点的页脚中以帮助测试的方法。网站是 PHP/MySQL。
8 回答
首先为您希望拥有修订信息的文件启用关键字替换:
svn propset svn:keywords "Rev" file.txt
添加到要存储修订信息的文件中:
$Rev$
进一步阅读:http ://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
属性方法只会为您提供您拥有该属性的文件的最后修订号,而不是整个存储库的头修订号(例如 Stack Overflow 页脚)。如果你想要那个,你需要使用svnversion。
我最近开始在一个项目中使用 Capistrano,它非常棒,非常灵活和强大。我最终偏离了它的正常用法,但它使一次“点击”部署变得更加容易。
根据需要进行 svn 更新的脚本。
SVN 支持关键字。您可以将要扩展的关键字添加到关键字属性中,然后SVN将扩展。请参阅 $Id$ 或 $Rev$,或 SVN 书中描述的关键字。
如果您想更新项目 AssemblyInfo.cs 中的版本号,您可能会对本文感兴趣:
CodeProject:在 Visual Studio 项目中使用 Subversion 修订号
如果您启用 SVN 关键字,那么每次您签入项目时,Subversion 都会扫描您的文件中的某些“关键字”,并用一些信息替换关键字。
例如,在我的源文件的顶部,我将创建一个包含以下关键字的标题:
'$作者:$
'$Id:$
'$Rev:$当我将此文件签入 Subversion 时,这些关键字将替换为以下内容:
'$Author: paulbetteridge $
'$Id: myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$Rev: 145 $
我喜欢使用 capistrano 进行推送。参考这里。
您可以使用SVN $Rev$ 属性将修订号放入您的页脚。
在很多情况下,关键字 stuff 会失败——例如,如果您在部署之前修改了源代码,或者如果您从项目中的一个目录签入,那么同一项目中的不同目录将具有不同的修订号。仔细检查文档以确保关键字符合您的想法。
更好的方法是使用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 {} \;
一种非常简单的管理方法是通过以下方式设置您的应用程序:
只需使您的部署应用程序成为您的主干的工作副本(svn co
该项目到您的 /www 根目录),并在需要更新时svn up
通过 ssh 控制台 ( ) 运行。ssh user@host.com svn up /path/to/project
您还可以使用适当的结帐机制进行回滚。这很重要:如果您这样做,请将 RewriteRules(或等效项)添加到您的 .htaccess(或等效项)以禁止访问 .svn 目录。如果您不能执行上述操作,请svn export
改为通过 ssh 运行(因此它不会是“工作副本”),但这自然会比执行up
.
此外,您可以查看 Ruby on Rails 对 Capistrano 的作用。这是相同的基本概念,但如果更新在中间出错,则支持事务备份,方法是将每个结帐存储在单独的文件夹中,并将“最新”符号链接到您的 /www目录。