【问题标题】:SVN Source control issues when merging changes合并更改时的 SVN 源代码控制问题
【发布时间】:2010-02-12 14:22:28
【问题描述】:

我已经看到两个开发人员对一个代码文件进行了更改,如下所示:

x++

这样结束:

x++
x++

由于插入/删除了回车(我认为),一行代码被无声地合并为两行相同的代码(没有冲突)一切都可以编译,但突然测试失败并出现奇怪的行为。

这应该是可能的吗?我该如何防范?

【问题讨论】:

    标签: svn version-control merge


    【解决方案1】:

    为避免因行尾导致的合并问题,只需在这些文件上设置svn:eol-style 属性即可。

    【讨论】:

    • 首席开发者本人哇!你好。会检查这个属性,虽然我不认为行尾是我的问题,但他们可能是。
    【解决方案2】:

    这应该不是问题,除非进行合并的开发人员将冲突标记为已解决而没有进行审查。 SVN 将始终警告冲突。

    仔细的合并跟踪,无论如何都是必需的,应该可以避免任何问题。

    此外,一个小测试表明,如果要合并的更改已经应用,SVN 足够聪明,可以避免冲突。

    以下示例(警告,与当前目录混淆;需要类 Unix 工具)模拟了您刚才描述的情况。

    # Initialize repository
    svnadmin create repo
    REPO_URL="file:///$PWD/repo"
    svn mkdir "$REPO_URL/trunk" "$REPO_URL/branches" -m "Initialize repository structure"
    
    # Add main program
    svn co "$REPO_URL" wc1
    cd wc1/trunk
    cat > main.pl << "EOF"
    my $x=0;
    print("$x\n");
    EOF
    svn add main.pl
    svn ci -m "Add main.pl"
    cd ../..
    
    # Create branch
    svn cp "$REPO_URL/trunk" "$REPO_URL/branches/exp" -m "Create \"exp\" branch"
    
    # Branch developer makes a change
    svn co "$REPO_URL" wc2
    cd wc2/branches/exp
    perl -i -wpe 'print("\$x++;\n") if $. == 2' main.pl
    svn ci -m "Increment x"
    cd ../../..
    
    # Trunk developer makes the same change
    cd wc1/trunk
    perl -i -wpe 'print("\$x++;\n") if $. == 2' main.pl
    svn ci -m "Increment x"
    
    # Merge changes from branch
    svn up
    svn merge --reintegrate "$REPO_URL/branches/exp" .
    cat main.pl
    

    【讨论】:

    • 希望对您有所帮助!你也可以稍微调整一下并模拟一个有冲突的变化。
    【解决方案3】:

    这当然不可能。 SVN 合并通常会识别出本地已经进行了相同的更改。即使换行符发生变化,它至少应该识别变化的上下文并失败。

    您可以通过在实际提交之前检查差异以及通过自动测试(就像您已经做过的那样)来防止这种情况发生。

    你能重现这种行为吗?

    【讨论】:

    • 还不能重现。我相当肯定我们在某个地方是愚蠢的。我不是 SVN 大师,我试图通过日志追溯它是如何引入的。我认为它可能发生在分支合并回主干时,但看起来它在回到主干之前发生在分支中。
    【解决方案4】:

    我已经看到合并出错了,有人解决了冲突,删除了两个合并版本并提交了仍然将两个版本合并在一起的主文件(因为你应该告诉 SVN 哪个是正确的.)

    【讨论】:

    • 嗯,是的,手动解决了冲突,我如何在 SVN 历史记录中找到该操作?
    • 我们总是看到其他指标,例如存在 if
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2013-05-12
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多