如何获得基于c函数的差异?

时间:2009-09-23 05:21:28

标签: c++ c svn

我们的团队使用svn来管理我们的来源。在C文件上执行重新因子时,我偶尔会更改函数并在文件中移动它们。一般来说,我试图避免移动函数,因为它使得默认的svn diff对于正在发生的事情有点混淆,并且它经常提供一个比它需要的更混乱的差异。

尽管如此,偶尔我会进行功能文件位置更改,并更改内部代码更改功能。另一个出现的地方是分支合并,当文件发生冲突时,其中一个或两个分支都有移动以及内部函数更改。

所以,我正在寻找的是一个语义识别的差异工具,可以告诉我两个级别的差异 - 功能安排和细节(内部功能)。我尝试使用“-p”选项diff(-x -p到svn diff),但这不是它的目的,它肯定没有做我想要的。

我刚才想到的另一个选择是使用diff程序来捕捉代码复制,例如大学可能会用来检查作业,但是在快速搜索中没有明显的东西。

4 个答案:

答案 0 :(得分:1)

使用您的工具执行此操作的一种方法是先移动功能,检查它们,然后更改它们。或者有两个登记,当你看到这种情况发生时,将它们移到另一个中,然后再解决合并问题。它将工作转移给您,但使代码审查更容易。

答案 1 :(得分:0)

因为您在上一次编辑时稍微提高了问题的难度级别:

svn可以做什么,这就是为什么写git的原因。您的问题的答案基本上是“不,没有工具可以使用svn在语义级别上跟踪代码”

(实际上git也没有可用的语义跟踪工具,它跟踪内容)

答案 2 :(得分:0)

我在不同提交中进行外观修改(移动函数)和功能更改,并在提交消息中添加“化妆品”。这样,化妆品工作的巨大和无趣的差异被忽略了,你对功能变化有一个简洁的差异。

答案 3 :(得分:-2)

您可以尝试使用git进行重构:

  

当使用git时,整个'保持代码移动与更改分开'有一个更基本的原因:git可以跟踪代码移动(再次,无论是移动整个文件还是只移动文件之间的函数),并执行' git blame -C'实际上会遵循文件之间的代码移动。它通过相似性分析来做到这一点,但它确实意味着如果你同时移动代码改变它,git就看不到'哦,那个函数最初来自那个其他文件',现在你的代码实际起源的地方会变得更糟。

所以,想法是初始化一个git存储库并重放所有相关的svn-commit到该存储库。之后,使用git找出哪些内容移动到哪里。