1


0

私たちの組織では、次のような問題があります。 私たちは自分のWebツリーをリビジョン管理したいのですが、私たちの多くはそのツリーのファイルを変更(そしてチェックイン)できるようにしたいと思っています。 ツリーはかなり大きいので、これらすべてに対して1回のチェックアウトだけが必要です。 そのツリーの一部には、現在RCSを使用しています。これは、上記の動作を可能にしますが、もちろん他にもいくつかの欠点があります。

誰かがUNIXサーバー上でSubversionを使ってそのようなことを(おそらく何らかの回避策を伴って)行う方法を知っていますか?

10 Answer


2


開発者は自分のマシン上にいませんか? ツリーは非常に巨大なので、個々の開発者のワークステーションには適していないため、サーバー上の共有ネットワークドライブにチェックアウトする必要がありますか。 私はこの問題が問題をはっきりさせ、さらにその背後にある推論をするためにいくつかの数字が必要だと思います。


1


変更したいツリーの一部をチェックしないでください。 それは問題にならないはずです。 多分私はあなたが "シングルチェックアウト"によって何を意味するのかについて混乱しています。


1


一般的なSVN環境では、すべてのユーザーが自分の(完全または部分的な)ツリーのコピーを持っています。そこでは、同僚を邪魔したり壊したりすることなく、ツリーに対して実行したい変更を実行できます。 それから彼女は何をチェックインするかを決めます。 他のすべての人は、チェックアウトするのがベストだと思うときはいつでもチェックアウトできます。 そして、メイン(デプロイメント)ユーザーは、整合性をチェックするために定期的に(デイリービルド)チェックアウトします。

私はあなたの混乱はCVS / subversionと比較してRCSだと思います。RCSは編集中に他のすべてのファイルをブロックしますが、SVNは何もブロックしません(通常)。 ブロッキングは可能ですがめったに使用されません)。


1


@Lytha:RCSはロックベースであることを私は知っています、そして私たちのシナリオではそれについて問題はありません。 私はあなたがロックしてSVNを使うことができることも知っていますが、ユーザーごとのチェックアウトの問題は解決しません…​


1


ディスクドライブは安いです。 各開発者にツリーのコピーをチェックアウトさせます。 Subversionはロックの問題を解決するので、自分のコピーを持っている各ユーザーが他のユーザーによる変更を妨げることはありません。 各自が自分自身の開発版のソースツリーをチェックアウトして管理すれば、はるかに生産的になり、変更に対する説明責任が向上します。


1


おそらく他の記事から見たように、この問題に対する一般的な答えは「しないでください」です。一般的に言って、Subversionはリポジトリの一部または全部をローカルワークスペースに個別にチェックアウトするために使用されます。

あなたが絶対的に、積極的に、開発者ごとにリポジトリ全体の見方を持っている必要がありますが、開発者はほんの一部を変更しているだけなので、これはあなたにとっての潜在的な解決策です。 私が説明していることを容易にするためにいくつかのスクリプトを開発する必要があります(これは私が使用していたUNIX IDEに基づいています)。

あなたのコメントから、私は環境がUNIXかLinuxであるとも仮定しています - 私は以下がWindowsで可能であるとは思わない。

  1. ある場所でプロジェクト全体を読み取り専用としてチェックアウトします。 確認する すべての開発者が読み取りアクセス権を持っていること。

  2. ディレクトリをクロールするスクリプトを開発者が実行できるようにする _symbolic links_を使用して、その開発者のワークスペースの読み取り専用ディレクトリへの構造のミラーを作成する構造。

  3. 編集するツリーの一部をチェックアウトするとき、シンボリックリンクを削除します Subversionからそのパスをチェックアウトします(おそらく、これを処理するためにスクリプトで `svn`コマンドをラップする必要があります)

  4. 「svn commit」または別のスクリプトのいずれかで、おそらく ワークスペースディレクトリを削除して、シンボリックリンクを再確立します。

  5. `post-commit`フックを介して、読み取り専用コピーを更新します Subversionで、または「cron」などで定期的に。

シンボリックリンクは、開発者ごとにツリー全体のビューを提供し、開発者が積極的に編集しているツリーの部分だけの「ローカル」チェックアウトを可能にします。

迂回の理由は、Subversionが本当にこのように使われることを意図していなかったことです。 しかし、この方法は、いくらか苦痛を伴いながら、あなたが説明したことに対してはうまくいきます。


0


すべての開発者がアクセスできるWebツリーに1つの特別なアカウントを使用し、そのユーザーとしてWebツリーをチェックアウトすることをお勧めします。


0


@Jesper:はい、それは可能です。 すべてのメンバーのための追加アカウント、おそらく追加のsudoルールがあります。

@ジョン:基本的に私たち全員がツリーのいくつかの部分でいくつかのファイルを変更する必要があるということです。 だからこそ私たち全員がツリー全体を必要としていますが、それほど多くのチェックアウトをしたくはありません。


0


Subversionではツリーのどの部分でもチェックアウトでき、バージョン1.5ではhttp://subversion.tigris.org/svn_1.5_releasenotes.html#sparse-checkouts [sparse checkouts]もサポートしています。 これが意味することはあなたがあなたのチェックアウトを個々のディレクトリレベルに微調整することができるということです(しかしRCSが行くことができるように個々のファイルレベルまではそうではありません)。

たとえば、リポジトリが次のようになっているとします。

Repository Root
  tags
  branches
  trunk
    doc
    src
      module1
        resources
      module2
    images

これを使って `module1`ディレクトリの中のファイルだけをチェックアウトできます(そのサブディレクトリはチェックできません)。

svn checkout --depth=files svn://server/repository/trunk/src/module1

サブディレクトリの内容も必要な場合は、後でチェックアウトのサイズを調整できます。ドキュメントを参照してください。


0


作業コピーをチェックアウトする際の遅延や帯域幅が心配になる場合は、作業コピーは完全に自己完結型であることに注意してください。 つまり、巨大なリポジトリをチェックアウトしてから、その「作業コピー」を必要な人にコピーするだけです。

同じトリックはブランチにもうまく働きます - トランクの変更されていない最近の作業コピーを持っているなら、あなたはそれを単にコピーしてそれから新しいブランチにそれを 'svn switch’することができます。

  1. 巨大なリポジトリをbase_working_copyにチェックアウトします(一晩?)

  2. cp -a base_working_copy my_working_copy(およびそれを必要とする他の人は誰にでも)

  3. cp -a base_working_copy my_branch

  4. cd my_branch

  5. 自分のブランチを任意のブランチURLに切り替える

私は帯域幅の問題を抱えている人々に大きな作業コピーのCDをsnailmailするのにもこれをうまく使いました。

https://stackoverflow.com/questions/174806/using-subversion-with-a-really-really-big-site[本当に大きなサイトでのsubversionの使用]