使用SVN 1.7的实时网站使用工作副本有什么不利之处吗?

时间:2012-01-09 11:05:10

标签: svn

我打算今天发布我们的实时网站,我已经读过最好的选择是使用svn export来避免使用.svn文件填充工作副本,但是这不再是SVN 1.7的问题了元数据存储在单个文件中。在我看来,使用工作副本比导出要好得多,因为更新实时站点就像运行'svn update'一样简单。有没有理由不签出工作副本并使用导出?

2 个答案:

答案 0 :(得分:2)

使用svn更新的问题是很容易更新您的实时网站。您可能会更新到无效或未经测试的版本。

我建议使用混合方法 - 在发布新版本之前,标记它,然后svn将实时网站切换到该标记。

显然,你仍然需要确保你没有提供root .svn目录。

答案 1 :(得分:1)

您所描述的情况是严重的安全威胁

您可能已经知道,Subversion使用.svn文件夹将其元文件直接存储在工作副本中。每个此类文件夹都有文件条目,其中所有目录的列表与相应的.svn文件夹具有相同的级别。在.svn文件夹中,您还可以找到有关存储库位置,文件大小,修改日期和用户登录的信息。如果您只是通过将工作副本签出到Web服务器上的htdocs目录来部署您的站点,那么使用URL site.com/.svn/entries您不仅会看到项目文件结构,还会看到作者列表,最新更改,链接到存储库等。

您还可以在每个text-base文件夹中找到.svn目录。它包含在版本控制下放置的所有文件的最新版本。 text-base目录中的文件具有.svn-base扩展名,它允许将其内容直接发送到浏览器输出,而无需在服务器端进行解释。即,它允许查看原始源代码

然而,这个问题有简单的解决方案。

<强>的Apache:

<Directory ~ ".*\.svn">
    Order allow,deny
    Deny from all
    Satisfy All
</Directory>

<强> Nginx的:

location ~ /.svn/ {
    deny all;
}

总而言之,这种方法的主要缺点是您应该了解威胁,不要忘记阻止从网络访问.svn目录的可能性。