【发布时间】:2012-01-10 07:05:55
【问题描述】:
我有以下问题。我需要组织自动上传以从 svn 存储库部署服务器,但有一些功能。 这是我写的:
# $1 - project; $2 - version (optional)
# rm -rf $projectDir
if [ "$2" == '' ]; then
svn export $trunk $projectDir --force >> $log
version=`svn info $trunk | grep Revision | awk '{print$2}'`
svn copy $trunk $tags/$version -m "created while uploading last version of $1"
echo "New stable version #$version of $1 is created
Uploading to last version is completed successfully"
else
version=$2
svn export $tags/$version/ $projectDir --force >> $log
echo "Revert to version #$version is completed successfully"
fi
echo $version > $projectDir/version
chown -R $1:$1 $projectDir
但是 svn export 不会删除通过 svn 删除的文件,所以每次导出前我都需要清理目录。这样不好。 在此之前,我使用结帐进行部署,如下所示:
svn co $trunk >> $log
cp -ruf trunk/* $projectDir
svn info $trunk | grep Revision > $projectDir/version
chown -R $project:$project $projectDir
echo "uploading finished"
与导出相比,这工作得非常好并且非常快(它只更改已更改的文件),但是:
- 不自动创建标签;
- 没有很好的还原机会。
在我的上一个脚本中 co 不起作用,因为它试图从不同的存储库目录(主干/某些标签)中检出一个目录,这不是真实的。
所以,问题:
- 我可以在结帐前搬迁项目吗?
- 我可以在导出前找到 co 版本和现有版本的差异吗?
- 我可以用差异结果做什么? (导出后删除不需要的文件?)
提前致谢。
【问题讨论】:
-
Shell位于项目服务器中,而svn服务器是外部的。
标签: shell svn deployment export svn-checkout