gpt4 book ai didi

git - DVCS 检测代码块移动

转载 作者:太空狗 更新时间:2023-10-29 14:48:50 25 4
gpt4 key购买 nike

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

public class Foo
{
void a()
{
}

void c()
{
}

void b()
{
}
}

现在,如果用户 A 更改方法“c()”以实际执行某些操作:

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

用户 B 看到函数的顺序应该不同,将“c()”移到“b()”下:

public class Foo
{
void a()
{
}

void b()
{
}

void c()
{
}
}

现在,如果他们都推送到中央存储库,我希望结果是:

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 也许能够以同样的方式跟踪 block 的移动。

最佳答案

正如 Mark 已经说过的 - 这不是 SCM 本身的问题,而是在其中使用了 Merge-Compare 工具,它们(或多或少)都是面向差异样式的(即使用 strings,不是逻辑代码块)

关于 (Linux)diff tool that recognizes block movement 中提到的,我无话可说。 BeyondCompare,但在 Windows 世界中 CompareIT!完美地检测(并显示)移动的字符串 block (并且,在某种程度上 - 内部略有移动和变化)。但是:

  • 比较吧!花费(一些)钱
  • 长时间不更新(从2010年11月开始)
  • 不能用于 3 向 merge (仅限 2 面板差异)

我还听到一些谣言,SmartSVN Professional 中的冲突解决器也能够检测移动的代码块

关于git - DVCS 检测代码块移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com