7

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

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

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

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

4

1 回答 1

3

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

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

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

查看您的 perl,我认为您可能无法对提交之间的“接近性”顺序做出假设——您可能需要强力检查每个提交,或者至少将其作为一个选项。

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

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

于 2013-02-18T17:02:51.027 回答