LibGit2Sharp Cuenta la frecuencia con la que un file ha cambiado

Tengo un repository con más de 10.000 inputs. No quiero preocuparme por los files renombrados. ¿Cuál sería el mejor enfoque para contar la cantidad de cambios realizados en un file?

Mi idea era iterar sobre todas las confirmaciones y comparar target.sha del file con su confirmación principal. Si el SHA es el mismo, el file no se modificó. Si SHA es diferente, se encontró un cambio de file, lo que significa que esta es una nueva versión.

foreach(Commit c in repository.Commits) { //DO THE WORK } 

Esto lleva time, pero fue lo más rápido que pude get por el momento.

Tal vez alguien tiene una mejor idea?

La forma en que describes es básicamente tan rápido como la obtendrás. Lo que queda sería cualquier optimization específica para su implementación de la solución, pero sin publicar código, no podemos comentar sobre eso.

Podría valer la pena comparar los treees que conducen al file en lugar de solo el file para ahorrar algunas asignaciones y costos de sorting; pero realmente no mejorarás algorítmicamente en comparación a comparar las inputs de tree.

Esta sería realmente tu mejor apuesta. Es el mismo enfoque que toma Git para resolver el problema, por lo que tomaría mucho trabajo hacerlo funcionar mejor, más rápido y con la misma fiabilidad. Podría intentar usar un algorithm hash más rápido como MD5 si todo lo que le interesa es contar el número de confirmaciones en las que se realizan los cambios.

NOTA: Teóricamente, podría encontrar algunos problemas de precisión con MD5, pero solo para sets de datos increíblemente grandes y debería ser suficiente para sus necesidades.