我有一个在过去未知时刻从项目分叉的文件。我想尽可能地确定那个叉子的时刻。自fork-moment以来,该文件已被更改。
Winmerge突出显示大约20%的行,其中大约一半只是行中的几个字符,例如路径更改或内联函数变成了变量或函数调用。 (在忽略空白变化并启用移动块检测后,这一比例为20%,如果没有这个,则接近~40%。)我不用担心分支机构,原始版本控制系统是CVS。 (我无权访问CVS文件系统)。我有一个带有与CVS提交相对应的标签的git导入版本,如果需要,可以用Mercurial生成相同的内容。
我不关心匹配特定的CSV提交日期/时间/数字/等等。目标是确定何时新文件的内容开始漂移,并在修订历史中前进,樱桃选择要合并到分叉文件的内容。
对于这个项目,我可以强制它,只有十几个版本,其中fork很可能发生,文件少于500行。然而,不难想象一个不可行的场景,我很想知道一个优雅的解决方案。
你会如何解决这个问题?
答案 0 :(得分:0)
“蛮力”听起来好像在考虑测试所有修订版。通常会使用二进制搜索。为了确定它是否是一个很好的匹配,我通常只使用diffstat中的数字(因为你说有后叉更改)。但是,对块移动的计算会使事情变得复杂。