2

我正在为我的大学开发一个存储库管理系统,该系统将提供一个 gui,用于修改 subversion 存储库中单个文件夹的权限,并使教授可以轻松地为学生和助教添加具有适当权限的目录。为了完成这项工作,我需要能够检索现有 svn 存储库的目录结构,并将其呈现在 Web 上。我看过几种方法,想知道是否有人有其他想法或建议。我看过的一些东西:

每小时运行一个脚本,在所有存储库上运行“svn ls -R --xml”并填充 mysql 数据库。

  • 之后快速页面加载
  • 不占用大量磁盘空间
  • 易于管理权限,即网站根本不需要直接接触svn

消极的:

  • 在我们的一些更复杂的存储库上真的很慢
  • 没有“实时”更新
  • 无论有没有变化都必须运行

在页面加载时,运行'svn ls -R --xml'并仅检索我需要呈现当前页面的目录正面:

  • 实时更新
  • 没有 cron 作业来占用服务器

消极的:

  • 网站慢得像糖蜜
  • 网络服务器使用更多资源

直接读取svn数据库正面:

  • 快速页面加载
  • 实时更新

消极的:

  • 难的?

我很好奇有哪些我没有看到或想到的替代方案,因为我觉得其中任何一个在某种程度上都会非常糟糕和不雅。如果可以避免的话,我也不想重新发明轮子。谢谢!

4

4 回答 4

1

如果您可以在 SVN 服务器上运行代码,请尝试

svnlook tree /path/to/repo

这非常快,因为它直接从磁盘读取存储库 :) 有关更多使用详情,请参阅文档

于 2012-11-18T20:57:25.327 回答
1

首先,这是为了什么?这是源代码吗?这是某种内容管理系统吗?这是用于存储和检索文档吗?你没说。你想用它做什么很大程度上取决于你需要什么类型的工具。

如果这只是为了在教授、学生、助教和部门之间共享资源,请查看 Dropbox。它简单有效。这让教授可以决定他们想与谁分享什么,而让你置身事外。

假设这是为了源代码控制,有几个 GUI 服务器管理系统一开始是免费的:

这意味着无需编写任何脚本,无需 MySql 表。它已经为你完成了。这总是最好的解决方案。

但是,如果这是为了源代码控制,我将建议您查看 Git 而不是 Subversion,因为这是像 Git 这样的分布式版本控制系统比像 Subversion 这样的集中式版本控制系统工作得更好的时代之一。

问题是访问之一。您有数十名教授、数百名学生和大量 TA 都想要访问。谁将为所有这些人设置帐户。每年有 1/4 的学生会离开,另外 1/4 会进来。当然,总是有学生来来去去。另外,会有团队。每个人都需要访问权限。这是您不希望的管理头痛。

Git 通过向下传播痛苦来提供帮助。在您的 Git 主存储库中,唯一有权访问(至少推送访问。拉取访问可能更广泛)的人将是教授。时期。不允许其他人向该存储库提交更改。您已经从向 500 多人授予许可到仅仅十几人。而且,这十几个通常会留下来,因此维护工作很少。

学生呢?这取决于教授。教授可以将他们的 Git 存储库提供给学生,学生可以将更改推送到教授的存储库。从那里,教授可以将这些更改推送给大师。

因此,首先,您必须准确地决定您想要什么,而不是在工具方面或您认为事情将如何运作,而是实际上您想要什么:

  • 是版本控制吗?
  • 是文档库吗?
  • 是维基吗?
  • 它是一个内容管理系统吗?
  • 它是在不同组之间共享重要文件的一种方式吗?

然后,一旦你有了它,就更容易选择工具了。如果您真的想要一个大学范围的版本控制系统,Git 可能更适合您的需求,因为您不想要集中访问控制,而是将责任向下分散。

于 2012-11-18T23:38:49.203 回答
0

我会参考数据库解决方案。存储库的问题是同时访问。使用存储更新存储库的数据库为您提供了一个可靠的信息来源来检索其布局。

我为实习做了大量的研究,使用数据库几乎总是你阅读 repo 的最快方式。

用伪代码来说:

  • 读取存储库
  • 加载站点
  • 打印布局
  • 执行任务——然后重复。

另一个需要考虑的选择是使用独立跟踪存储库布局的数据库。通过这种方式,您可以确保用户不会碰到彼此的更新,并且可以保护存储库数据库免受损坏。

于 2012-11-18T20:48:38.250 回答
0
  1. 您应该通过 file:// 使用直接存储库访问,这与慢速 HD 相当(如果您有快速 CPU 和 HD)
  2. 为您各自的脚本语言使用 svn 绑定,不要依赖xml 解析,因为它们要慢得多
  3. 不要读取整个树,而是维护导航层次结构并按需读取目录,通常如果您读取整个层次结构,您最终会在更深层次中获得数百/数千个目录,这通常对您的应用程序不感兴趣,所以您可以省略它们并按需显示(如果用户浏览得这么深)
  4. 如果您正在进行 svn 访问修改,请使用访问文件中的条目事先了解您的重要目录
于 2012-11-18T22:03:06.863 回答