我正在寻找以下情况的解决方案。
我们正在使用 Subversion,除了我们使用检查的开发环境之外,我们还有一个测试环境,它应该尽可能地类似于生产环境。
因此,我们现在对其进行设置,以便使用 SVN 导出更新环境。但是,由于我们只想要最新的修订版,我们不知道导出了哪个修订版。
是否有某种方法可以“标记”此导出,例如通过添加一些生成的文件来指示导出了哪个修订?(我们不想导出标签,因为我们将在一个发布周期内多次更新。)
您可以做的一件事是确保从已知修订版导出,并将该修订号写入导出中的文本文件。该svnversion
命令将告诉您工作目录的修订号。因此svn update
,获取最新版本,然后svn export
到您的部署位置,然后svnversion
将输出重定向到与导出相同位置的文本文件。修订版号将是更新时的修订版,即使从那时起有人提交了新代码。
您当然会希望在 shell 脚本或其他东西中自动执行上述过程。
您可以svn info /path/to/repository
在导出之前(或之后)进行,但您必须锁定以确保没有进行任何更改。
或者,使用您的评论中描述的技术并通过 shell 脚本进行管道传输,例如:
svn export /path/to/repository | grep ^Exported > revision.txt
或者
svn export /path/to/repository | tail -l > revision.txt
或者,您可以从该本地副本执行svn update
然后。svn export
这样做的好处是 Subversion 将使用“rsync”(或它使用的任何算法)来仅更新那些更改的文件。然后您只需从本地副本导出,节省带宽,并通过本地结帐保留所有存储库信息。
创建两个目录,一个用于结帐,一个用于导出,然后分两步进行部署:
svn update /path/to/repository checkout/project
svn export checkout/project export/project