2

I am working on a repository management system for my university that will provide a gui for modifying permissions to individual folders in a subversion repository, and make it easy for professors to add directories for students and TA's, with the appropriate permissions. In order to make this work, I need to be able to retrieve the directory structure of an existing svn repository, and present it on the web. I have looked at several methods, and was wondering if anyone had other ideas, or suggestions. Some things I have looked at:

Every hour, run a script that runs 'svn ls -R --xml' on all of the repositories and populates a mysql database Positive:

  • Fast page loads afterwards
  • Doesn't take a lot of disk space
  • Easy to manage permission, i.e. the website doesn't need to touch svn directly at all

Negative:

  • Really slow on some of our more complicated repositories
  • No 'live' updates
  • Has to run whether there are changes or not

On page load, run 'svn ls -R --xml' and retrieve only the directory I need to render the current page Positive:

  • updates live
  • no cron job to tie up the server

Negative:

  • website is slow as molasses
  • webserver uses a lot more resources

Directly read svn database Positive:

  • Fast page loads
  • live updates

Negative:

  • Difficult?

I am very curious what alternatives there are that I have not seen or thought of, because I feel like any of these would be quite awful and inelegant in one way or another. Also I don't want to reinvent the wheel if it can be avoided. Thanks!

4

4 に答える 4

1

まず、これは何のため?これはソースコード用ですか?これはある種のコンテンツ管理システムですか? これはドキュメントの保存と検索用ですか? あなたは言いませんでした。何に使用するかは、必要なツールの種類によって大きく異なります。

これが単に教授、学生、TA、および部門間でリソースを共有するためのものである場合は、Dropbox をご覧ください。シンプルで効果的です。これにより、教授は誰と何を共有したいかを決定し、あなたを除外することができます。

これがソース管理用であると仮定すると、最初は無料の GUI サーバー管理システムがいくつかあります。

これは、何も書く必要がなく、スクリプトもMySqlテーブルもないことを意味します。それはすでにあなたのために行われています。それは常に最も良い解決策です。

ただし、これがソース管理の場合は、Subversion ではなく Git を検討することをお勧めします。これは、Git のような分散型バージョン管理システムが Subversion のような集中型バージョン管理システムよりもうまく機能する場合の 1 つだからです。

問題はアクセスの 1 つです。何十人もの教授、何百人もの学生、そして一握りの TA がすべてアクセスを求めています。それらすべての人々のアカウントを設定するのは誰ですか。毎年、学生人口の 1/4 が去り、さらに 1/4 が入ってきます。もちろん、常に出入りする学生がいます。さらに、チームがあります。それぞれにアクセスが必要です。これは、望ましくない管理上の頭痛の種です。

Git は、痛みを下方に広げることで役立ちます。Git マスター リポジトリでは、アクセスできるのは教授だけです (少なくともプッシュ アクセス。プル アクセスはさらに広がる可能性があります)。限目。他の誰もそのリポジトリに変更を送信することはできません。500 人以上に許可を与えていたのが、わずか 10 人になりました。そして、これらの 10 ダースは通常、残り続けるため、メンテナンスは最小限に抑えられます。

学生はどうですか?それは教授次第です。教授は自分の Git リポジトリを学生が利用できるようにすることができ、学生は教授のリポジトリに変更をプッシュできます。そこから、教授はそれらの変更をマスターにプッシュできます。

したがって、最初に、ツールの観点からではなく、物事がどのように機能すると考えるかではなく、実際に何が必要かを正確に決定する必要があります。

  • バージョン管理ですか?
  • ドキュメントリポジトリですか?
  • ウィキですか?
  • コンテンツ管理システムですか?
  • さまざまなグループ間で重要なドキュメントを共有する方法ですか?

そうすれば、ツールを選ぶのが簡単になります。大学全体のバージョン管理システムが本当に必要な場合は、一元化されたアクセス制御ではなく、その責任を下方に分散する必要があるため、Git の方がニーズに適している可能性があります。

于 2012-11-18T23:38:49.203 に答える
1

SVNサーバーでコードを実行できる場合は、試してください

svnlook tree /path/to/repo

ディスクからリポジトリを直接読み取るため、これは非常に高速です:)使用方法の詳細については、ドキュメントを参照してください。

于 2012-11-18T20:57:25.327 に答える
0

データベースソリューションについて言及します。リポジトリの問題は同時アクセスです。リポジトリの更新を保存するデータベースを使用すると、レイアウトを取得するための信頼できる情報源が得られます。

私はインターンシップのためにかなりの量の調査を行いましたが、ほとんどの場合、データベースを使用することがレポを読むための最速の方法です。

疑似コードの観点から言えば:

  • リポジトリを読む
  • ロードサイト
  • 印刷レイアウト
  • タスクを実行し、繰り返します。

考慮すべきもう 1 つのオプションは、リポジトリのレイアウトを個別に追跡するデータベースを使用することです。このようにして、ユーザーがお互いの更新にぶつかることがなく、リポジトリ データベースが破損しないように安全に保つことができます。

于 2012-11-18T20:48:38.250 に答える
0
  1. file:// 経由で直接リポジトリにアクセスする必要があります。これは低速の hd に匹敵します (高速な CPU と HD を使用している場合)。
  2. それぞれのスクリプト言語の svn バインディングを使用してください。xml 解析は非常に遅いため、依存しないでください。
  3. ツリー全体を読み取るのではなく、ナビゲーション階層を維持し、必要に応じてディレクトリを読み取ります。通常、階層全体を読み取ると、より深いレベルに数百/数千のディレクトリがあり、通常はアプリケーションにとって興味深いものではないため、それらを省略してオンデマンドで表示できます(ユーザーがこれを深く閲覧した場合)
  4. svn アクセスの変更を行っている場合は、アクセス ファイルのエントリを使用して、重要なディレクトリを事前に把握します。
于 2012-11-18T22:03:06.863 に答える