测量大型树木中的“亲密度”

作为我之前提出的关于在两个源之间找到最佳匹配的问题的一部分,其中一个具有活动的git回购,另一个没有git历史,我编写了一个perl脚本来查找最接近的git commit。

我正在重写脚本,以便您不必猜测要使用哪个分支,但它会遍历并在所有分支中找到最接近的匹配,然后告诉您最佳分支的最佳提交。 不幸的是,我发现我使用的衡量标准可能不是“亲密度”的最佳评判标准。

目前,我使用diff -burN -x.git my_git_subtree my_src_subtree | wc -l diff -burN -x.git my_git_subtree my_src_subtree | wc -l来确定代码树有多接近。 这似乎或多或少地工作,但我遇到了整个文件夹被添加或丢失,可能存在或不存在于另一个分支中的情况。

有没有更好的方法来确定来源有多近? 我想象的是比较目录结构的东西,可能以及有多少行不同。 这可能仅仅是通过不同的PARAMS到的问题diff ,或许有出有另一种工具,做这样的事情。


为了改进您的测量,为什么不尝试'git diff --shortstat'? 输出如下所示:

 1 file changed, 1 insertion(+), 2 deletions(-)

您可以根据结果玩弄如何确定文件更改/插入/删除的优先顺序。

看看你的Perl,我认为你可能无法对提交之间的“接近”顺序做出假设 - 你可能需要蛮力检查每一个提交,或者至少让这个选项。

我还建议,不要寻找最接近的,而是保留一个排序的(提交,“亲密度”)对列表,并可能显示前几位并手动查看它们。 如下所述,仅通过查看更改次数来确定两组代码是否接近或没有银弹。 也就是说,更改次数绝对可以帮助您缩小应该查看的列表的范围。

更新:我还应该提到使用git diff的另一个优点是,您不必为每次提交运行硬重置。 简单地将你的未知树的git /目录(一个没有git的历史记录)符号链接起来,然后使用git reset [--mixed],它会更新当前的头指针,但是保持你的源码不变(显然需要备份未知的源树使用此方法之前)。

链接地址: http://www.djcxy.com/p/11785.html

上一篇: Measuring "closeness" in large source trees

下一篇: IISExpress ClientCertificate Setup Steps