CVS和Subversion都有一个方便的合并功能,因此当您更新已修改的源文件时,它会合并其他人在同一文件上所做的更改。
但是,如果您的更改与其他更改不兼容 - 通常如果您同时更改了代码的相同部分 - 则会产生冲突。两段源代码都将包含在合并文件中,您需要手动排序要保留的更改。到目前为止一切都很好。
我的问题是我们中的一些人使用不同的开发环境(Netbeans与vi,如果你必须知道),Netbeans有一个自动缩进功能,可以重新缩进代码。因此,当我们合并更改时,我们有时会遇到巨大的冲突,这些冲突主要是由缩进的简单更改引起的,并不是对代码的真正更改。通常这些会产生数百行明显的冲突,这些冲突必须手动解决,但通常它们只归结为几行真正的变化。当某人的编辑器将unix更改为Windows换行符时,会出现类似的情况,反之亦然。
那么 - 在比较两个版本时,我可以设置合并以忽略这些“冲突”吗? Diff有--ignore-space-change或-b选项,我想在cvs或svn中提供基本相同的功能。我们在不同的项目中使用每个工具,所以我很乐意为其中一个或两个得到答案。
最后两个笔记:
答案 0 :(得分:11)
对于SVN:在命令行工具中,有 -x 选项,您可以将其设置为“ b ”或“ w ”忽略空间变化。所有空间。
您还可以提供第三方工具来进行合并。因此,如果您有一个忽略空格的合并,您可以使用这个。
TortoiseSVN一如既往地是所有参数的前端,因此它也支持忽略空格。
描述了here svn merge命令。您需要的选项是 - diff3-cmd
答案 1 :(得分:5)
对于Windows用户,您可以使用TortoiseSVN附带的merge features(Subversion的Windows资源管理器外壳扩展)来支持您所描述的内容:
忽略行结尾不包括更改 这完全是由于差异造成的 线端风格。
比较空白包括所有 缩进和内联的变化 将空格添加/删除。
忽略空格更改排除 仅因a而发生的变化 变化的数量或类型 空白,例如。改变了 缩进或更改标签 空间。在那里添加空格 之前没有,或删除 空白完全仍然显示 作为改变。
忽略所有空格排除所有空格 只有空白的变化。
答案 2 :(得分:0)
TortoiseMerge没有任何CLA(命令行参数)来忽略空格并忽略大小写。经过大量搜索后,似乎可以通过调整注册表值来实现它。
/* DisableWhitespaceDifferences and DisableCaseDifferences.
* The settings for TortoiseMerge is stored in Registry in CurrentUser\Software\TortoiseMerge\
* DWORDS stored the property values.
*
* IgnoreWS : Set to 1 to ignore the whitespace differences.
* Set to 0 to allow the whitespace differences.
* IgnoreEOL : Set to 1 to ignore the End of Line differences.
* Set to 0 to allow the End of Line differences.
* CaseInsensitive : Set to 1 to ignore the Case differences.
* Set to 0 to allow the Case differences.
*/
// Get the key from the registry
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\TortoiseMerge", true))
{
if (key != null)
{
// Set the IgnoreWS and IgnoreEOL DWORDs based on DisableWhitespaceDifferences is set or not
key.SetValue("IgnoreWS", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);
key.SetValue("IgnoreEOL", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);
// Set the CaseInsensitive DWORD based on DisableCaseDifferences is set or not
key.SetValue("CaseInsensitive", DisableCaseDifferences ? 1 : 0, RegistryValueKind.DWord);
// close key
key.Close();
}
}