6

新しいファイルが Visual C++ プロジェクトに追加されると、IDE はそれらを次の 2 つの場所に追加します。

  • メイン プロジェクト ファイル (例: myproject.vcxproj)
  • プロジェクト「フィルター」、ソリューション エクスプローラーの仮想パスのリポジトリ (例: myproject.vcxproj.filters)

ファイルの追加をマージすることは、メイン プロジェクト ファイルにとっては問題ではありませんが、フィルターの競合の原因となることがよくあります。この問題は、IDE が常にフィルタ リストの最後に新しい要素を追加するという事実から発生します。

問題を説明するために、フィルターが最初は次のようになっているとします。

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>

次に、プログラマー A が追加newFileA.hしてコミットすると、フィルターは次のように更新されます。

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>
7 <ClInclude Include="fs\path\newFileA.h">
8   <Filter>virtual\path</Filter>
9 </ClInclude>

プログラマー B も を追加newFileB.hし、ヘッド リビジョンでノート同期されている場合、彼のフィルターのローカル コピーは次のようになります。

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>
7 <ClInclude Include="fs\path\newFileB.h">
8   <Filter>virtual\path</Filter>
9 </ClInclude>

プログラマー A の変更と同期しようとすると、7-8-9 行目でプログラマー B のマージ競合が体系的に引き起こされます。これは、変更がまったく同じ場所で発生するためです。

この問題の発生を防ぐ方法はありますか? Visual Studio での構成の変更、マージ ツール (できればAraxis Merge または Beyond Compare) の特別なオプション、またはその他の方法によるものですか?

4

1 に答える 1

1

この質問に基づいて、Visual Studio が機能するためにフィルターは必要ないようです。フィルター ファイルをコミットせずに、全員に独自のファイルを持たせてみましたか? 私は VS を使用していないので、それらのファイルが何をするのか、またはどの機能が同期されないのかわかりません。ただし、一般に IDE 固有のファイルでコミットすることはお勧めしません。これらのファイルは通常、ユーザーごとに変更され、とにかく競合の原因になるだけだからです。

于 2013-10-20T05:01:36.543 に答える