新しいファイルが 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) の特別なオプション、またはその他の方法によるものですか?