26

プロジェクト/ソリューション ファイルのマージは、ソース管理でマージを実行する開発者/SCM 管理者の間でよく知られている災害です。

たとえば、一般的なシナリオを考えてみましょう。開発は、2 つの異なるブランチのプロジェクト/ソリューションで行われます。メインの開発ラインにマージするときが来ると、VCPROJ (および SLN) の間には非常に小さな類似点があります。

その理由は、Visual Studio がこれらのファイル内のさまざまな XML に似た要素の場所を変更する可能性がある (実際に変更する可能性がある) ためです。たとえば、構成のデバッグとリリースは、proj ファイルの保存操作ごとに順序が入れ替わる場合があります。これにより、自動マージを考慮しなくても、各開発ブランチからの変更を簡単に組み込むことができなくなります。

Microsoft は vcproj 構造を保持するために何らかの perl ハッシュ システムを使用していると推測できます。そのため、保存操作時のファイルのレンダリングは順序付けされていません。

最初に質問したいのですが、これを回避するためのエレガントな方法を見つけた人はいますか?

次に、次の 2 つの提案を行います。

  • Microsoft に上記のファイルを再実装してもらい、要素の順序を厳密に制限してください。

  • vcproj (xml 形式) および sln (sln 形式...) ファイルをアルファベット順に、再帰的に (要素内のすべての要素など) 並べ替えるツールを見つける (または作成する)。ソース ファイルとターゲット ファイルの両方でこのツールを使用すると、Visual Studio が並べ替えられ、マージされたプロジェクトまたは sln ファイルを読み取ることを期待して、変更を簡単にポイント (およびマージ) できます。

その他のアイデアや考えは大歓迎です。

4

8 に答える 8

4

ソリューション ファイル ( http://slntools.codeplex.com )を比較およびマージするツールを作成しました。「一般的なマージ」と比較して、ツールを使用してソリューションをマージする方がはるかに簡単です。プロジェクトファイルを扱えないと思われます。

于 2009-04-13T04:00:08.627 に答える
3

プロジェクト: Mergeは、XML ファイルを比較およびマージするためのツールです。私が最初に書いたのは、Visual Studio プロジェクト ファイルでまさにこの問題が発生していたからです。

XML ファイル内の並べ替えられた要素や属性を正しく検出し、ほぼすべての「競合」を自動的に正しく解決します。

于 2010-08-14T20:46:06.673 に答える
1

私は通常、自動生成されたファイルをSCMの下に置くことを避けようとします。自動生成されたファイルは、開発者が制御するソースファイルから生成する必要があり、それらはSCMの下に置くことができます。特定のツールが不透明で壊れやすい形式でデータを保存する場合、これはツールの問題です。

Visual Studioに関しては、適切なコンパイラ、ライブラリ、およびデバッグ環境があると思いますが、生成されるファイル(PRJ、SLN、RC)には非常に問題があると思います。あなたが言及した問題は別として、それらはまた、異なるVSバージョン間で大きく変化します。このため、独自のmakefileを作成し、makeを使用して外部でプログラムをビルドします。さらに、リソースファイルを、VSに依存することを余儀なくされる部分と、通常のエディターで適切に処理できる部分に分割します。カスタムドメイン固有言語で書かれた高レベルの説明から、多くのリソースファイルを自動的に生成します。したがって、SCMでは処理が難しい変更の影響を最小限に抑えることができます。

于 2008-12-16T19:29:38.580 に答える
1

これらのファイル内で並べ替えを強制するために、ツールを SCM 内のトリガー (SVN の再コミット フックなど) に関連付けることを検討することをお勧めします。

次に、これらの要素を効率的にマージするチャンスがあります。

于 2008-12-16T19:24:29.477 に答える
1

インストール オプションを確認します。すべての同僚が x64 コンパイラ コンポーネントをインストールしていることを確認してください (または全員がインストールしていないこと)。

于 2012-06-13T15:58:53.823 に答える
1

リソース ファイルで行うこと (プロジェクト ファイルではそれほど問題ではありません) は、マージする前に並べ替えることです。マージする前に、Plastic でマージ コマンドを実際に並べ替え (そのために開発した別のアプリ。興味があればコードを共有できますが、特別なものはありません) を実行するように構成したので、ランダムな再配置はすべてなくなります。 .. それが役に立てば幸い。

于 2010-07-25T13:38:40.043 に答える
0

ソリューション ファイルをマージするための小さな Perl スクリプトを作成しました
。 1/

スクリプトは、ニーズに合わせて変更できます。

于 2011-01-06T13:36:37.797 に答える
0

CMake によく似た Visual Studio ソリューションとプロジェクトを生成する gyp という名前の Google プロジェクトがあります。そのプロジェクトの一部は、xml ノードと .sln および .vcproj ファイルの属性をそれぞれ並べ替える Python ツールです: pretty_sln と pretty_vcproj。http://gyp.googlecode.com/svn/trunk/tools/から個別にダウンロードできます。

ここまでは pretty_vcproj だけを見てきましたが、おそらく 2 つの vcproj の正確な内容を比較するために、vcproj にインポートされた .vsprop ファイルも展開されます。結果の vcproj は、Microsoft が提供するスキーマに準拠していませんが、おそらく正常に動作するか、「構成」ノードと「プラットフォーム」ノードのみを並べ替えるように変更して、他のすべてをそのままにしておくことができます。すでに vcprojs の正規化を目的とした他のプロジェクトがあるように見えるため、努力する価値があるかどうかはわかりません...

于 2012-10-29T07:50:01.217 に答える