Medición de "cercanía" en grandes treees fuente

Como parte de una pregunta que planteé anteriormente sobre cómo encontrar la mejor coincidencia entre dos fonts , donde una tiene un repository de git activo y la otra no tiene historial de git, escribí una secuencia de commands de perl para encontrar la confirmación de git más cercana .

Estoy en el process de reescribir el script para que no tengas que adivinar qué twig usar, pero se ejecutará y searchá la coincidencia más cercana en todas las twigs, y luego te dirá el mejor compromiso con la mejor twig. Desafortunadamente, estoy descubriendo que la medición que estoy usando puede no ser la mejor forma de juzgar la "cercanía".

Actualmente, uso diff -burN -x.git my_git_subtree my_src_subtree | wc -l diff -burN -x.git my_git_subtree my_src_subtree | wc -l para determinar qué tan cerca están los treees de códigos. Esto parece funcionar más o less, pero me encuentro con casos en los que se agregan o faltan carpetas enteras, que probablemente existen o no existen en otra twig.

¿Hay una mejor manera de determinar qué tan cerca están las fonts? Estoy imaginando algo que compara las estructuras de directorys, posiblemente también cuántas líneas son diferentes. Podría ser solo cuestión de pasar diferentes parameters a diff , o tal vez haya otra herramienta que haga algo así.

Para mejorar su medición, ¿por qué no testing con 'git diff –shortstat'? La salida se ve así:

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

Puede jugar con cómo priorizar cambios / inserciones / eliminaciones de files, según los resultados.

En cuanto a su perl, creo que probablemente no podrá hacer suposiciones sobre el order de "cercanía" entre las confirmaciones: es posible que necesite comprobar con la fuerza bruta cada confirmación, o al less hacer que esa sea una opción.

También sugiero que, en lugar de search el más cercano, guardes una list orderada de pares (compromiso, "cercanía") y quizás muestres los primeros y los revises a mano. Como se menciona a continuación, no hay una viñeta para determinar si dos sets de códigos están cerca o no simplemente observando el número de cambios. Dicho eso, la cantidad de cambios definitivamente puede ayudarlo a networkingucir la list que debe revisar …

ACTUALIZACIÓN: También debo mencionar que otra ventaja de usar git diff es que no es necesario ejecutar un restablecimiento completo para cada confirmación. Simplemente enlace simbólicamente el directory .git / de su tree desconocido (el que tiene el historial de un git), y use git reset [–mixed] y actualizará el puntero de la cabeza actual, pero no modificará su fuente (obviamente, es necesario hacer una copy de security de lo desconocido tree fuente antes de usar este método).