试图理解一些东西。我在我的服务器上创建了 ad:\svn\repository。我提交了文件夹,但是当我回到 d:\svn\repository 时,我看不到它们。它们都在数据库中吗?我所有的存储库都会放在那个主文件夹中并 svn 跟踪它们吗?如果我有两个项目怎么办?
谢谢你。
Subversion 不会将逻辑文件夹存储在服务器上的相同结构中,它会跟踪“数据库”中增量文件中的所有内容。这个数据库是特定于 Subversion 的。提交到该存储库的所有内容都在该文件中。你不会在服务器上找到你的逻辑结构,它只是不能那样工作。
来自FSFS
2004 年年中,第二种类型的存储库存储系统应运而生:一种根本不使用数据库的存储系统。FSFS 存储库将修订树存储在单个文件中,因此可以在包含编号文件的单个子目录中找到存储库的所有修订。事务在单独的子目录中创建。完成后,将创建单个事务文件并将其移动到修订目录,从而保证提交是原子的。由于修订文件是永久不变的,因此存储库也可以在“热”时备份,就像 Berkeley DB 存储库一样。
修订文件格式表示修订的目录结构、文件内容以及与其他修订树中文件的差异。与 Berkeley DB 数据库不同,这种存储格式可跨不同操作系统移植,并且对 CPU 架构不敏感。因为没有使用日志或共享内存文件,所以可以通过网络文件系统安全地访问存储库并在只读环境中检查。缺少数据库开销也意味着整体存储库大小要小一些。
FSFS 也有不同的性能特点。当提交包含大量文件的目录时,FSFS 使用 O(N) 算法来追加条目,而 Berkeley DB 使用 O(N^2) 算法来重写整个目录。另一方面,FSFS 将文件的最新版本作为对早期版本的增量写入,这意味着检查最新的树比获取存储在 Berkeley DB HEAD 修订版中的全文要慢一些。FSFS 在完成提交时也有更长的延迟,这在极端情况下可能导致客户端在等待响应时超时。
然而,最重要的区别是 FSFS 在出现问题时无法“楔入”。如果使用 Berkeley DB 数据库的进程遇到权限问题或突然崩溃,则数据库将无法使用,直到管理员恢复它。如果使用 FSFS 存储库的进程发生相同的情况,则存储库根本不会受到影响。在最坏的情况下,会留下一些交易数据。