Subversion在哪里实际存储其DataBase?

时间:2011-01-17 19:54:37

标签: svn tortoisesvn

在阅读了很多关于SVN的介绍,入门指南和文档之后,我仍然无法弄清楚我的版本控制数据存储在哪里。我的意思是身体。我已经检查了 EDIT [1/2 GB]的代码,并且repo只有几MB大。这对我来说仍然是Voodoo。而且,作为一名程序员,我真的不相信魔术。

编辑: 贡献者表示并非所有代码都存储在回购中,是真的吗?我的意思是,如果我删除我的本地工作副本,我仍然可以取回我的存储库的源代码... 如果是这样,我仍然无法理解如何在我的代码上发生这样的压缩......

编辑2: 当我将代码导入存储库时,我有“50MB上传”的消息,实际的回购要小得多。必须参与压缩算法。

顺便说一句,读一些答案,看看有多少人真的相信魔术,并且在没有真正使用SVN的情况下知道幕后发生了什么......这很有趣...

7 个答案:

答案 0 :(得分:7)

这取决于您对Subversion服务器的使用情况。我使用VisualSVN Server,它将存储库文件保存在c:\ Repositories。

答案 1 :(得分:6)

根据Mika的要求将此作为答案:

我很惊讶有多少人错误地回答了这个问题。 .svn文件夹不是服务器存储其文件的位置(因为它是机器的本地文件 - 没有其他人能够查看该信息),并且,虽然SVN只存储差异(假设FSFS),但它必须存储原件在某处。

当然,正如@ csharptest.net所说:“我的猜测,70%是perf数据,另外29.99%位于'obj'和'bin'目录中。让你留下10mb的实际代码。”所以你实际上并没有真正检查所有这些信息。其中大部分从未进入存储库。此外,SVN使用了大量压缩算法和各种技术,并不一定将数据字节存储在存储库中。这可能就是你看到尺寸差异的原因。

如果您有兴趣阅读有关SVN如何运作的更多信息,请在此Stackoverflow answer上阅读。

希望有所帮助!

答案 2 :(得分:3)

您的svn存储库存储在文件系统的文件夹中,它应包含子文件夹,如:conf, dav, db, hooks, locks。这些文件夹组成了存储库。

您可以使用svnadmin工具来管理存储库。

答案 3 :(得分:1)

它存储在文件系统中。究竟在哪里取决于系统的设置方式。此外,在创建新存储库时,它可以位于文件系统的任何位置。您的安装将具有默认位置,但是可以在任何地方创建新的仓库,您是否可能需要环顾四周才能找到实际路径。

这是在命令行版本中完成的,如下所示:

svnadmin create d:/path_to_repository 

在上面的示例中,存储库存储在“d:/ path_to_repository”

另外,在查看本地计算机中的代码块时,是否过滤掉了不会进入服务器的内容?您应该有一个全局忽略列表,以排除源控件中没有业务的项目。 (用户更改的内容,通常是已编译的项目等)您可能高估了存储库的实际大小。

答案 4 :(得分:1)

为什么不查看新的工作副本,在那里构建,并验证一切仍然有效?我们都可以在这里写下答案并猜测有多少%可能在哪里,但最后,您仍然应该检查需要添加到Subversion的所有内容。

答案 5 :(得分:0)

我意识到这是一个较老的线程,但在阅读之后,我以为我会投入我的$ .02。

工作副本中大型本地文件集的贡献因素是:

  • 如上所述,工作副本元/状态数据位于隐藏(默认情况下).svn目录中。虽然元数据非常小,但对于工作副本中的每个文件,都有一个工作副本基线。这只会使存储在存储库中的任何文件所占用的磁盘空间加倍。

  • 如果您的存储库包含任何复制的路径(在分支或标记的情况下通常是这样),您可能会使用多次物理空间。这是因为SVN存储库中用于“逻辑”副本的真实空间很小。它实际上只是指向源路径的特定修订版的指针。您可以使用复制操作复制整个存储库,从而导致新的存储库数据只有几百个字节(这也是为什么任何复制操作都需要相同的,短时间的原因)。但是,当您签出或更新工作副本时,它可能是您复制之前的两倍。这通常是为什么人们会使用switch操作将工作副本更改为逻辑复制路径的分支或标记,而不是从其根目录递归检出整个存储库。

我对SVN存储和传输其存储库数据的紧凑程度印象深刻。

答案 6 :(得分:-2)

每个版本化文件夹中的隐藏.svn文件夹。