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

时间:2013-02-05 23:08:32

标签: git diff directory-structure

作为我之前提出的关于finding the best match between two sources的问题的一部分,其中一个人有一个活跃的git repo而另一个没有git历史,我写了a perl script to find the closest git commit

我正在重写脚本,这样你就不必猜测要使用哪个分支,但它会在所有分支中运行并找到最接近的匹配,然后告诉你最好的提交最好的分支。不幸的是,我发现我正在使用的测量可能不是“亲密度”的最佳判断。

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

有没有更好的方法来确定来源的接近程度?我正在设想比较目录结构的东西,可能还有多少行不同。这可能只是将不同的参数传递给diff,或者可能还有另一种工具可以做类似的事情。

1 个答案:

答案 0 :(得分:3)

为了改善你的测量,为什么不试试'git diff --shortstat'?输出如下:

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

您可以根据结果使用如何确定文件更改/插入/删除的优先级。

看着你的perl,我想你可能无法对提交中的“亲密度”的排序做出假设 - 你可能需要强制检查每次提交,或者至少做出选择

我还建议,不要寻找最接近的,你保留一个(提交,“亲近”)对的排序列表,也许显示前几个并手动审查它们。如下所述,通过查看更改的数量,没有用于确定两组代码是否接近的灵丹妙药。也就是说,更改的数量肯定可以帮助您缩小您应该查看的列表......

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