Concatenar git diffs de todos los times

Tengo un file en mi repository que ha sido movido y cambiado varias veces desde que lo creé, y estoy tratando de encontrar la versión original. Sé dónde estaba, así que me gustaría grep la location en una list contained de todos los git diffs desde la creación del repository.

Tenga en count que he eliminado este file de este repository para ponerlo en uno más apropiado. Supongo que eso puede dificultarlo … ¿Hay alguna manera fácil de encontrar el compromiso donde se introdujo este file aunque ya no exista?

Puede capturar la ruta completa de un file en cada confirmación, si conoce su nombre, usando ls-tree -r con grep:

 #!/bin/bash filename_to_look_for=SpecRunner.html commit_range=1cb1d..e172 echo Looking for file $filename_to_look_for in commit range $commit_range echo list_of_commits=($(git rev-list $commit_range)) num_of_commits=${#list_of_commits[@]} look_for_file_in_commit() { git ls-tree -r $1 | grep $filename_to_look_for; } for c in "${list_of_commits[@]}" do echo Commit $c ":" look_for_file_in_commit $c echo done 

Este es un ejemplo de un resultado:

 $ bash lstree.sh Looking for file SpecRunner.html in commit range 1cb1d..e172 Commit e172774592f13c9fc1bdcd22099e1a104c5d1208 : 100644 blob 33ce97139315d7240ea3d09a5c62f5ea89887cd7 TestPlans/e2e/SpecRunner.html Commit 14310bc0cf69967d4781e0aec2fd2cca21d72ac6 : 100644 blob 33ce97139315d7240ea3d09a5c62f5ea89887cd7 TestPlans/e2e/SpecRunner.html Commit 20e22a4b88f36f1f9109680c0bed8b6b28941e9f : 100644 blob 33ce97139315d7240ea3d09a5c62f5ea89887cd7 TestPlans/e2e/SpecRunner.html Commit fb80ab129f10225117c7a8b25ab51d1e7842e752 : 100644 blob 33ce97139315d7240ea3d09a5c62f5ea89887cd7 TestPlans/e2e/SpecRunner.html Commit 8d67498dd04ddb1bd27fd110554021d2a7b7c7f1 : 100644 blob 33ce97139315d7240ea3d09a5c62f5ea89887cd7 TestPlans/e2e/SpecRunner.html 

Podrías encontrar renombrados del file foobar.cs como este

 git log --summary --follow foobar.cs | grep -2 rename 

El --follow obligará a --follow git log a seguir el cambio de nombre, y --summary dará como resultado un text que describirá cuándo se hicieron los --summary nombre. La grep extrae los cambios de nombre, y -2 muestra las dos filas circundantes, incluida la confirmación que se renombró.