Git: forma eficiente de generar una list de todos los files modificados este año (en una sucursal actual)

Necesito generar una list de todos los files que se han cambiado en este año.

El siguiente fragment hace el trabajo, pero lleva ~ 10 minutos ejecutar:

for i in $(git ls-files) do if [[ $(git log -1 --date=short --format="%ad" -- $i) =~ 2016- ]] then echo $i fi done 

¿Cómo se hace esto de una manera más eficiente?

Esto funciona y también enumera los files que se tocaron en cualquier confirmación, y que pueden no existir en la versión actual, o que pueden haber entrado en fase y desaparecido:

 git log --since=2016-01-01 --format=format:%H | \ xargs git show --format=format: --name-only | \ grep . | sort -u 

Será más rápido que el bash que tuvo, pero aún así hará mucho trabajo; Deberá ver si es lo suficientemente rápido para su repository particular.

Si no necesita la información completa (es decir, sobre los files que faltan ahora), simplemente haga un git diff entre el primer commit del año y su HEAD …

Basado en un duplicado del 90% , simplemente puede hacer git diff --stat HEAD 'HEAD@{2016-01-01} .

 git diff --name-only $(git rev-list -1 --first-parent --before=2016-1-1 HEAD)