5

私は他の数人の開発者と一緒に取り組んでいるプロジェクトに svn を使用しています。Svn はソース管理には問題なく機能しますが、dll をコミットするときに常に競合が発生します。

競合を解決すると (差分プログラムがバイナリ ファイルを処理できないため、dll が削除されます)、再構築してコミットする必要があります。このような紛争をどのように解決するつもりですか?

編集:

プロジェクトはゲーム mod であり、プログラマー以外は最新のビルドにアクセスする必要があるため、dll は別の svn フォルダーにあります。

4

7 に答える 7

8

(ソースのない外部の DLL ではなく) ビルドしている DLL の場合、ソースはバイナリではなくソース管理にある必要があります。

その特定のリポジトリに含めたくない場合は、svn:external として含めることができます。

于 2009-01-04T09:45:37.653 に答える
7

ここの他の回答で述べたように、最初に生成されたdllをバージョン管理しないでください。ただし、本当にバージョン管理する必要ある場合は、dll ファイルを削除する diff ツールを使用せずに競合を解決できます。

競合するファイルごとに、Subversion は 3 つの追加のバージョン管理されていないファイルを作業コピーに配置します。

ファイル名.mine

これは、作業コピーを更新する前に作業コピーに存在していたファイルです。つまり、競合マーカーはありません。このファイルには、最新の変更のみが含まれています。(Subversion がファイルをマージ不可能と見なした場合、.mine ファイルは作業ファイルと同一であるため、作成されません。)

ファイル名.rOLDREV

これは、作業コピーを更新する前の BASE リビジョンであったファイルです。つまり、最新の編集を行う前にチェックアウトしたファイルです。

ファイル名.rNEWREV

これは、作業コピーを更新したときに Subversion クライアントがサーバーから受信したばかりのファイルです。このファイルは、リポジトリの HEAD リビジョンに対応します。

ここで、OLDREV は .svn ディレクトリ内のファイルのリビジョン番号であり、NEWREV はリポジトリ HEAD のリビジョン番号です。

このような競合を解決するには、不要な追加ファイルを削除します。

  • 独自の dll を保持する場合は、ファイル filename.rOLDREV、filename.rNEWREV を削除します。
  • リポジトリから dll を保持したい場合は、ファイル filename.rOLDREV と filename.mine を削除してから、filename.rNEWREV を filename にコピーします。

その後、実行

svn resolved filename

自分で競合を解決したことを Subversion に伝えます。

于 2009-01-04T09:50:45.803 に答える
3

一般に、独自にコンパイルした DLL をソース管理に保存することはまったくありません。これを行う必要がある特定の理由はありますか?

私は自分の開発環境をセットアップして、誰でも自分のプロジェクト コンポーネントを誰からも独立して構築できるようにしました。このように、ソース管理システムにあるのはソースコードだけです。これには多くの利点があります。

  • DLL または EXE をチェックインしようとするときのバイナリ ファイルの競合を回避します。
  • ソース管理システムによって追跡されるデータの量ははるかに少なく、高速になります
  • 開発者が常に独自の DLL をビルドすると、ソース コードがコンパイル済みファイルと一致することを合理的に確信できます。他の誰かが構築したものを使用している場合は、確信が持てません。

コメントで述べたように、サード パーティの DLL をソース管理システムに格納することは、特にそのソースを実際に持っていない場合は、まったく合理的です。.tar.gzまた、さまざまなオープン ソース ライブラリの配布ファイル (など) をソース管理に保存し、すべてをビルドするターゲットの一部としてそれらのMakefileライブラリをビルドする のシステム全体を作成するプロジェクトにも取り組んできました。

于 2009-01-04T09:41:47.787 に答える
1

バージョン管理にバイナリを含めることも合理的です。

  • バイナリのみを使用する人にとって再構築の手間が省けます。

  • リリースすると、バイナリは固定されます。

これを機能させるには、バイナリが常にソースに対応している必要があります。したがって、ソースをマージした場合、それらからバイナリを再構築する必要があります。マージされたバージョンからバイナリの 1 つを選択することはできません。

于 2009-01-04T10:18:51.487 に答える
0

svn:mime-typedll のプロパティが に設定されているか、application/octet-streamまたはその他の非テキスト タイプであることを確認してください。

svn propget *.dll
svn propset svn:mime-type application/octet-stream *.dll

競合が発生した場合は、実際に競合を解決する必要があります。

また、ドキュメントのファイル コンテンツ タイプの章を確認してください。

于 2009-01-04T10:17:58.087 に答える