任何人都有成功获得SVN合并已由两个用户编辑的Visual Studio项目(.csproj)或解决方案(.sln)文件?实施例
在我看来,在步骤(6),svn,Tortoise,Ankh或其他任何应该检测到冲突并自动合并两个项目文件,或者更有可能提示用户B解决冲突。目前,当用户B签入时,我们看到用户A所做的更改已被删除,从而导致错误的构建,部署等缺少在上次签入之前添加的功能。
由于项目文件是XML,为什么这是一个问题?我在这里错过了什么吗?我在这里搜索了档案并用谷歌搜索到了我不能再谷歌了,但还没有找到一个好的解决方案。
答案 0 :(得分:32)
您认为您如何欺骗SVN执行第6步?你似乎误解了出了什么问题。 SVN永远不会从最新的工作副本 提交,因此如果没有用户B先前更新并合并用户A的更改,步骤#6将无法工作。老实说。试试吧。
我想会发生什么呢:
我偶尔会看到这种情况发生,通常是用户B并不真正理解SVN(或CVS',FTM)的工作流程。
所以这里有一些提示:
除非您保存了所有内容,否则不要更新 (“文件” - >“全部保存”;对我来说,这是Ctrl + Shift + S)。如果您犯了这个错误并且卡住了,请覆盖磁盘上的更改,然后手动合并丢失的更改。 (它可能也可以将项目/解决方案文件更新回N-1版本,然后再次更新为HEAD,以便让SVN执行合并。)
如果不检查您更改的文件 并快速 查看差异 ,请不要提交看看这些变化是否符合你的期望。
提前提交,经常提交 。开发人员处理相同代码库的次数越多,就越有可能发生冲突。更新工作副本而不更新的时间越长,就越有可能发生冲突。由于开发人员的数量通常不在您手中,因此更新频率是您可以用来降低冲突概率的一件事。
答案 1 :(得分:2)
我是第二个sbi的回答。一种可能的解决方案是始终在Visual Studio中更新,至少如果您使用VisualSVN(我不确定AnkhSVN如何应对这种情况)。
VisualSVN将在更新操作期间阻止visual studio,并确保自动重新加载任何已更改的项目,因此用户无法忽略外部更改。
答案 2 :(得分:1)
一个相当激进但有效的解决方案是使用工具从元定义生成那些解决方案文件,然后只将元定义放在源代码控制下,而不是Visual Studio项目文件(这是合并的噩梦)。
在我的团队中,我们使用MPC来执行此操作。我们有:
由于它们都是手工编辑的文本文件,因此我们不再遇到Visual Studio混淆所有内容的问题。
缺点是一个额外的工具,需要在添加或删除文件时重新生成解决方案文件,但也有一些额外的好处:
根据我的经验,设置工具可能会有点痛苦(但这一切都取决于项目的大小和复杂程度),这显然是值得的。
请注意,MPC不是用于此目的的唯一工具。其他存在,例如CMake。
答案 3 :(得分:1)
您还可以通过确保项目文件不列出项目中的每个单独文件来尝试减少冲突。这样可以避免在用户添加文件时首先更改项目文件。
您可以在项目文件中使用通配符:see MSDN
示例:
<ItemGroup>
<Compile Include="Src\**\*.cs" />
[...]
</ItemGroup>
令人遗憾的是,Visual Studio不鼓励这种项目设置,而是选择列出单个文件。
答案 4 :(得分:0)
这是非常乏味和令人厌烦的,所以你只需要犁过它。您有时会保留本地工作副本,因为它已添加了所有自定义项目。但是,在其他情况下,您需要合并Base解决方案中的所有新项目,以便最终得到两个解决方案文件中的所有内容。为了便于阅读,最好在添加自定义之前添加所有基础产品。
不要担心GUID的第一部分对于项目是相同的,但它是唯一的唯一部分。
Fissh