首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DVCS检测代码块运动

DVCS检测代码块运动
EN

Stack Overflow用户
提问于 2012-03-31 16:03:48
回答 1查看 689关注 0票数 2

我正在寻找一个版本控制系统,它能够检测一个函数是否被移动到一个文件中。例如,有一个文件"Foo.java“,其中包含函数"a()”、"b()“和"c()”。

代码语言:javascript
复制
public class Foo
{
    void a()
    {
    }

    void c()
    {
    }

    void b()
    {
    }
} 

现在,如果用户A将方法"c()“更改为实际操作:

代码语言:javascript
复制
    void c()
    {
        System.out.println("Function c is called");
    }

用户B认为函数应该是不同的,并将"c()“移到”b()“下:

代码语言:javascript
复制
public class Foo
{
    void a()
    {
    }

    void b()
    {
    }

    void c()
    {
    }
}

现在,如果它们都推进到集中式存储库,我希望结果是:

代码语言:javascript
复制
public class Foo
{
    void a()
    {
    }

    void b()
    {
    }

    void c()
    {
        System.out.println("Function c is called");
    }
} 

现在发生的是冲突,用户A或用户B必须手动解决。在我看来,这应该是自动处理的,或者以某种方式显示。如果文件“没有那么大”,手动解决不是问题,但是包含800+行的文件并不那么清楚。

现在我已经测试了git和mercurial,两者都无法以我想要的方式解决这个问题。我以前使用过subversion,并且知道这是没有处理的,而且我的使用还有一些缺点,所以我更喜欢DVCS。

编辑:我(主要)试图完成的是保存函数的历史记录。例如,我知道Git可以显示某些线条的历史。然而,如果一个函数被移动,就很容易将运动混淆为函数的起源。DVCS应该检测到这个移动,因为它必须知道历史,就像文件的移动一样。Linus曾经说过,一个人只应该移动而不是修改一个文件,这样Git就可以“看到”这个移动。我想Git也许也能以同样的方式跟踪块的运动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-01 06:56:27

正如Mark已经说过的,它本身并不是SCM的问题,而是在其中使用的合并比较工具,这些工具都是(或多或少)面向差异化的(即处理字符串,而不是逻辑代码块)。

(Linux)diff tool that recognizes block movement BeyondCompare中,我什么也不能说,但是在Windows中!完美地检测(并显示)移动的字符串块(在某种程度上,在内部移动和改变)。但是:

  • CompareIT!costs (一些)money
  • 没有长时间更新(从2010年11月起)
  • 不能用于3路合并(仅限2块面板)

我还听说,SmartSVN专业人员中的冲突解决程序也能够检测到移动的代码块

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9957475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档