0

シナリオ:

svn:externalsを使用して、CodePlexからMicrosoft.Practices.ServiceLocationを取得しています。ただし、自分のプロジェクトでcsproj-fileを参照すると、2005年から2008年にアップグレードされます。これにより、プロジェクトファイルのコピーがベースコピーと異なり、Subversionからプロジェクトを更新できなくなります。

... \ deps \ Microsoft.Practices.ServiceLocationを更新すると、次のようになります。

Command          Update
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\ServiceLocatorProvider.cs
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\ServiceLocator.cs
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\Readme.txt
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\Properties
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\Microsoft.Practices.ServiceLocation.csproj
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\IServiceLocator.cs
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\ActivationException.Desktop.cs
Tree conflict    ...\deps\Microsoft.Practices.ServiceLocation\ActivationException.cs
Completed        At revision: 43682
warning!         One or more files are in a conflicted state.

... \ depsを更新すると、次のようになります。

Command          Update
Completed        At revision: 0

ルートを更新すると、次のようになります。

Command           Update
External          ...\deps\Microsoft.Practices.ServiceLocation
External failed   ...\deps\Microsoft.Practices.ServiceLocation
Error             Working copy '...\deps\Microsoft.Practices.ServiceLocation' locked
Error             Please execute the 'Cleanup' command.
Completed         ...\deps\Microsoft.Practices.ServiceLocation - at revision: 0

作業コピーがロックされているという混乱は間違っているようです。Microsoft.Practices.ServiceLocationフォルダでリリースロックを実行すると、「ロックを解除するものはありません。この作業コピーにロックされているファイルはありません」というメッセージが表示されます。ルートでコマンドを実行しても同じ結果になります。

クリーンアップを実行しても何も変わりませんでした。

TortoiseSVNを使用しています。

  1. アップグレードを回避するために、プロジェクト/ディレクトリを読み取り専用として扱うようにVisual Studio 2008に指示できますか?
  2. これを機能させるために実行できる秘密のSubversionコマンドはありますか?
  3. 変更されたファイルを更新するとツリーの競合が発生するのはなぜですか?

編集:私はいくつかグーグルで検索し、http: //svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.htmlでツリーの競合を説明するSubversionのドキュメントを見つけました。変更されたファイルを更新するときにツリーの競合が発生する理由がわからないため、3番目の質問を変更しました。

4

2 に答える 2

2

プロジェクトにどの程度関与しているか、およびプロジェクトを変更するかどうかに応じて、いくつかのオプションがあります。

私が主にライブラリに使用しているプロジェクトの場合、オープンソースプロジェクトをソリューションに入れません。ライブラリフォルダーのソース管理リポジトリに保持しているdllだけです。

デバッグ中は、2005プロジェクトファイルを実際に開かなくても、VS2008のライブラリのコードにステップインできます。したがって、更新は必要ありません。

オープンソースライブラリのコードで作業する必要がある場合は、独自のソリューションで開きます。vs2008に更新する必要がある場合は、ソースコードではなく、プロジェクトファイルのみが変更されるため、大したことではありません。ソース管理下にあるため、いつでもプロジェクトファイルを元のファイルに戻すか、新しいコピーの名前を変更して、2つのcsprojファイルを並べて保持できます。

オープンソースプロジェクトでtortoiseを使用してsvn-updateを実行するだけで、競合は発生しません。Svnは変更を私のコピーにマージします。オープンソースプロジェクトに必要な変更がある場合は、パッチを送信し、コピーからコミットしません。

これがアクティブな開発者であり、他のチームメンバーがVS2005にとどまる必要があるプロジェクトである場合は、問題なくVS2005を並べてロードできます。同じマシンにVSのコピーを4〜5個インストールしましたが、唯一の欠点はディスク容量です。

競合が多すぎる場合は、プロジェクトを新しいフォルダに新たにチェックアウトする必要があるようです。次に、優れた差分ツールを使用して競合を手動で解決できます。私はWinMergeを使用しています。

于 2009-10-03T00:06:44.773 に答える
1

Visual Studio 2008は、読み取り専用ソリューションを非常に喜んで開きます(これは、通常の、チェックアウトされていない使用法です)。

ただし、VS2008はVS 2005ソリューションファイルを開くことができないため、常にアップグレードを試みます。あなたはアップグレードなしで2008年に2005年のソリューションを開く方法を探しているようですが、これは不可能だと思います。

VS 2005のコピー(これはExpressエディションの場合もあります)を入手するか、Codeplexプロジェクト全体をアップグレードして入手します(VS2008は.NET2.0を対象とすることを忘れないでください)。

于 2009-09-20T10:12:29.830 に答える