Come parte di una domanda che ho proposto in precedenza su finding the best match between two sources, dove uno ha un repository git attivo e l'altro non ha cronologia git, ho scritto a perl script to find the closest git commit.Misurazione della "prossimità" negli alberi di grandi dimensioni
Sono in procinto di riscrivere lo script in modo da non dover indovinare quale ramo utilizzare, ma verrà eseguito e trovare la corrispondenza più simile in tutti i rami, quindi dirvi il miglior commit con il miglior ramo. Sfortunatamente, sto scoprendo che la misurazione che sto usando potrebbe non essere il miglior giudice di "vicinanza".
Attualmente, utilizzo diff -burN -x.git my_git_subtree my_src_subtree | wc -l
per determinare quanto sono vicini gli alberi del codice. Questo sembra funzionare più o meno, ma mi imbatto in casi in cui vengono aggiunte o mancanti intere cartelle, che probabilmente esistono o non esistono in un altro ramo.
C'è un modo migliore per determinare quanto sono vicine le sorgenti? Sto immaginando qualcosa che paragona le strutture delle directory, probabilmente anche quante linee sono diverse. Potrebbe essere solo questione di passare parametri diversi a diff
, o forse c'è un altro strumento là fuori che fa qualcosa del genere.
Non c'è modo di vincere misurando la "vicinanza" dei programmi. "if (~ x) explode" è di una misura banalmente diversa da "if (x) explode" (un carattere), ma i risultati di questi due programmi sono radicalmente diversi. Tutti obietteranno a qualsiasi misura tu proponi; Ti suggerisco di scegliere un set e vivere con il flack. Quelli che non amano, puoi dare il benvenuto a implementare una risposta migliore. –