2

まず、いくつかの動作パラメータ:

  • VisualStudio2005/2008を使用した.NET開発
  • TortoiseSVNクライアント

私は主にVisualSourceSafeとSourceGearVaultのソース管理システムのみを使用しました。それぞれで、リポジトリのルートをローカルの作業ディレクトリにマップします。例えば:

$/  -->  C:\source

ローカルディレクトリが存在する限り、「作業コピー」(svn)または「作業フォルダ」(VSS)を設定しました。

すでにソースコードリポジトリにある新しいプロジェクトで作業するには、そのプロジェクトのディレクトリの「最新」(VSS)バージョンを取得する必要があります。

リポジトリ内の子ディレクトリに移動して「GetLatest」(つまり、svn checkout)すると、クライアントは自動的に完全なディレクトリ階層を作成し、ローカルディスクの構造をミラーリングします。したがって、私が最新のものを入手したとき

$/foo/bar/project1

ドライブに作成されます

C:\source\foo\bar\project1

Subversionでは、ディレクトリをチェックアウトするときに、作業コピーディレクトリの場所を指定する必要があります。作業コピーディレクトリ構造をリポジトリと一致するように適切にミラーリングする場合は、パス内のすべての子ディレクトリを手動で作成するか、リポジトリルートから作業コピールートへのチェックアウトを実行して、リポジトリ内のすべてを取得する必要があります。

手動で介入することなく、一致するローカルの作業用コピーディレクトリ構造でリポジトリディレクトリが作成されるように、リポジトリディレクトリを階層の下位に配置する方法はありますか?

これは小さなリポジトリでは問題ありませんが、ほとんどの場合、ソースリポジトリの大部分は必要ありません。プロジェクトやリソースへのファイル参照が壊れないようにするには、物理​​的な構造を維持することが不可欠です。さらに、SVNのディスクコストは、ファイルのすべての作業ベースコピーを考慮すると、実際のソースサイズの2倍です。

現在、Tortoiseを使用しています。私が探していることを実行する他のSVNクライアントが存在する可能性はありますか?

4

9 に答える 9

3

Subversionの「チェックアウト」操作により、新しい作業コピーが作成されます。おそらくやりたいことは、プロジェクト全体をチェックアウトし(リポジトリにあるのと同じように適切なディレクトリ構造を自動的に作成します)、Subversionの「更新」操作を使用することです。更新により、指定したディレクトリとサブディレクトリ内のすべてが更新されます。

これはおそらく、VSSとSubversionの用語の違いによるものです。Subversion Bookは、特に基本的な使用法の章を読む価値があります。

更新:私はあなたの予想されるユースケースが何であるかを完全には理解していないと思います。必要になる可能性のある新しいSubversion1.5機能の1つは、スパースチェックアウトのようです。これにより、必ずしもすべてを取得することなく、リポジトリの一部を選択的にフェッチできます。それはあなたが得る必要がある量を管理するためにあなたに与えるオプションにおいて非常に柔軟です。

スパースチェックアウトは比較的新しいので、この機能に関する情報を含むようにSVNブックが更新されたとは思いません。更新されました。コメントを参照してください。

更新2:--depth = emptyオプションを指定してリポジトリのトップレベルをc:\ sourceにチェックアウトすることで、必要なものを構築できるようです。次に、必要なサブディレクトリごとに、そのサブディレクトリを必要に応じて--depth=emptyまたは--depth=infinityで更新します。

これはすべて、システム上に複数の独立したソースツリーを同時に持つことができるというSubversionの設計目標に根ざしていると思います。VSSでは、$ /は特定のディレクトリ(c:\ source)を参照するようにグローバルに構成されているため、チェックアウトは1回だけです(切り替えるたびにグローバル構成をいじくり回すことはありません)。

于 2008-10-30T03:02:01.533 に答える
2

太字の質問に簡単に答えるには:いいえ、プロジェクトの場所の上にすべてのフォルダーを作成する方法はありません

この理由は少し長くなります。

ローカル ディレクトリに固定パスを持つ 1 つの作業フォルダーがある VSS ワークフローを考えています。したがって、作業フォルダー内のローカル HD にディレクトリ構造全体を作成する別のプロジェクトをチェックアウトするだけです。

SVN にはフローティング作業コピーがあり、リポジトリ内の特定の場所を好きな場所にチェックアウトできます。作業コピーを別の場所に移動することもできます! 作業コピーは、HD 上の固定された場所にある必要はありません。

したがって、プロジェクトの上にフォルダー構造を再作成する必要はありません。あなたのプロジェクトでも、違いはありません。絶対パスが重要でないフローティング作業コピーの SVN ワークフローを使用することで、はるかに柔軟になります。

ただし、古い VSS ベースのワークフローをより快適に使用できる場合は、--sparse-checkoutパラメーターを使用してチェックアウトし、構造を手動で再作成するか、これを行う単純なバッチ ファイルを作成できます。SVN を使い続けて古いさびた VSS ワークフローを忘れた場合、これには利点が見当たりません。

于 2008-10-30T09:23:47.690 に答える
1
  1. まず、RepoBrowserを使用してSubversionリポジトリを参照します。
  2. 階層を下に移動して、目的のディレクトリに移動します。最終的にhttps:// subversion:8443 / svn / BranchMerge / Branches/TestWebのようなURLが表示されるはずです。
  3. 左側のナビゲーションペインでそのディレクトリを右クリックし、[チェックアウト...]を選択します。
  4. そのディレクトリパス「BranchMerge/Branches / TestWeb」をリポジトリテキストボックスのURLから(クリップボードに)コピーします。
  5. これを[チェックアウトディレクトリ]テキストボックスに貼り付けて、既存のパスと組み合わせて一致させ、ローカルドライブに必要な階層が表示されるようにします。"C:\ source \ BranchMerge / Branches / TestWeb"
  6. [OK]をクリックすると、不足しているディレクトリを自動作成するように求めるダイアログボックスが表示されます。
  7. もちろん、それに同意します。
于 2008-10-30T03:43:40.903 に答える
1

私の問題に対する適切な解決策を見つけたようです。

TortoiseSVN を使用すると、リポジトリ ブラウザ内の「アイテムをリビジョンに更新」アクションを使用して、任意のリポジトリ パスのリポジトリのフォルダ構造をローカルで再構築できます。

詳細な手順は次のとおりです。

  1. 物理フォルダー構造を維持する必要がある最上位のリポジトリ フォルダーの作業コピー ルートとなるローカル フォルダーを作成します。
  2. リポジトリ ルートの浅いチェックアウトを実行します (チェックアウト、「完全再帰」以外の「チェックアウトの深さ」を選択します)。
  3. 作業コピー フォルダーからリポジトリ ブラウザーを起動します。
  4. 取得したいレポパスを見つける
  5. 目的のフォルダーを右クリックし、[アイテムをリビジョンに更新] を選択します。
  6. HEAD リビジョンと「作業コピー」の更新深度をデフォルトのままにして、[OK] をクリックします。

これにより、チェックアウト作業コピーの先頭までのすべての親ディレクトリを含む、選択したリポジトリ パスの内容で作業コピーが更新され、作業コピー内のリポジトリのフォルダ階層がミラーリングされます。

[アイテムをリビジョンに更新] コンテキスト メニュー オプションに関する注意事項:

  • このオプションは、ローカルの作業コピーにまだ存在しないリポジトリ パスにのみ表示されます
  • 選択したパスのすべてのコンテンツを取得するには、「Update Depth」をデフォルトの「Working Copy」のままにしても問題ないようです。(「完全再帰」を明示的に選択する必要はありません。)
于 2009-07-08T14:05:44.247 に答える
0

ankhsvn(オープンソース)およびVisualSVN(商用)は、Visual Studioと統合された製品であり、開発モデルにより適している場合があります。

于 2008-10-30T03:21:24.003 に答える
0

しかし、問題の要点は、最初のチェックアウトでディレクトリ構造を作成するためだけにリポジトリ全体を取得したくないということです。

クリーンで空の作業コピーの場所から開始していることが明確でなかったら申し訳ありません。

そして、私は SVN 本のかなりの部分を読みました。ただし、この種の質問には対応していません。

于 2008-10-30T03:05:42.990 に答える
0

わかりました、何よりもまず、あなたの働き方は最終的に問題を引き起こすようなものです.

あなたが探している原則は、各プロジェクトが他のプロジェクトから独立したトランク/ブランチ/タグ構造を持つ必要があるということです。そして、トランクをチェックアウトすると、依存関係を含むすべてのコードが自動的に取得され、プロジェクトをビルドするのに十分です。

あなたがそのような立場にないことは明らかで、そこに移行するには多少の努力が必要です。ただし、externals を使用して、思い通りに進めるための回避策があります。

  1. Repo-browser で、ルート (おそらく "Projects") に新しいツリー フォルダーを作成します。
  2. この Projects フォルダーに、プロジェクト "MyProject" 用のフォルダーを作成します。
  3. このフォルダを右クリックしてプロパティを編集し、「svn:externals」という新しいプロパティを追加します - リストに表示されます。
  4. このプロパティを使用して、プロジェクトに必要なツリーを定義します。
  5. http://svnserver/svn/Projects/MyProjectをチェックアウトすると、ツリー全体が取得されます。
  6. 通常どおり動作します。

svn:externals プロパティの例は次のようになります:

http://mysvn/svn/foo/bar/project1 foo/bar/project1
http://mysvn/svn/bar/foo/project2 bar/foo/project2

レッドブックに詳述されているように、相対参照を使用する方が良いでしょう。

于 2008-12-04T16:03:06.520 に答える
0

「SVNの仕組み」について皆さんが言っていることは大体理解できます。おそらく問題は、私がそれについて不明確であるということではありませんが、より高度なコードの組織の問題の犠牲になっていることです。

問題の根本は、プロジェクトの依存関係にあります。多くの依存関係を持つ多くのアプリケーションがあります。.NET プロジェクトの階層構造のため、依存関係は特定の物理的な場所にあると予想されます。したがって、このプロジェクトの作業を開始する場合:

http://mysvn/svn/foo/bar/project1

そのプロジェクトは

C:\source\foo\bar\project1

現在、そのプロジェクトは別のプロジェクトに依存しています。.NET プロジェクト ファイルでは、プロジェクト参照は相対的に「後方参照」されています。

..\..\..\bar\foo\project2

したがって、依存関係はローカルの作業コピーにあると予想されます

C:\source\bar\foo\project2

したがって、親ディレクトリ構造は重要です。

依存プロジェクトは、多くのプロジェクト間で共有されているため、特定のアプリケーション/プロジェクトの子として保存できません。したがって、彼らは 1 つの特定のプロジェクト ツリーの外にあるそれぞれの場所に住んでいます。したがって、プロジェクトへの参照が壊れたり壊れたりしないようにするために、特定のプロジェクト (およびその依存関係) がソース ツリーのルートに相対的な特定のツリーの場所にチェックアウトされていることを確認する必要があります。開発者の間で違いはありません。そうしないと、私たち一人一人が継続的に参照を更新して、それらが機能するようにし、ソース履歴に多くのノイズを作成し、開発者の間で絶え間ない中断を引き起こします。また、ビルドサーバーもそれらを適切な場所に配置しません。

SVN を使用した .NET 開発の実行に関する適切な情報をまだ見つけていません。.NET には、SVN または CVS を使用するオープン ソース プロジェクトが多数あります。しかし、私が見たものは常に、すべての異なるプロジェクトが 1 つのソース ツリーの場所に分類されるように、かなり分離された構造になっているようです。これにより、1 つのパスを再帰的にチェックアウトするだけで必要なものをすべて取得できるため、必要なものをすべて取得することが簡単になります。

プロジェクト ストレージの場所の境界をまたがる多くの共有プロジェクトで SVN を使用して .NET でエンタープライズ開発を行っている方からのご意見をお待ちしております。

チームで機能する唯一の解決策は、リポジトリ全体をチェックアウトして、構造が正しく一貫していることを確認することだけだと感じ始めています。これは、ソースのギグが多いリポジトリにとっては残念なことです。

于 2008-10-30T15:43:07.253 に答える
-1

なぜあなたが求めていることをやりたいのかわからない。ほとんどの人は、作業用のローカルコピーを作成し、必要なディレクトリで作業します。これは、Subversionの動作方法によるものです。ソースコードはロックされません。私はSourceSafeを使用してソース管理を開始したので、あなたが何を経験しているのかについて少し理解しています。

おそらく必要なのは、svn:externalsプロパティを使用することです。これについて話しているいくつかの投稿がここにあります。そのうちの1つは次のとおりです。

SVNにファイルを更新するだけで、新しいファイルを追加しないようにする方法

于 2008-10-30T03:19:05.757 に答える