當新的文件添加到Visual C++項目時,IDE將其添加在兩個位置:如何在合併Visual C++ 2012項目篩選器時防止系統衝突?
- 主項目文件(如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>
然後程序員添加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>
如果程序員乙還增加了一個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的變化同步將有系統地引起對程序員B的第7-8-9行的合併衝突。這是因爲變化發生在同一地點。
有沒有辦法來防止這個問題的發生,無論是通過在Visual Studio中的配置變化,一些合併工具(最好 Araxis合併或超越比較),或其他任何東西的一個特殊的選項?
什麼是最終嘗試合併?如果它像git那麼你可以應用合併策略來處理這種情況。簡而言之,它確實取決於正在進行合併的工具以及它如何應用它們。另外,正如MJD所說,如果這是版本控制,您可以選擇不提交過濾器,並讓每個用戶都擁有自己的過濾器。 –
@ micah-caldwell我們使用Perforce進行版本控制,但我們不一定堅持使用P4Merge進行合併。我們主要使用Araxis Merge和Beyond Compare來完成這項工作。對於* not *提交過濾器,這可能是一個好主意,請參閱我的評論[MJD's answer下面](http://stackoverflow.com/a/19474105/1005455)。 –
您的答案最終取決於合併的工具。在git的情況下,有一個合併策略,可以在這種情況下有用,在這種情況下,當兩個添加發生在同一個地方時,它會添加這兩個策略。 P4Merge,Beyond Compare和/或Araxis Merge有可能有類似的選擇。我建議重新詢問你的問題,專門爲一個工具(或多個問題,每個工具一個),因爲答案將是工具特定的。 –