¿Cómo determino el linaje de varios sets de código fuente?

Tengo varios cientos de sets de código fuente donde sé que los files se copyron de un proyecto a otro. La mayoría de los proyectos fueron revisados ​​en subversión mucho después del hecho (el historial de revisión será inútil). ¿Hay alguna herramienta automatizada que me permita averiguar qué proyectos son los más antiguos y cuál es el tree genealógico del código fuente desde allí?

Si el código contiene información de date [ej. dates de comprobación para alguna herramienta de gestión de configuration previa, etc.] o información de versión, obviamente debería usar eso como punto de partida.

Una vez que haya hecho eso, lo que quiere hacer es comparar los sets de códigos fuente entre sí y formar un tree de linaje basado en una distancia mínima en términos de ediciones. Es decir, A probablemente deriva de B si el recuento delta de (A, B) es menor que el recuento delta de (A, x) y (y, B) para el rest de x e y en el sistema, para alguna definición de delta en términos de líneas cambiadas, líneas movidas, files renombrados, files movidos, etc. Además, si los cambios de A a B son un subset de los cambios de A a C, B es un posible intermediario.

Esto networkinguce su problema para detectar "recuento delta" en pares de sistemas y / o comparar sets delta para su subsunción. Para esto, probablemente desee un detector de clonación, que le indique qué partes del código son iguales ; el complemento es lo que es diferente.

No sé si alguien ha empaquetado esto en una forma orderada para un uso fácil. Lo más cerca que puede venir es un detector de clones estructurales, consulte http://www.comp.nus.edu.sg/~stan/PAPERS/CMCA%20Summary.pdf . No creo que esto produzca una coincidencia de grano fino, por lo que la count delta puede ser un poco áspera.

Si desea una detección más precisa de clones de grano, y el código está en gran parte en un lenguaje informático, puede considerar nuestros CloneDR y / o SmartDifferencers, que comparan el código en el nivel de syntax abstracta extraídos de analizadores precisos del lenguaje.