我有几百套源代码,我知道文件是从一个项目复制到另一个项目的。大部分项目在事后很久都被检查过颠覆(修订历史将毫无用处)。是否有任何自动化工具可以让我找出哪些项目是最旧的,以及源代码的族树是从那里开始的?
答案 0 :(得分:0)
如果代码包含日期信息[例如。检查一些以前的配置管理工具等的日期或版本信息,显然你应该把它作为起点。
完成后,您要做的是将源代码集相互比较,并根据编辑的最小距离形成一个谱系树。也就是说,如果(A,B)的增量计数小于系统中所有其他x和y的(A,x)和(y,B)的增量计数,则A很可能来自B,对于某些定义delta的行更改,行移动,文件重命名,文件移动等。另外,如果从A到B的更改是从A到C的更改的子集,则B可能是中介。
这可以减少您在跨系统对检测“增量计数”和/或比较增量集以进行包含时的问题。为此,您可能需要克隆检测器,它会告诉您代码的哪些部分是相同;补充是不同的。
我不知道是否有人将其打包成一个整洁的形式以方便使用。你最接近的是一个结构克隆探测器,见http://www.comp.nus.edu.sg/~stan/PAPERS/CMCA%20Summary.pdf我不认为这会产生精细的颗粒匹配,因此增量计数可能有点粗糙。
如果您想要更精细的谷物克隆检测,并且代码主要使用一种计算机语言,您可以考虑我们的CloneDR和/或SmartDifferencers,它们比较从语言精确解析器中提取的抽象语法树级别的代码。