21

CVS 和 Subversion 都具有方便的合并功能,因此当您更新已修改的源文件时,它会合并其他人对同一文件所做的更改。

但是,如果您的更改与其他更改不兼容 - 通常如果您都更改了代码的相同部分 - 这将产生冲突。这两段源代码都将包含在合并文件中,您需要手动整理出要保留的更改。到目前为止一切都很好。

我的问题是我们中的一些人使用不同的开发环境(Netbeans 与 vi,如果你必须知道的话)并且 Netbeans 具有自动缩进功能,可以重新缩进代码。因此,当我们合并更改时,有时会发生巨大的冲突,这主要是由于缩进的简单更改引起的,而不是对代码的真正更改。这些通常会产生数百行明显的冲突,必须手动解决,但通常它们归结为几行真正的更改。当某人的编辑器将 unix 更改为 Windows 换行符时,也会发生类似的情况,反之亦然。

那么 - 在比较两个版本时,我可以设置合并以忽略这些“冲突”吗?Diff 具有 --ignore-space-change 或 -b 选项,我希望在 cvs 或 svn 中具有基本相同的功能。我们在不同的项目中使用每种工具,所以我很乐意得到其中一个或两个的答案。

最后的两个注意事项:

  • 显然,合并过程必须任意选择在合并文件中使用哪个版本的空白。我很好 - 我们以后总是可以重新格式化它。
  • 我可以通过更加自律和更频繁地检查来避免其中的一些 - 承认和理解。但我并不完美。
4

3 回答 3

11

对于 SVN:在命令行工具中,您可以将选项-x设置为“ b ”或“ w ”以忽略空间更改。所有空间。
您还可以提供第三方工具来进行合并。所以如果你有一个忽略空格的合并,你可以使用这个。TortoiseSVN 一如既往地是所有参数的前端,因此它也支持忽略空格。

此处描述了 svn merge 命令。您需要的选项是--diff3-cmd

于 2008-10-10T22:57:22.183 回答
5

对于 Windows 用户,您可以使用TortoiseSVN(Subversion 的 Windows Explorer shell 扩展),它带有支持您所描述内容的合并功能:

忽略行尾不包括仅由于行尾样式差异引起的更改。

比较空格包括缩进和内联空格中的所有更改作为添加/删除的行。

忽略空格更改不包括仅由于空格的数量或类型的更改而导致的更改,例如。更改缩进或将制表符更改为空格。在以前没有空格的地方添加空格或完全删除空格仍显示为更改。

忽略所有空格会排除所有仅限空格的更改。

于 2008-10-10T23:16:12.020 回答
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();
    }
}
于 2014-10-27T05:14:02.923 回答